ATtiny861 ADC

OP #1295417
Lesenswert?

Hallo,

Ich habe eine Merkwürdigkeit mit dem ADC des ATtiny861:
Ich initialisiere den ADC im free running mode und aktiviere den 
interrupt und möchte den ADC wert im interrupt auslesen.
Das Problem dabei ist, das er nur ein einziges mal eine Wandlung 
durchführt. Diese ist zwar korrekt, aber er wandelt nicht kontinuierlich 
weiter.

hier mal meine Initialisierungsfunktion:
1
void adc_init(void)
2
{
3
  ADMUX = FADER_PIN;          // select channel
4
                    // VCC as reference voltage
5
  ADCSRA  = (1<<ADIE);        // enable interrupt
6
  ADCSRA |= (1<<ADPS2) | (1<<ADPS1);  // frequency devider of 64 (8Mhz/64 = 125Khz)
7
  ADCSRA |= (1<<ADEN);        // enable adc
8
  ADCSRA |= (1<<ADSC);        // start converting
9
}

und meine ISR:
1
ISR(ADC_vect)
2
{
3
  out.bit.adc = ADCW;
4
}

mein derzeitiges workaround ist es den wandlungsvorgang in der ISR mit
1
ADCSRA |= (1<<ADSC);
nocheinmal zu starten. Das geht auch soweit, ist aber irgendwie ja nicht 
der Sinn der Sache.

Mir sieht das ganz danach aus, als läuft der ADC im single conversion 
mode.
Im Datenblatt steht aber eindeutig:
ADCSRB
ADTS2 = 0; ADTS1 = 0; ADTS0 = 0; =>Free Running mode
Also setze ich keines der Bits.

Hat jemand eine Idee?
(ich hab jetzt nicht den ganzen code angehängt, da das auslesen an sich 
ja geht, und ich sonst nirgents was an den ADC registern rumfummle)

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