CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Ты используешь инклуд math.h, а в нем, насколько я помню, определяется макрофункция min(), поэтому на переменную с тем же имененем:

Код: Выделить всё

int sec,min,hour;
компилятор и ругается, что, дескать, "как мне с тезками разбираться"?
Больше ошибок не найдено.
Аватара пользователя
sachok
Опытный кот
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк
Контактная информация:

Сообщение sachok »

Ага есть там такое ну в math.h всё понял спасибо!!!
Я не Сашок!!!
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Сообщение Барсик »

Нарвался на неприятность... Писал простенькую программку для ATtiny2313. Решил сэкономить время, чтобы не читать даташит и не копаться в битах. Вызвал автоматичский генератор кодов (CodeWizardAVR V1.24.8b Professional). Чтобы настроить работу с таймерами. Задал, как полагается, любимую моду CTC для обоих, и прерывание по совпадению с регистром сравнения...
Всё хорошо. Автоматичский генератор кодов сгенерировал всё "как надо", сгенерировал правильные заготовки для обработчиков прерываний. Всё хорошо, таймер 1 работает как надо, только прерывания от таймера 0 нифига нету...
Оказалось, что автоматичский генератор кодов сделал всё как надо, а вот только бит для таймера 0 в регистре маски прерываний TIMSK установить забыл... Ну, ошибся Паша Хейдак... Ну, бывает... Правда, к версии CodeWizardAVR V1.25.9 Professional, баг был пофиксен. Так что она генерит всё правильно.
Отсюда две морали:
1) доверяй, но проверяй.
2) надо вовремя обновлять версии любимых программ.
Аватара пользователя
kupriyanov
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре
Контактная информация:

Сообщение kupriyanov »

Sounds писал(а):Народ кто нибудь запускал CodeVisionAVR по Vista?


Под вистой сама программа работает нормально, даже совместно с Proteus'ом, но вот программировать контроллер не получается по причине отсутствия у меня драйверов по Vista на прогррамматор AVR910_USB.
http://prottoss.com/projects/AVR910.usb ... rammer.htm

Может кто-нибудь уже решил данную проблему подскажите!!! плиз
Any Problems????
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

anco писал(а):Здравствуйте!
Создание проблемы:
1) с помощью кодевизардаАВР генерируем проект: тини2313, 8Мгц, включаем Watchdog с прескалером OSC/256k. (ресет контроллера через 2 сек)
WDTCR=0x1F;
WDTCR=0x0F;

2) подключаем библиотеку #include <delay>

3) в главном цикле пишем
#asm("wdr");
delay_ms(1);
После выполнения delay_ms(1); постоянно происходит ресет контроллера.

Как это можно побороть?


Или отключить вочдог или сбрасывать его постоянно.
Но CVAVR сам отключает вочдог по умолчанию.
anco
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс фев 15, 2009 21:12:36

Сообщение anco »

В общем вачдог работает в программе (настоящей) правильно пока дело не дойдет до строки с delay_ms.
В примере выше, кстати, вачдог постоянно сбрасывается, но ресет происходит, если верить Протеусу каждую милисек.
С настоящей прошивкой в камне, результат похожий на то что выдает Протеус.
Аватара пользователя
kupriyanov
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре
Контактная информация:

Сообщение kupriyanov »

Попробуй поставить задержку не 1 а, скажем, 5-10 мс. Если будет все нормально, то вернешься к нужному варианту путем delay_us(1000);
Any Problems????
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

протеус неверно симулирует работу WDT для микроконтроллера attiny2313 (возможно, и для любых прочих тоже - не проверял). если WDT включен, то протеус будет делать сброс каждые несколько миллисекунд независимо от того, как часто сбрасывается WDT программно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

Он вроде про реальный МК пишет и про то что в PROTEUS похоже на то что в реальном.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

ikarab писал(а):Он вроде про реальный МК пишет и про то что в PROTEUS похоже на то что в реальном.
похоже - еще не доказательство. причин для зависания и сброса может быть море - и с виду будет похоже :) а что протеус в данном случае лажает - это факт.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
anco
Открыл глаза
Сообщения: 57
Зарегистрирован: Вс фев 15, 2009 21:12:36

Сообщение anco »

Что то или я дико торможу или контроллер.
Написал 3 строчки кода, зашил его, начал эксперементировать и стал чувствовать себя еще хуже...
В прикрепленном файле, если его залить в контроллер, вачдог настроен на ресет через 1 сек. По идее портВ всегда должн быть равен 0xFF. Программа даже не должна доходить до главного цикла, но диод на портуВ моргает с постоянной периодичностью в 1 сек! :shock: Ресета не происходит... :cry:
Помогите плз, а то уже крыша едет.
WDTON=1

PS Может проектом подобным в меня кините (заведомо рабочим), что бы или себя потестировать или контроллер.
Вложения
q.c
(2.46 КБ) 327 скачиваний
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

anco писал(а): WDTON=1

Наверно вы выключили сторожевую собаку.

Очень рекомендую почитать "Все о прошивании AVR" - не спешно, вдумчиво! Там подробно расписано что да как,
а фьюзы ATtiny2313 на странице 8 расписаны по-русски.
http://kazus.ru/forum/topics/f_62698.html#62698
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

Подскажите как добавить знак % в строку?
b=100;
sprintf(lcd, "PWD=%i", b);
с применением этого кода я получаю строку: PWD=100
Вопрос: как сформировать вот такую строку(PWD=100%)?
В зарание спасибо!!!
Аватара пользователя
kupriyanov
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре
Контактная информация:

Сообщение kupriyanov »

ПРoБУЙ

sprinf(lcd,"PWD=%i\%",b);
Any Problems????
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

если мне память е изменяет, надо вводить так: printf("PWM=%i%%",b); то есть задвоенный процент.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

To kupriyanov
Спасибо за ответ, но твой вариант не подошёл!
To AVR
Спасибо тебе, твой вариант оказался верным!
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

эх..... у меня опять возникла проблема(не понят-ка)!
Есть ЖК модуль(MT–16S2D который состоит из 16 ячеек, каждая ячейка 5х8 пикселей) на котором надо плавно начертить горизонтальную полоску. Когда я это задумал мне эта задача показалась просто(не сложной), но когда начал делать понял что тут без литра, или без вашей помощи сложно будет.
Вот код, помогите доработать его:

Код: Выделить всё

typedef unsigned char byte;
 int g;
flash byte char0[8]={
0b000000000,
0b000000000,
0b000000000,
0b000010000,
0b000000000,
0b000000000,
0b000000000,
0b000000000
};

void define_char(byte flash *pc,byte char_code)
{
byte i,a;
a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}

void main(void)
{

lcd_init(16);
define_char(char0,2);
lcd_gotoxy(3,1);

 for (g=0; g<10; g++){
 delay_ms(500);
lcd_putchar(2);
}
}

Как мне реализовать плавное заполнение ячейки?
То есть что-бы с каждым шагом цикла добавляла на 1 пиксиль!
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Это же не графический дисплей, а потому придется извращаться:

1. определить 6 своих символов, в которых та самая горизонтальная линия занимает - 0,1,2,3,4 и 5 пикселей, соответственно.
2.вывести в первую позицию строки первый из этих шести символ, дать задержку - вывести второй, так продолжить до шестого,
3.повторить п.2. для второй позиции строки
4.аналогично пп.2-3 заполнить все позиции строки.
Аватара пользователя
Sounds
Прорезались зубы
Сообщения: 238
Зарегистрирован: Вт май 27, 2008 23:23:24

Сообщение Sounds »

Впринцепи я так и думал, но я хотел генирацию символа сделать через масив и цкл! Тут главное придумать алгоритм генерации символа.
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Что-то я не пойму... Эти символы - константы, то есть, во время работы не меняются, так нафига же их генерировать каким-то алгоритмом? :?
Ответить

Вернуться в «AVR»