Зарегистрирован: Вс май 10, 2009 18:23:45 Сообщений: 110
Рейтинг сообщения:0
Подскажите как реализовать спящий режим в mega8 чтоб МК просыпался, делал дело и снова засыпал, при том что сон нужен самый глубокий, а в нем только работает собака и внешнее прерывание. Внешнее прерывание сразу отпадает, а собаку походу можно только настроить до 2-х секунд. Хотелось бы чтоб МК просыпался раз в 10-60сек.
А асинхронный таймер не устраивает? Его можно настроить на 8 сек. Он работает в режиме powersave. Не знаю, что потребляет больше, асинхронный таймер или собака. В любом случае, проснуться пару раз для счета времени вряд ли сильно повысит потребление.
Зарегистрирован: Вс май 10, 2009 18:23:45 Сообщений: 110
Рейтинг сообщения:0
COKPOWEHEU писал(а):
А асинхронный таймер не устраивает? Его можно настроить на 8 сек. Он работает в режиме powersave. Не знаю, что потребляет больше, асинхронный таймер или собака. В любом случае, проснуться пару раз для счета времени вряд ли сильно повысит потребление.
Смотрел вроде сами режимы сна значительно отличаются по потреблению, но надо попробовать в железе проверить.
настроить WD на прерывание, а не сброс, в прерывании завести переменную-счетчик и уже по его переполнению выполнять какую-то полезную работу - так можно хоть на пару суток выдержку задавать (если точность не требуется).
Хотя можно и без прерывания, если работать на ассемблере или хорошо знать способы обхода автоматического обнуления переменных в Си при сбросе.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Зарегистрирован: Вс май 10, 2009 18:23:45 Сообщений: 110
Рейтинг сообщения:0
ARV писал(а):
настроить WD на прерывание, а не сброс, в прерывании завести переменную-счетчик и уже по его переполнению выполнять какую-то полезную работу - так можно хоть на пару суток выдержку задавать (если точность не требуется).
Хотя можно и без прерывания, если работать на ассемблере или хорошо знать способы обхода автоматического обнуления переменных в Си при сбросе.
Я только додумался считать время при сбросе через EEPROM но это как то нехорошо, ненадолго хватит памяти,хотя ячеек много. Я вот про прерывание можно подумать. С асинхронным таймером потребление падает до 0.2мА а с собакой до 0.01мА по мультиметру.
ну вот и смотрите, что лучше. только имейте ввиду, что прерывание и сброс для вашей программы - принципиально разные режимы! при сбросе вы НЕИЗБЕЖНО, хоть и на короткое время, потеряете уровни на выводах (они будут аппаратно переключены в режим входов без подтяжек), а при прерывании - уровни будут сохранены.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Подскажите в спящем режиме Power-Save переменные сбрасываются?
Нет. Это же не сброс. При аппаратном сбросе сбрасывается: регистры общего назначения, регистры ввода-вывода. SRAM не сбрасывается. Очистка ОЗУ задача программиста и компиляторов.
после почти написания кода на асме пытаюсь выловить глюк как то связанный со Sleep. в основном МК в режиме PowerSave. При этом он просыпается по асинхронному таймеру, собирает данные и инициирует прерывание EEPROM, чтобы если что изменилось записать.
Если я читаю EPPROM с помощью Казамы - я там вижу эти данные в том виде как должно быть. Если я перевожу МК в режим Idle для чтения данных по компорту - данные в ЕЕПРОМ съезжают, или вообще портятся. За пределы отведенного места в ЕЕПРОМ не выходят впрочем.
То что МЕГА 48PA может работать с ЕЕПРОМ в PowerSave я выяснил опытным путем, хотя табличка даташит говорит обратное. Но табличка даташит противоречит и абзацу описания режима в части прерываний PinChange - они тоже как бы не должны работать.
Как бы понять - где правда? Может есть какие-то хитрости если меняешь режим сна по ходу?
Но табличка даташит противоречит и абзацу описания режима в части прерываний PinChange - они тоже как бы не должны работать.
Прерывание Pin Change у ATmega48 работает во всех режимах сна.
Вложение:
Вложение ATmega48_SLEEP.PNG больше недоступно.
Да - по факту в Powersave - Pinchange работает. Хотя по приведенной вами таблице в которую и я смотрю - не должны (см ссылку 3 под таблицей). А в пояснения к режиму PS опять должно. Согласен - видимо в таблице ошибка. Но - запись по прерыванию EEprom ready тоже работает по факту. Хотя по таблице - не должно. Разница в потреблении c idle - 300раз - не заметить невозможно.
Интересно - могут ЧипДип торговать какими нибудь "усовершенствованными" микросхемами? Не хотелось бы полагаться на такую фичу.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения