Forum: Mikrocontroller und Digitale Elektronik [ATMega32] ADC Überlauf?


von Uwe H. (mistert)


Lesenswert?

Hallo Forum,

ich hab hier ein kleines Problem. Ich will mit dem ADC einen Poti 
auswählen. Momentan hab ich ein 50:50 Spannungsteiler mit 5V 
angeschlossen. Ich lese also max 5V aus, so dass ich die interne 
Referenzspannung verwenden kann.

Den gelesenen Wert lasse ich mir per utoa auf dem LCD anzeigen. Nur 
Leider geht der Wert bis 16368 und erzeugt damit insgesamt 3 mal einen 
Überlauf. Nur wieso? Bei einem 10Bit ADC müsste der maximalwert doch 
1023 sein?!

Hier mein Code:
ADC
1
uint16_t readADC(uint8_t channel){
2
3
  uint8_t i;
4
  uint16_t result;
5
6
  ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //ADC aktiviert, prescaler 128
7
  ADMUX = channel; //Kanal auswählen
8
  ADMUX |= (1<<REFS1)|(1<<REFS0)|(1<<ADLAR); //interne Referenzspannung 2,65V
9
10
11
  ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
12
  while ( !(ADCSRA & (1<<ADIF)) ); //warte auf Konvertierung
13
  result = ADC;  // ADCW muss gelesen werden
14
 
15
  result = 0; 
16
  for( i=0; i<4; i++ )
17
  {
18
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
19
    while ( !(ADCSRA & (1<<ADIF)) ); //warte auf Konvertierung
20
    result += ADC;        // Wandlungsergebnisse aufaddieren
21
  }
22
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren
23
 
24
  result /= 4;                     // Summe durch vier teilen = arithm. Mittelwert
25
26
  return result;
27
}

und die routine zum lesen und ausgeben auf dem LCD:
1
    while(1){  
2
    lcd_clrscr(); //display löschen
3
    uint16_t adcvalue = readADC(7);
4
    char adcstring[6];
5
    lcd_puts(utoa(adcvalue, adcstring, 10));
6
    _delay_ms(400);
7
    }
jemand ne Idee? Ist bestimmt nur ein doofer Fehler den ich vor lauter 
Bäumen nicht sehe...

von spess53 (Gast)


Lesenswert?

Hi

ADMUX=  ... (1<<ADLAR) ... bewirkt, daß das Ergenis linksbündig
ausgegeben werden. Dadurch kann das natürlch größer als 1023 werden.
Wenn du den o.g. Therm weglässt liegt dein Wert im Bereich
0..1023.

MfG Spess

von Uwe H. (mistert)


Lesenswert?

Super dankeschön! Das wars! Ich wusste doch es war nur eine Kleinigkeit 
:)

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.