Зарегистрирован: Вс май 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раз - не заметить невозможно.
Интересно - могут ЧипДип торговать какими нибудь "усовершенствованными" микросхемами? Не хотелось бы полагаться на такую фичу.
Сейчас этот форум просматривают: veso74 и гости: 26
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения