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?