/* * Langzeittimer mit Watchdog-Interrupt * * Monoflop, wie Treppenlichautomat mit Langzeittimer, nachtriggerbar * Autor: HildeK */ // Hinweis: WDTON unprogrammiert! #define F_CPU 1e6 #include #include #include #include #include #define WD_PRESCALE 8 // Prescaler-Einstellung (Einheit) von 0 (16ms) bis 9 (8s) [6: ca 1s] #define TIME_MULTIPLY 2 // Faktor für Zeiteinheit // Setup Funktion #define RETRIGGERABLE volatile uint32_t l_wcount = 0; // einfach ungleich Null setzen, dann sleep nach Reset ISR(WDT_vect) { l_wcount--; } ISR (INT0_vect) // Interrupt zum Neustart und Setzen der Zeit { l_wcount = TIME_MULTIPLY; // Zeit festlegen GIMSK=0; } int main() { uint8_t wd_timer_prescale; uint8_t wdt_flags; // Ports definieren /* PB1 (Pin 6) Output, MISO, Schaltsignal PB2 (Pin 7) Input, Starttaste, SCK, INT0 PB5 (Pin 1) Reset INT0 und Taste sind LOW-aktiv */ // Ports definieren PORTB = 0x00; DDRB = (1< 9 ) wd_timer_prescale=9; wdt_flags=wd_timer_prescale & 7; if (wd_timer_prescale > 7) wdt_flags|= (1<<5); // wdt_flags enthält den Prescalerwert (0 .. 9) wdt_flags |= (1<