Hallo,
ich habe zur Zeit ein Problem mit einem Mega128-A und dessen ADC.
Kurz zum Aufbau:
Vcc, Vcc, AVcc -> 5V
Gnd's -> Gnd
Aref -> 100nF -> Gnd
Dann habe einen 10k Poti an ADC0 angeschlossen.
Laut Multimeter kann ich linear 0V bis 4.5V einstellen.
Wenn ich das ganze jetzt auf den Mega128 loslasse bekomme ich sehr
merkwürdige ergebnisse.
Ich kann ziemlich weit drehen, bis ich auf einen (10-bit) ADC wert von
40 komme. Dabei liegen bereits 4.27V an ADC0 an. Wenn ich nur einen
hauch weiter drehe, stehe ich bei einem ADC Wert von 900 bei 4.4V.
Da kann ja irgendwas nicht richtig laufen.
Hier ein Auszug aus meinem Quellcode:
1 | function ADCRead(channel: byte): word;
|
2 | begin
|
3 | // AVCC benutzen 7:6
|
4 | // Right Adjust 5
|
5 | // Channel 4:0
|
6 | ADMUX := %01000000 or (%00011111 and channel);
|
7 |
|
8 | // Aktivieren 7
|
9 | // Start Conversion 6
|
10 | // Free running 5
|
11 | // Interupt 4:3
|
12 | // Prescaler (128) 2:0
|
13 | ADCSRA := %11000111;
|
14 |
|
15 | // Initialberechnung
|
16 | while ADSC_bit = 1 do
|
17 | nop;
|
18 |
|
19 | // Wert berechnen lassen
|
20 | ADSC_bit := 1;
|
21 | while ADSC_bit = 1 do
|
22 | nop;
|
23 |
|
24 | // Wert lesen. ADCL zuerst!
|
25 | lo(Result) := ADCL;
|
26 | hi(Result) := ADCH;
|
27 |
|
28 | // ADC deaktivieren
|
29 | ADCSRA := 0;
|
30 | end;
|
Hat jemand von euch vllt eine Idee, was da schief läuft?