Skip to content

Instantly share code, notes, and snippets.

@melatonind
Created May 17, 2014 13:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save melatonind/642bb83e7bd984a21ced to your computer and use it in GitHub Desktop.
Save melatonind/642bb83e7bd984a21ced to your computer and use it in GitHub Desktop.
Murr
// From http://www.instructables.com/id/Vibrating-Timekeeper
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
int countr;
ISR(WDT_vect) {
countr++;
}
void setup(){
pinMode(0, OUTPUT);
setup_watchdog(6);
}
void loop()
{
ADCSRA &= ~(1<<ADEN);
sleep_mode();
if (countr>300){
countr=0;
digitalWrite(0,HIGH);
delay(1000);
digitalWrite(0,LOW);
}
}
void setup_watchdog(int timerPrescaler) {
if (timerPrescaler > 9 ) timerPrescaler = 9; //Limit incoming amount to legal settings
byte bb = timerPrescaler & 7;
if (timerPrescaler > 7) bb |= (1<<5); //Set the special 5th bit if necessary
//This order of commands is important and cannot be combined
MCUSR &= ~(1<<WDRF); //Clear the watch dog reset
WDTCR |= (1<<WDCE) | (1<<WDE); //Set WD_change enable, set WD enable
WDTCR = bb; //Set new watchdog timeout value
WDTCR |= _BV(WDIE); //Set the interrupt enable, this will keep unit from resetting after each int
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment