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.