Hi, ich verzweifele momentan fast daran eine Spannung mit einem PIC18f2685 zu messen. Komischerweise arbeitet der AD-Wandler offenbar zwar schon irgendwie, sinnvolle Werte lassen sich aber nicht bekommen. Beispiele: 5V -> 1023,also ok 0V -> schwankt zwischen 17 und 28 0,7V aus einem Temp.Sensor -> schankt zwischen 170 und 210 obwohl die Spannung konstant ist (mit Oszi nachgemessen) Woran kann das liegen bzw. was kann ich dagegen tun? Hier noch meinen Codeausschnitt wo es im den AD geht.
1 | // AD-Einstellungen
|
2 | ADCON0bits.ADON = 0; // Disable A/D module |
3 | |
4 | ADCON0bits.CHS0 = 0; // Select channel 0 (AN0) |
5 | ADCON0bits.CHS1 = 0; |
6 | ADCON0bits.CHS2 = 0; |
7 | ADCON0bits.CHS3 = 0; |
8 | |
9 | ADCON1bits.VCFG1 = 0; // Use VSS for Vref- source |
10 | ADCON1bits.VCFG0 = 0; // Use VDD for Vref+ source |
11 | |
12 | ADCON1bits.PCFG0 = 0; // Make AN0 pin analog and all others digital |
13 | ADCON1bits.PCFG1 = 1; |
14 | ADCON1bits.PCFG2 = 1; |
15 | ADCON1bits.PCFG3 = 1; |
16 | |
17 | ADCON2bits.ADFM = 1; // A/D result is right justified |
18 | |
19 | ADCON2bits.ACQT0 = 1; // Acquisition time |
20 | ADCON2bits.ACQT1 = 0; |
21 | ADCON2bits.ACQT2 = 0; |
22 | |
23 | ADCON2bits.ADCS0 = 0; // A/D conversion clock |
24 | ADCON2bits.ADCS1 = 1; |
25 | ADCON2bits.ADCS2 = 1; |
26 | |
27 | ADCON0bits.ADON = 1; // Enable A/D module |
28 | |
29 | TRISA= 0xFF; //RA0 Eingang |
30 | LATA = 0xFF; |
31 | PORTA = 0x0F; |
...
1 | ADCON0bits.ADON = 1; |
2 | ADCON0bits.GO_DONE = 1; |
3 | while(ADCON0bits.GO_DONE) |
4 | {}
|
5 | temperatur = ADRES; |
Vielen Dank schonmal im Voraus