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

Обсуждаем контроллеры компании Atmel.
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

Сообщение hubble »

Всем спасибо.
Хоть и не очень хотелось, но придется использовать внутренний ref.
ExEcUtE
Родился
Сообщения: 5
Зарегистрирован: Пн дек 15, 2008 19:29:52

Меню

Сообщение ExEcUtE »

Приветствую всех. Пришёл я к вам с проблемой-необходимо реализовать меню 3-степеней вложенности на дисплее 16х2 :oops: . Пишу в CVAVR, контроллер мега16. Нет ли у кого хорошо комментированного исходника с малым использованием памяти? :?
зы: управление с четырёх кнопок
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

Вам надо как-то обозначать положение курсора.Например мигающее знакоместо,подчёркивание или оба вместе.Чего-то я в стандартной библиотеке LCD CVAVR не нашёл этих команд.Надо писать самому.А там далее всё как по маслу-устанавливаете курсор в нужное вам место командой lcd_gotoxy(column,line);
Кнопочками инкрементируете нужное вам положение столбца или строки,далее жмёте кнопу "выбор" и проверяете,типа
if(column(или line)==столько-то)goto туда-то;
Свои меню помечайте промежуточной переменной,например "char meny",одному присвоете "1",другому-"2".
Так и будете ходить по ним:
if((meny==3)&(column==1)){
lcd_clear();
sprintf(buf,"%U",time);
lcd_gotoxy(0,0);
lcd_puts(buf);
meny=4; //это будет четвертое меню
}
if((!PIND.0)&(meny==4)){//нажимаем кнопку и ковыряем в данном меню
и т.д.
У меня получилось то,что в архиве.
Извините,код в C дать не могу,да и не готово ещё.
Вложения
Prot_7.5.rar
(23.53 КБ) 262 скачивания
ExEcUtE
Родился
Сообщения: 5
Зарегистрирован: Пн дек 15, 2008 19:29:52

Сообщение ExEcUtE »

Спасибо!!!!

PS: Не могли бы вы мне, неопытному, разъяснить по возможности как к этому коду http://www.telesys.ru/wwwboards/mcontrol/646/messages/39256.shtml прикрутить отображение меню и действия? Т.е. как это использовать в программе? А то по описанию автора выдаёт ошибок тучу....
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

Сообщение hubble »

Всем привет!
Сейчас у меня такая проблема.
Помогите понять проблему, которая возникла при написании малюсенького кусочка программы, написанного на Code Vision 2.03.9.
Пауза, которая указана в программе (delay_ms(1000)), в Proteus'e в два раза меньше. Прерывание - так само! Использовал CodeWizardAVR.
Я бы может быть еще думал над этим вопросом, но уже ничего не понимаю. Дело в том, что перед этим была написана нормальная по сложности программа с тем же контроллером; с тем же интервалом прерывания; с тем же предделителем; с той же величиной TCNT0=0xF0 - в общем со всеми теми же параметрами. И там было все отлично. Что произошло? Помогите найти ошибку!
Задал этот же вопрос на казусе. Пока тишина.
Заранее благодарен.

P.S. В архиве - проект на CVAVR и схема в Proteus'e.
Вложения
test.rar
(38.19 КБ) 226 скачиваний
Аватара пользователя
mr.Kirill
Мучитель микросхем
Сообщения: 438
Зарегистрирован: Вт сен 25, 2007 19:40:26
Откуда: Челябинск

Сообщение mr.Kirill »

Не плохо было бы еще указать версию Proteus'а
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

Сообщение hubble »

Proteus 7.5 SP3
Аватара пользователя
kupriyanov
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 30, 2009 15:55:13
Откуда: г. Комсомольск на Амуре
Контактная информация:

Сообщение kupriyanov »

Выставьте в протеусе источник тактирования МК в свойствах компонента правильно:

CKSEL FUSES: 1101 Ext, Crystal 3-8 MHz

Зуб даю.... помогло!!!! 8)
Any Problems????
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

Сообщение hubble »

Не работает!
Дело в том, что в этом случае пин РВ6 (это 9 нога контроллера) видимо перенастраивается на вход (т.к. в таком случае используется внешний кварц, а это - нога входа кварцевания). Это видно в Proteus'e. Там четыпе восьмерки с точкой чередуются не пустым экраном, а прочерками (как раз за этот сегмент отвечает РВ6).
По крайней мере, у меня именно так. Какие еще предложения?
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

У меня вот так правильно отсчитывает паузу

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

Сообщение kupriyanov »

Ну и у меня заработало на любой установке в этом поле кроме дефолта. Любой источник. И секунду считал правильно.
Правда у меня цвавр 1.25.9 и проект я заново скомпилировал.
Any Problems????
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

Сообщение hubble »

Спасибо всем. Вроде бы разобрался.
Аватара пользователя
hd44780
Встал на лапы
Сообщения: 132
Зарегистрирован: Вт июл 14, 2009 09:27:37
Откуда: Донецк, Украина

Сообщение hd44780 »

Не подскажет ли кто, как в CvAVR реализовать переменные, сохраняющие свое значение при сбросе?
Надо использовать WDT для экономии энергии и без таких переменных не обойтись.
В WinAVR есть конструкция

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

u08 wdtpresc __attribute__ ((section (".noinit")));


она работает (я проверял), но очень не хочется переписывать весь работающий проект на другой компилятор ради одного только WDT.
Как я предполагаю, CVavr лепит переменные в регистры, а они обнуляются. Надо атрибут типа анти-register.

Контроллер ATMega8 @16MHz. Можно использовать TC2 в асинхронном режиме, но ноги кварца заняты :( .
Спасибо.
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

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

Вероятно, нужно прицепить свой стартап, в котором переписать процедуру инициализации глобальных переменных, так, чтобы эта инициализация зависела от того, что послужило причиной сброса.
Смотри в хелпе статью "Using an External Startup File" а в тамошнем коде участок от ";GLOBAL VARIABLES INITIALIZATION " до "__GLOBAL_INI_END"
Barni
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Ср дек 06, 2006 02:34:58

Сообщение Barni »

hd44780 писал(а):Не подскажет ли кто, как в CvAVR реализовать переменные, сохраняющие свое значение при сбросе?
Надо использовать WDT для экономии энергии и без таких переменных не обойтись.

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

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

В EEPROM держат константы обычно, а ему нужны переменные. :)))
Аватара пользователя
hd44780
Встал на лапы
Сообщения: 132
Зарегистрирован: Вт июл 14, 2009 09:27:37
Откуда: Донецк, Украина

Сообщение hd44780 »

Да, наверное startup свой попробую написать.

Спасибо всем.

PS. EEPROM исчерпает ресурс через сутки работы. Если не раньше. :)
Аватара пользователя
hd44780
Встал на лапы
Сообщения: 132
Зарегистрирован: Вт июл 14, 2009 09:27:37
Откуда: Донецк, Украина

Сообщение hd44780 »

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

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

Так, если startup - свой, то куда ж они из колеи-то денутся? :)))

P.S. (на всякий случай спрошу) Надеюсь, переменные не все сохраняются, а только нужные?
Аватара пользователя
hd44780
Встал на лапы
Сообщения: 132
Зарегистрирован: Вт июл 14, 2009 09:27:37
Откуда: Донецк, Украина

Сообщение hd44780 »

Yellow Tiger писал(а):P.S. (на всякий случай спрошу) Надеюсь, переменные не все сохраняются, а только нужные?


Регистровые все сохраняются :)) . Я сам инициализирую их где надо.
Очистку SRAM я пока не убирал.

Иначе никак - я ж не знаю, в какой регистр/ адрес памяти какую переменную компилятор засунет.... Или я чего-то не понял?
Ответить

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