ADC des ATMEGA168

Gast #337189
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)
{

....

}
Gast #798670
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 ....

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