Forum: Mikrocontroller und Digitale Elektronik ADC des ATMEGA168


von Daniel (Gast)


Lesenswert?

Habe folgendes Problem:

Möchte denn ADC in FREE Running mode verwenden und wenn ein Wert fertig
gewandelt ist soll er in die Interrupt Routine springen. Problem: Er
macht das genau einmal und ich finde den Fehler nicht im Programm:


int main (void)
{
ADMUX |= (1<<REFS0);
ADCSRA|= (1<<ADIE) |(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
ADCSRA |=(1<<ADEN);
ADCSRA|=(ADSC);

for(;;);



}
SIGNAL (SIG_ADC)
{

....

}

von A.K. (Gast)


Lesenswert?

Ohne auto trigger kein free running mode.

von Richard B. (rbrose)


Lesenswert?

Wie ist das gemeicht ohne auto trigger kein free running mode? Ich kann 
ich auto trigger aktivieren?

von Andreas K. (a-k)


Lesenswert?

Such mal im Datasheet nach ADATE.

von Richard B. (rbrose)


Lesenswert?

Danke dir ... jetzt funktioniert free running mode.
Wie aktiviere ich den eingentlich den 8bit ADC? und nicht 10bit? Will 
das meine Werte von 0 bis 255 gehen.

Danke

von Andreas K. (a-k)


Lesenswert?

ADLAR setzen und nur ADCH verwenden.

von Richard B. (rbrose)


Lesenswert?

Aber dann ist ADCH immer nur 255 :-( egal wieviel V dran liegt.

von Richard B. (Gast)


Lesenswert?

irgendwas stimmt mit dem Free Running Mode. Es wird immer nur die erste 
Messung ausgegeben:
1
  //init ADC
2
  ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADPS2) | (1<<ADPS1);    // Frequenzvorteiler  // setzen auf 8 (1) und ADC aktivieren (1)       
3
  ADCSRB = (0<<ADTS2) | (0<<ADTS1) | (1<<ADTS0);   // Free running mode. 
4
    ADMUX |= (1<<REFS0) | (0<<ADLAR); // AVCC als Referenz
5
6
7
8
  while(1) 
9
   {      
10
    long_delay(1000);
11
12
    uint16_t tmp = ADCW;
13
    char buffer[20];
14
    itoa(tmp, buffer,10);
15
    uart_puts(buffer);
16
17
       }

Wieso wird ADCW nicht aktualisiert? ADATE ist aktiviert ....

von Jörg X. (Gast)


Lesenswert?

>> ADCSRB = (0<<ADTS2) | (0<<ADTS1) | (1<<ADTS0);   // Free running mode.
Das stimmt nicht...

rtfm. Jörg
ps.: Lass uns bei dem Neueren Thread in GCC-Forum beleiben

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.