ADC Noise reduction bei Tiny25

Gast #2300410
Lesenswert?

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;
}
Gast #2300734
Lesenswert?

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;
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren