Atmega328 - 10-bit-ADC gibt 16-bit-Werte aus

Gast #3358578
Hallo,

der 10-bit-ADC vom Atmega328 gibt mir 16-bit-Werte aus, woran könnte es 
liegen?

Hier der Programmauszug:
1
uint16_t variabletmp = 0;
2
...
3

4

5
  //****  ADC initialisieren ****
6
  ADCSRA  |= 1<<ADEN;      // ADC aktivieren
7
  ADCSRA  |= (1<<ADPS1)|(1<<ADPS2);  // Vorteiler auf 64
8
  ADMUX  |= (1<<REFS0)|(1<<REFS1);  // Einstellung Uref = 5V extern: 01;  Ref 1,1V intern: 11
9
  ADMUX  |= (1<<MUX2) | (1<<MUX0);      // ADC5 (PIN PC5) als ADC-Kanal definieren
10

11
  ADMUX  |= (1<<ADLAR);  // Ausgabe = linksbündig
12
  DIDR0  |= 1<<ADC5D;  // Digital Input Kanal ADC5D disabled
13

14

15

16

17
// Dummy-Readout
18

19

20
  ADCSRA  |= (1<<ADSC);    // Start ADC-Wandlung
21

22
  while (ADCSRA & (1<<ADSC));     // auf Abschluss der Konventierung warten
23

24
    x=ADC;      // Ergebnis verwerfen
25

26

27

28

29

30
  while (1)// -------- Hauptschleife ---------
31
  {    
32

33
 
34
        ADCSRA |= (1<<ADSC);      // Start ADC-Wandlung
35
        while (ADCSRA & (1<<ADSC));    // auf Abschluss der Konvertierung warten
36
        variabletmp = ADC;
37
     
38
        [... weiteres Programm]
39

40
  }

variabletmp = ADC;

variabletmp wird bei ca. 0,6V Eingangsspannung am ADC dezimal ca. 30000 
groß (Uref = 1,1V).
Die Werte springen dann von Schritt zu Schritt um ca. den Wert 100.

Woran kann es liegen, mir fällt nichts mehr ein?
Gast #3358919
Timmo H. schrieb:
>> ADMUX  |= (1<<ADLAR);  // Ausgabe = linksbündig
> mach doch mal rechtsbündig

ADLAR ist jetzt 0, super, Danke!

Jetzt sind die Zahlen allerdings sehr klein.

Kann es sein, dass der ADC die Werte im "8-Bit-Modus" ausgibt?

Hätte gedacht, das der Compiler (AVR-Studio) bei
variabletmp = ADC;
automatisch den 10-Bit-Wert in variabletmp ablegt?!?
Gast #3358938
Die Variable variabletmp ist auf jeden Fall eine uint16_t, daran kann es 
nicht liegen.

Trotzdem spuckt der ADC bei halber Eingangsspannung den Wert 127 aus und 
nicht 511.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.