Hallo liebes Forum!
Ich möchte meinen PIC18F4520 dazu bringen bei der ADC-Wandlung AD2(RA2)
und AD3(RA3) als Referenzquelle zu benutzen, leider funzt es nicht.
Ich habe über eine Referenzdiode und einen Spannungsteiler an
AN3(RA3)=3.2V und an AN2(RA2)=Masse=0V angeschlossen.
Den PIC selbst betreibe ich mit VDD=3.3V. Aus dem Datenblatt geht
hervor, das delta_Vref min. 3V sein müssen wenn ich den PIC mit VDD>=3V
betreibe, was ich ja tue. Sollte also erstmal alles in Ordung sein,
denke ich.
Mein C-Code:
1 | unsigned int tmp_value1, tmp_h, tmp_l=0;
|
2 |
|
3 | void Ini_ADC(void) //Initialisierung des 10bit-ADC (siehe DB)
|
4 | {
|
5 | //Alles Inputs!
|
6 | trisa.0=1;
|
7 | trisa.1=1;
|
8 | trisa.2=1;
|
9 | trisa.3=1;
|
10 |
|
11 | adcon2 =0x8C; //2TAD, rechtsbündig
|
12 | adcon1 =0x3b; //Vref-=RA2; Vref+=RA3
|
13 | adcon0 =0x01; //use AN0, ADC=on
|
14 | }
|
15 |
|
16 | void start_ADC()
|
17 | {
|
18 | adcon0 |= 0x2; //start conversion
|
19 | while((adcon0 & 0x02)>=1);
|
20 | //Samples einlesen und in tmp_value1 speichern
|
21 | tmp_h=adresh;
|
22 | tmp_l=adresl;
|
23 | tmp_value1=(tmp_h << 0x08) | tmp_l;
|
24 | }
|
Leider liest der PiC für adresh immer "02" (oder "03") und für
adressl immer "40" aus, egal welche Spannung an ADC1 anliegt. Habe ich
bei der Initialisierung etwas falsch gemacht, worauf muss ich achten
wenn ich als Vref nicht VDD benutzen möchte?
Btw: Wenn ich adcon1=0x0b setze, also VDD als Vref benutze, funktioniert
das ganze einwandfrei!
Vielen Dank für eure (hoffentlich schnelle) Hilfe :)