ich möchte im noise reduction mode wandeln, er wacht aber nicht mehr auf, kommt nie in den ADC Interrupt, was fehlt denn da? Den einzigen Interrupt den ich sonst verwende ist der Timer, den möchte ich währenddessen deaktivieren // Leer IRQ fuer ADC ISR (ADC_vect) { PORTB &= ~_BV(PLED); } // ADC starten, warten und Wert holen uint16_t GetADC(uint8_t channel) { ADCSRA = (1<ADIE) | (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); ADMUX = channel | (1<<REFS1) | (0<<REFS0); // (1,1V) TIMSK &= ~_BV(TOIE0); sei(); set_sleep_mode(SLEEP_MODE_ADC); sleep_mode(); cli(); TIMSK = _BV(TOIE0); // Timer/Counter0 Overflow Interrupt Enable return ADCW; }
keiner einen Tipp? wenn ich's ohne Interrupt mache gehts: ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); ADMUX = (1<<REFS1) | (0<<REFS0); // interne Referenzspannung (1,1V) ADCSRA |= (1<<ADSC); while( ADCSRA & (1<<ADSC) ) // auf Abschluss der Konvertierung warten ; ohne Schlafen, aber mit Interrupt, da kommt er auch nie in den Interrupt: ADCSRA = (1<ADIE) | (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); ADMUX = (1<<REFS1) | (0<<REFS0); // interne Referenzspannung (1,1V) sei(); ADCSRA |= (1<<ADSC); ... ISR (ADC_vect) { PORTB &= ~_BV(PLED); // zu Kontrolle adw = ADCW; }
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.