Страница 45 из 421

Добавлено: Вс июн 14, 2009 23:38:24
hubble
Всем спасибо.
Хоть и не очень хотелось, но придется использовать внутренний ref.

Меню

Добавлено: Вт июн 16, 2009 20:54:10
ExEcUtE
Приветствую всех. Пришёл я к вам с проблемой-необходимо реализовать меню 3-степеней вложенности на дисплее 16х2 :oops: . Пишу в CVAVR, контроллер мега16. Нет ли у кого хорошо комментированного исходника с малым использованием памяти? :?
зы: управление с четырёх кнопок

Добавлено: Пт июн 19, 2009 09:28:40
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 дать не могу,да и не готово ещё.

Добавлено: Вс июн 21, 2009 22:42:19
ExEcUtE
Спасибо!!!!

PS: Не могли бы вы мне, неопытному, разъяснить по возможности как к этому коду http://www.telesys.ru/wwwboards/mcontro ... 9256.shtml прикрутить отображение меню и действия? Т.е. как это использовать в программе? А то по описанию автора выдаёт ошибок тучу....

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

P.S. В архиве - проект на CVAVR и схема в Proteus'e.

Добавлено: Сб июл 11, 2009 10:04:13
mr.Kirill
Не плохо было бы еще указать версию Proteus'а

Добавлено: Сб июл 11, 2009 10:32:10
hubble
Proteus 7.5 SP3

Добавлено: Сб июл 11, 2009 16:38:35
kupriyanov
Выставьте в протеусе источник тактирования МК в свойствах компонента правильно:

CKSEL FUSES: 1101 Ext, Crystal 3-8 MHz

Зуб даю.... помогло!!!! 8)

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

Добавлено: Сб июл 11, 2009 22:37:31
ikarab
У меня вот так правильно отсчитывает паузу

Изображение

Добавлено: Вс июл 12, 2009 15:39:45
kupriyanov
Ну и у меня заработало на любой установке в этом поле кроме дефолта. Любой источник. И секунду считал правильно.
Правда у меня цвавр 1.25.9 и проект я заново скомпилировал.

Добавлено: Вс июл 12, 2009 17:15:36
hubble
Спасибо всем. Вроде бы разобрался.

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

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

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

Контроллер ATMega8 @16MHz. Можно использовать TC2 в асинхронном режиме, но ноги кварца заняты :( .
Спасибо.

Добавлено: Вт июл 14, 2009 18:07:43
Yellow Tiger
Вероятно, нужно прицепить свой стартап, в котором переписать процедуру инициализации глобальных переменных, так, чтобы эта инициализация зависела от того, что послужило причиной сброса.
Смотри в хелпе статью "Using an External Startup File" а в тамошнем коде участок от ";GLOBAL VARIABLES INITIALIZATION " до "__GLOBAL_INI_END"

Добавлено: Вт июл 14, 2009 19:35:39
Barni
hd44780 писал(а):Не подскажет ли кто, как в CvAVR реализовать переменные, сохраняющие свое значение при сбросе?
Надо использовать WDT для экономии энергии и без таких переменных не обойтись.
А если определить их в eeprom AVRки

Добавлено: Вт июл 14, 2009 19:54:39
Yellow Tiger
В EEPROM держат константы обычно, а ему нужны переменные. :)))

Добавлено: Ср июл 15, 2009 07:45:24
hd44780
Да, наверное startup свой попробую написать.

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

PS. EEPROM исчерпает ресурс через сутки работы. Если не раньше. :)

Добавлено: Сб июл 18, 2009 17:04:26
hd44780
Подправил startup, помогло. Переменные перестали обнуляться.

Добавлено: Сб июл 18, 2009 19:53:00
Yellow Tiger
Так, если startup - свой, то куда ж они из колеи-то денутся? :)))

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

Добавлено: Сб июл 18, 2009 20:15:09
hd44780
Yellow Tiger писал(а): P.S. (на всякий случай спрошу) Надеюсь, переменные не все сохраняются, а только нужные?
Регистровые все сохраняются :)) . Я сам инициализирую их где надо.
Очистку SRAM я пока не убирал.

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