Hallo Leute habe folgendes Problem habe mir einen ADC gebastelt dies Funktioniert auch wunderbar nur jetzt komme ich zum Problem mit dem Watchdog entweder mein Programm dreht sich komplett ab und ist nicht mehr weckbar oder es leuchtet permanent die grüne Led habe hier den Programmcode sowei vorbereitet nur wie setze ich jetzt am besten die SleepFunktionen und die Aufwachfunktion im besten fall sollte der µC 8 Sekunden schlafen dann wieder messen usw. #define F_CPU 8000000UL #include <avr/io.h> #include <avr/wdt.h> //vordefinerte Watchdogfunktionen #include <avr/sleep.h> #include <util/delay.h> #include <avr/interrupt.h> void GlobalSleepMode(void) { cli(); wdt_reset(); WDTCR |= (1<<WDCE)|(1<<WDE); //WD Interrupt Enable, WD Change Enable WDTCR = (1<<WDIE)|(1<<WDP3)|(1<<WDP0); //1024k, ca. 8s sei(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_mode(); } void GlobalWakeUp(void) { cli(); WDTCR |= (1<<WDCE)|(1<<WDE); //WD Change Enable WDTCR = 0x00; //Turn WD off sei(); } int main(void) { char adc_wert; DDRB=DDRB&~(1<<PB3); // ADC3 DDRB=DDRB|(1<<PB0)|(1<<PB1)|(1<<PB2); // Initialisierung der LED's //ADC_Init(); DIDR0 |= (1<<ADC3D); //dig. INPUT disabled ADCSRA |= (1<<ADEN) |(1<<ADSC)| (1<<ADPS1) | (1<<ADPS2); //Initialiserung ADC, Frequenzteiler: 64 ADMUX |= (1<<ADLAR)|(1<<MUX0)|(1<<MUX1); //5V int. Ref., linkbündig, ADC3 single mode while( 1 ) { while(ADCSRA & (1<<ADSC)); //warten auf Wandlungsende adc_wert = ADCH; if( adc_wert < 166 ) // LOW-Bereich ca 6,5V { PORTB=PORTB|(1<<PB0); // LOW-LED ein PORTB=PORTB&~(1<<PB1); // MIDDLE-LED aus PORTB=PORTB&~(1<<PB2); // High-LED aus } else if( adc_wert > 220 ) // High-Bereich ca 9,5V { PORTB=PORTB&~(1<<PB0); // LOW-LED aus PORTB=PORTB&~(1<<PB1); // MIDDLE-LED aus PORTB=PORTB|(1<<PB2); // High-LED ein } else if( adc_wert < 185 ) // Middle-Bereich ca 7,5V { PORTB=PORTB&~(1<<PB0); // LOW-LED aus PORTB=PORTB|(1<<PB1); // MIDDLE-LED ein PORTB=PORTB&~(1<<PB2); // High-LED aus } ADCSRA = ADCSRA | (1<<ADSC); //Wandler neu starten } } ISR(WDT_vect) { } Hoffe ihr könnt mir helfen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.