Sleep mode + watchdog. Помогите с кодом.

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

rkit
Offline
Зарегистрирован: 23.11.2016

вся информация  есть в даташите

dizzel
Offline
Зарегистрирован: 21.03.2016

Разумеется, но мне к сожалению ума не хватает разобраться в этом, вот и прошу помощи.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

dizzel пишет:
Мне нужно чтобы чип (например, 328) уходил в глубокий сон. ... на этот счет инфы кот наплакал

вывсёврёти!!!

dizzel
Offline
Зарегистрирован: 21.03.2016

Спасибо. Вроде бы то что нужно.