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

Gast #3358578
Lesenswert?

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
Lesenswert?

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?!?

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