Сон с прерыванием по таймеру ATmega128L
- Войдите на сайт для отправки комментариев
Добрый день. Помогите найти ошибку.
Необходимо отправлять МК в сон, потом просыпаться каждые N секунд (скорее всего, каждые 0.2 секунды ) и делать что-то.
Вся сложность в том, что я использую "фреймворк" MegaCore (https://github.com/MCUdude/MegaCore/) для Atmegа128L в ArduinoIDE, поэтому основные примеры и библиотеки для Atmega328 со сном не работают.
Отдельно получается уводить чип в сон. Получается мигать светодиодом по таймеру с помощью библиотеки timer-api.h (https://github.com/sadr0b0t/arduino-timer-api). Но вот пробуждение по таймеру не происходит.
Какие библиотеки использовать не важно, лишь бы работало на Atmega128 и Atmega64 в Arduino IDE (Разница у них не велика)
Подскажите в чем ошибка. Спасибо.
#define pin_t 41 #include "timer-api.h" void setup() { timer_init_ISR_2Hz(TIMER_DEFAULT); pinMode(pin_t, OUTPUT); // Комбинация показывающая старт скетча digitalWrite(pin_t, 1); delay(50); digitalWrite(pin_t, 0); delay(200); digitalWrite(pin_t, 1); delay(50); digitalWrite(pin_t, 0); delay(200); digitalWrite(pin_t, 1); delay(500); digitalWrite(pin_t, 0); delay(50); } void loop() { delay(5000); // Пока атмега не ушла в сон, все мигате и работает, с этого момента начинается сон без пробуждения sei(); set_sleep_mode(SLEEP_MODE_STANDBY); sleep_mode(); sleep_cpu(); //sleep(); delay(50); } void timer_handle_interrupts(int timer) { // мигаем лампочкой digitalWrite(pin_t, !digitalRead(pin_t)); noSleep(); }
Вся сложность в том, что я использую "фреймворк" MegaCore
Ну, если вся сложность в этом, так не используйте.
Так больше никак не сделать прошивку Atmega128 из Arduino IDE. Другие пути еще сложнее
Значит, сложность таки в чём-то другом?
так Вы уж тогда определитесь в чём сложность и бейте в эту точку.
Сложность в отсутсвии поддержки Atmega128 в библиотеках LowPower.h и прочих, которые заточенны на снижения энергопотребления, поэтому я пытаюсь сделать руками то, что должны делать библиотеки. Саму проблему я описал в топике, какой момент у меня именно не получается, а именно правильно прописать вызов прерывания во время сна и пробуждение МК. Попробовать использовать другие способы прошивки и другие библиотеки я уже пытался. Результат один.
Можно, конечно, говорить о том, что проще сменить микроконтроллер или вообще перестать заниматься этим делом, но я всетаки пытаюсь найти правильное решение, как пробуждать микроконтроллер Atmega128 через Arduino IDE.
Единственный способ загрузить что-то в Atmega128 через Arduino IDE - это использовать библиотеки MegaCore
Ну, после sleep_cpu();положено ставить sleep_disable();
А потом, как вы определяете, что атмега больше не просыпается?
Спасибо, поставил, но ничего не изменилось.
То что Атмега не проснулась, я проверяю бы по вызову
timer_handle_interrupts(
int
timer), если бы прерывание сработало, тогда изменилось бы состояние лампочки. По какой-то причине во время сна прерывания не работают, ходя я думал, что должны.
Единственный способ загрузить что-то в Atmega128 через Arduino IDE - это использовать библиотеки MegaCore
Точно? Ну, тогда тогда ладно, пойду тяпну чёнить.
Единственный способ загрузить что-то в Atmega128 через Arduino IDE - это использовать библиотеки MegaCore
Точно? Ну, тогда тогда ладно, пойду тяпну чёнить.
Поздновато что-то тяпку в руку брать...
А ничо, хорошо пошла :)
Gentlemen have a lovely evening!
Now i'm actually happy and drunk. i m not as drunk as you think, man. defenseless and drunk. please see the next sections ,Asynchronous Operation of Timer/Counter 0, and ,Power Management and Sleep Modes, of the datasheet https://www.microchip.com/wwwproducts/en/ATMEGA128 https://github.com/MCUdude/MegaCore/blob/master/Wiring_reference.md#enab...
atmega 128 doesn't support watchdog interrupt for wake up, so the trick with interrupt can't be used.
ОСТP|/| ВН|/|МAH|/|E TA|/|MEP 0 СОН XOPO|_|_|O, TA|/|MEP 1 B СОН НЕТ.
arduino-timer-api == Timer 1 or Timer 3. arduino-timer-api != Timer 0.
Thank you.
Best choice for me is "clock_prescale_set" with clock_div_128 after fixing a bug in <avr/power.h> for atmega128
Thank you.
Best choice for me is "clock_prescale_set" with clock_div_128 after fixing a bug in <avr/power.h> for atmega128
Gentleman Bobre. I'm sorry, i didn't catch that.
http://nongnu.org/avr-libc/user-manual/group__avr__power.html
во как
Gentleman ua6em, have a good evening!. i'm sorry, i didn't catch that.
Gentleman ua6em, have a good evening!. i'm sorry, i didn't catch that.
it's an untranslatable play on words )))
Английский мой на столько плох, что общаться без переводчика я могу только на приземлённом уровне. Однако общение понял. И добавил бы - У нас столько непереводимых слов и чаще выражений, что тут «мама ой» (очередное непереводимое выражение). )
Английский мой на столько плох, что общаться без переводчика я могу только на приземлённом уровне. Однако общение понял. И добавил бы - У нас столько непереводимых слов и чаще выражений, что тут «мама ой» (очередное непереводимое выражение). )
мой тоже, но это лично мне нисколько не мешает общаться свободно )))