Сон с прерыванием по таймеру ATmega128L

Bobre
Offline
Зарегистрирован: 01.12.2014

Добрый день. Помогите найти ошибку.

Необходимо отправлять МК в сон, потом просыпаться каждые 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();
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Bobre пишет:

Вся сложность в том, что я использую "фреймворк" MegaCore

Ну, если вся сложность в этом, так не используйте.

Bobre
Offline
Зарегистрирован: 01.12.2014

Так больше никак не сделать прошивку Atmega128 из Arduino IDE. Другие пути еще сложнее

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Значит, сложность таки в чём-то другом?

так Вы уж тогда определитесь в чём сложность и бейте в эту точку.

Bobre
Offline
Зарегистрирован: 01.12.2014

Сложность в отсутсвии поддержки Atmega128 в библиотеках LowPower.h и прочих, которые заточенны на снижения энергопотребления, поэтому я пытаюсь сделать руками то, что должны делать библиотеки. Саму проблему я описал в топике, какой момент у меня именно не получается, а именно правильно прописать вызов прерывания во время сна и пробуждение МК. Попробовать использовать другие способы прошивки и другие библиотеки я уже пытался. Результат один.

Можно, конечно, говорить о том, что проще сменить микроконтроллер или вообще перестать заниматься этим делом, но я всетаки пытаюсь найти правильное решение, как пробуждать микроконтроллер Atmega128 через Arduino IDE.

Единственный способ загрузить что-то в Atmega128 через Arduino IDE - это использовать библиотеки MegaCore

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Ну, после sleep_cpu();положено ставить sleep_disable();

 

А потом, как вы определяете, что атмега больше не просыпается?

 

Bobre
Offline
Зарегистрирован: 01.12.2014

Спасибо, поставил, но ничего не изменилось.

То что Атмега не проснулась, я проверяю бы по вызову timer_handle_interrupts(int timer), если бы прерывание сработало, тогда изменилось бы состояние лампочки. По какой-то причине во время сна прерывания не работают, ходя я думал, что должны.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Bobre пишет:

Единственный способ загрузить что-то в Atmega128 через Arduino IDE - это использовать библиотеки MegaCore

Точно? Ну, тогда тогда ладно, пойду тяпну чёнить.

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Bobre пишет:

Единственный способ загрузить что-то в Atmega128 через Arduino IDE - это использовать библиотеки MegaCore

Точно? Ну, тогда тогда ладно, пойду тяпну чёнить.

Поздновато что-то тяпку в руку брать...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А ничо, хорошо пошла :)

strarbit
Offline
Зарегистрирован: 12.06.2016

Gentlemen have a lovely evening!

strarbit
Offline
Зарегистрирован: 12.06.2016

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.

Bobre
Offline
Зарегистрирован: 01.12.2014

Thank you. 

Best choice for me is "clock_prescale_set"  with clock_div_128 after fixing a bug in <avr/power.h> for atmega128

strarbit
Offline
Зарегистрирован: 12.06.2016

Bobre пишет:

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

во как

strarbit
Offline
Зарегистрирован: 12.06.2016

Gentleman ua6em, have a good evening!. i'm sorry, i didn't catch that.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

strarbit пишет:

Gentleman ua6em, have a good evening!. i'm sorry, i didn't catch that.

it's an untranslatable play on words )))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Английский мой на столько плох, что общаться без переводчика я могу только на приземлённом уровне. Однако общение понял. И добавил бы - У нас столько непереводимых слов и чаще выражений, что тут «мама ой» (очередное непереводимое выражение). )

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

Английский мой на столько плох, что общаться без переводчика я могу только на приземлённом уровне. Однако общение понял. И добавил бы - У нас столько непереводимых слов и чаще выражений, что тут «мама ой» (очередное непереводимое выражение). )

мой тоже, но это лично мне нисколько не мешает общаться свободно )))