Forum: Mikrocontroller und Digitale Elektronik ATtiny861 ADC


von Ephraim H. (ephi)


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)

von spess53 (Gast)


Lesenswert?

Hi

Schon mal im Datenblatt nachgesehen. ADCSRB:  ADTS2 ADTS1 ADTS0. 
Freerunning Mode muss explizit eingestellt werden.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

ADTS2 ADTS1 ADTS0 sind ja 000. Aber ADATE in ADCSRA muss noch gesetzt 
werden.

MfG Spess

von Ephraim H. (ephi)


Lesenswert?

huch, das hab ich wohl total übersehen.
Jetzt gehts.
Dank dir vielmals!

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
Noch kein Account? Hier anmelden.