ATMega8: AD-Wandlung wird nicht fertig

Gast #4325712
Lesenswert?

Hallo,
wo ist in meinem Code ein Fehler? Denn ich habe das Problem, dass die 
AD-Wandlung nicht abschließt, er also im Code in der While-Schleife 
hängen bleibt.
Die Hardware sollte stimmen -> AGND, AREF, AVCC sind correct 
angeschlossen.
1
int main(void)
2
{
3
  uint16_t temp;
4
  char text[40];
5
  
6
  uart_Init();
7
  
8
    ADMUX = 0x00;  //ex reference, no channel selected
9
    ADCSRA = 0xA7;  //0b1010 0111, division factor: 128, free running
10
    ADMUX |= ((1<<MUX0)|(1<<MUX1));
11
    ADMUX &= ~(1<<ADLAR);
12
    
13
    uart_puts("STARTED\n");
14
    while(1)
15
    {
16
         
17
         ADCSRA |= (1<<ADSC);
18
         while(ADCSRA & (1<<ADSC))
19
           ;
20

21
         temp = ADCW;
22
    sprintf(text,"ADC: %d\n",temp);
23
    uart_puts(text);
24
    _delay_ms(100);
25
    }
26
}

Vielen Dank!
#4325718
Lesenswert?

Hallo,

Bei der Anweisung
1
ADCSRA = 0xA7;
 sollte man immer die Bitnamen verwenden, dass beugt Fehler vor.

Wenn
1
(ADCSRA.ADFR == 1)
 ist, dann muss man auch nur einmalig den ADC-Vorgang "anstoßen".
Dies geht mit
1
ADCSRA.ADSC = 1;
 oder ähnlich in deiner Implementierung.

Wie schnell läuft deine CPU ?
Der ADC-Takt hat auch bestimmte Grenzen, diese stehen im Datenblatt.
1
ADMUX.ADLAR = 0;
 könnte man sich sparen, da dies der Initwert des Registers ADMUX, bzw. 
des Bits ADLAR ist.

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