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) уходил в глубокий сон и пробуждался через допустим минуту, делал все свои дела (поморгал светодиодом к примеру) и снова уходил в спячку. В сети скачал такой пример и больше как-то на этот счет инфы кот наплакал. Пример этот не работает. Светодиод не моргает вообще, подскажите где у меня ошибка, что делаю не так?
вся информация есть в даташите
Разумеется, но мне к сожалению ума не хватает разобраться в этом, вот и прошу помощи.
вывсёврёти!!!
Спасибо. Вроде бы то что нужно.