Предыдущая статья. | Следующая статья |
This page can be quickly reached from the link: http://gammon.com.au/power |
void setup () {}
void loop () {}
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
avrdude -c usbtiny -p m328p -U efuse:w:0x07:m
#include <avr/sleep.h>
void setup ()
{
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
// turn off brown-out enable in software
MCUCR = bit (BODS) | bit (BODSE); // turn on brown-out enable select
MCUCR = bit (BODS); // this must be done within 4 clock cycles of above
sleep_cpu (); // sleep within 3 clock cycles of above
} // end of setup
void loop () { }
// disable ADC
ADCSRA = 0;
#include <avr/sleep.h>
void setup ()
{
for (byte i = 0; i <= A5; i++)
{
pinMode (i, OUTPUT); // changed as per below
digitalWrite (i, LOW); // ditto
}
// disable ADC
ADCSRA = 0;
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
// turn off brown-out enable in software
MCUCR = bit (BODS) | bit (BODSE);
MCUCR = bit (BODS);
sleep_cpu ();
} // end of setup
void loop () { }
avrdude -c usbtiny -p m328p -U lfuse:w:0xE2:m
#include <avr/wdt.h>
void setup() {
wdt_disable(); // бесполезная строка до которой не доходит выполнение при bootloop
Serial.begin(9600);
Serial.println("Setup..");
Serial.println("Wait 5 sec..");
delay(5000); // Задержка, чтобы было время перепрошить устройство в случае bootloop
wdt_enable (WDTO_8S); // Для тестов не рекомендуется устанавливать значение менее 8 сек.
Serial.println("Watchdog enabled.");
}
int timer = 0;
void loop(){
// Каждую секунду мигаем светодиодом и значение счетчика пишем в Serial
if(!(millis()%1000)){
timer++;
Serial.println(timer);
digitalWrite(13, digitalRead(13)==1?0:1); delay(1);
}
// wdt_reset();
}
/*
Если после перезагрузки светодиод на 13-м пине начинает бесконечно мигать, то значит
загрузчик не поддерживает watchdog. Здесь даже кнопка сброса не поможет. Для последующей
прошивки нужно плату отключать от питания и после включения успеть прошить до первой перезагрузки.
*/
#include <avr/sleep.h>
#include <avr/wdt.h>
const byte LED = 9;
void flash ()
{
pinMode (LED, OUTPUT);
for (byte i = 0; i < 10; i++)
{
digitalWrite (LED, HIGH);
delay (50);
digitalWrite (LED, LOW);
delay (50);
}
pinMode (LED, INPUT);
} // end of flash
// watchdog interrupt
ISR (WDT_vect)
{
wdt_disable(); // disable watchdog
} // end of WDT_vect
void setup () { }
void loop ()
{
flash ();
// disable ADC
ADCSRA = 0;
// clear various "reset" flags
MCUSR = 0;
// allow changes, disable reset
WDTCSR = bit (WDCE) | bit (WDE); // or use _WD_CONTROL_REG = bit (WDCE)
// set interrupt mode and an interval
WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0); // or use _WD_CONTROL_REG = bit (WDCE) - set WDIE, and 8 seconds delay
wdt_reset(); // pat the dog
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
// turn off brown-out enable in software
MCUCR = bit (BODS) | bit (BODSE);
MCUCR = bit (BODS);
sleep_cpu ();
// cancel sleep as a precaution
sleep_disable();
} // end of loop
#include <avr/sleep.h>
#include <avr/wdt.h>
const byte LED = 9;
// watchdog interrupt
ISR (WDT_vect)
{
wdt_disable(); // disable watchdog
} // end of WDT_vect
void setup () { }
void loop ()
{
pinMode (LED, OUTPUT);
digitalWrite (LED, HIGH);
delay (50);
digitalWrite (LED, LOW);
pinMode (LED, INPUT);
// disable ADC
ADCSRA = 0;
// clear various "reset" flags
MCUSR = 0;
// allow changes, disable reset
WDTCSR = bit (WDCE) | bit (WDE); // or use _WD_CONTROL_REG = bit (WDCE)...
// set interrupt mode and an interval
WDTCSR = bit (WDIE) | bit (WDP2) | bit (WDP1); // set WDIE, and 1 second delay or use _WD_CONTROL_REG = bit (WDCE)
wdt_reset(); // pat the dog
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
// turn off brown-out enable in software
MCUCR = bit (BODS) | bit (BODSE);
MCUCR = bit (BODS);
sleep_cpu ();
// cancel sleep as a precaution
sleep_disable();
} // end of loop