Sleep mode + watchdog. Помогите с кодом.
- Войдите на сайт для отправки комментариев
Пт, 25/06/2021 - 20:39
#include <avr/sleep.h> //AVR MCU power management #include <avr/power.h> //disable/anable AVR MCU peripheries (Analog Comparator, ADC, USI, Timers/Counters) #include <avr/wdt.h> //AVR MCU watchdog timer #include <avr/io.h> //includes the apropriate AVR MCU IO definitions #include <avr/interrupt.h> //manipulation of the interrupt flags #if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) #define LED 0 #else #define LED LED_BUILTIN #endif volatile byte watchdogCounter = 0; void all_pins_output() { for (byte pin = 0; pin < 5; pin++) //ATtiny85 has 5 pins { pinMode(pin, OUTPUT); } } void all_pins_input() { for (byte pin = 0; pin < 5; pin++) //ATtiny85 has 5 pins { pinMode(pin, INPUT); //pinMode(pin, INPUT_PULLUP); } } void setup() { pinMode(LED, OUTPUT); setup_watchdog(WDTO_1S); //approximately 1 sec. of sleep } void loop() { while (watchdogCounter < 4) { //all_pins_output(); arduino_sleep(); } //wdt_disable(); watchdogCounter = 0; power_all_enable(); delay(5); digitalWrite(LED, HIGH); delay(3000); digitalWrite(LED, LOW); //wdt_enable(WDTO_8S); } void arduino_sleep() { cli(); power_all_disable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); #if defined(BODS) && defined(BODSE) sleep_bod_disable(); #endif sei(); sleep_mode(); } void setup_watchdog(byte sleep_time) { cli(); wdt_enable(sleep_time); MCUSR &= ~_BV(WDRF); #if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) WDTCR |= _BV(WDCE) & ~_BV(WDE); WDTCR |= _BV(WDIE); #else WDTCSR |= _BV(WDCE) & ~_BV(WDE); WDTCSR |= _BV(WDIE); #endif sei(); } ISR(WDT_vect) { watchdogCounter++; }
Подскажите, пожалуйста, я впервые имею дело с вочдогом и сном. Мне нужно чтобы чип (например, 328) уходил в глубокий сон и пробуждался через допустим минуту, делал все свои дела (поморгал светодиодом к примеру) и снова уходил в спячку. В сети скачал такой пример и больше как-то на этот счет инфы кот наплакал. Пример этот не работает. Светодиод не моргает вообще, подскажите где у меня ошибка, что делаю не так?
вся информация есть в даташите
Разумеется, но мне к сожалению ума не хватает разобраться в этом, вот и прошу помощи.
вывсёврёти!!!
Спасибо. Вроде бы то что нужно.