Страница 1 из 1

Ребята, помоги со спящим режимом в atmega64

Добавлено: Ср апр 04, 2012 14:44:00
SergeyF
Здравствуйте!
Решил под вот под старость лет поразбираться с микроконтроллерами. Даже что то маленько получилось(дергать ножками, да состояние их получать)
Сейчас необходимо решить задачу, возможно легкую для Вас.
Питать МК от батарейки и периодически мигать светодиодом.
Со светодиодом разобрался.
Но вот другая проблема: не могу разобраться как переводить МК в спящий режим и по интервалу(допустим 10сек.) просыпаться, мигать светодиодом и опять засыпать, чтобы экономить заряд батарейки.
Уже больше месяца копаюсь, в голове каша из регисторов, таймеров и т.п., Ваш форум весь за это время прочитал, а результата со спящим режимом ноль. Видимо старый для этих дел стал...
Микроконтроллер atmega64, пишу в Codevisionavr.
Буду очень благодарен за помощь!

Re: Ребята, помоги со спящим режимом в atmega64

Добавлено: Ср апр 04, 2012 14:55:56
Мастер Ломастер
курите WDT: настраиваете его на 2 секунды, при срабатывании - считаете "разы", как 5 насчитали - так мигаете. все остальное время - спокойный сон.

Re: Ребята, помоги со спящим режимом в atmega64

Добавлено: Ср апр 04, 2012 16:38:36
SergeyF
пробовал с WDT, но не могу понять, как по нему что то отсчитывать, он при своем переполнении делает сброс МК со всеми переменными...

Re: Ребята, помоги со спящим режимом в atmega64

Добавлено: Ср апр 04, 2012 20:11:35
Мастер Ломастер
часть переменных надо разместить в "неочищаемой" области памяти, и всех делов-то!

Re: Ребята, помоги со спящим режимом в atmega64

Добавлено: Чт апр 05, 2012 03:38:18
SergeyF
в "неочищаемой" области памяти

Это EEPROM? Думал там сохранять, но если это делать каждые 2 сек, то за сутки целых 48.000 обращений будет, а там у нее какой то свой ресурс ограниченный...

Re: Ребята, помоги со спящим режимом в atmega64

Добавлено: Чт апр 05, 2012 07:12:09
Мастер Ломастер
в неочищаемой - это в той части ОЗУ, которую стартап программы Си не очищает при сбросе. разберитесь со своим компилятором.

Re: Ребята, помоги со спящим режимом в atmega64

Добавлено: Пн апр 09, 2012 04:22:17
SergeyF
не могу понять как сохранять переменные при сбросе WD
в даташите по векторам сброса говорится, что:
RESET External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset, and JTAG AVR Reset сбрасывают МК на 0x0000, т.е. в самое начало. Как работать с переменными, которые бы не сбрасывались при wd
в спящий режим перехожу так:
MCUCR |= ((1<<SE)|(1<<SM1)); //POWER_DOWN
#asm("sei");
#asm("sleep");
по внешнему прерыванию вроде понятно как выйти, но как по таймеру WD или другому не получается
Может у кого есть кусок кода выхода из сна по таймеру на CodeVisionAvr, хоть для другого atmega...