Guten Abend,
ich versuche mich gerade am 12bit A/D-Wandler eines PIC18F26K80, leider
komme ich mit den Ergebnissen nicht klar.
Liegen die Eingänge auf 0V (=Vrefn) erhalte ich als Ergebnis
0x7f7e..0x7f7d, liegen die Eingänge auf 3,3V (=Vrefp) erhalte ich als
Ergebnis 0x0f7a..0x0f7f.
Es ist bekannt (Errata), dass der Wandler +-25LSB Offsetfehler hat,
daher könnte ich auf Kanal 5 gegen GND messen, aber 0x7f7e bringt mich
als Nullwert irgendwie ins Schleudern.
Die interne 1,024V Referenz ergibt als ADC-Wert 0x0467, halbwegs
plausibel.
Wo stehe ich hier auf dem Schlauch bzw. wo könnte ich noch suchen?
1 | ANCON0bits.ANSEL0 = 1;
|
2 | ANCON0bits.ANSEL1 = 1;
|
3 | ANCON0bits.ANSEL2 = 1;
|
4 | ANCON0bits.ANSEL3 = 1;
|
5 | ADCON2bits.ACQT = 0b100; // Taqc = 8*Tad
|
6 | ADCON2bits.ADCS = 0b110; // fosc/64, Tad=1us
|
7 | ADCON2bits.ADFM = 1; // Ergebnis rechtsbündig
|
8 | ADCON0bits.ADON = 1;
|
9 | ADCON0bits.CHS = 0;
|
10 | ADCON0bits.GO = 1;
|
11 |
|
12 | // Bisschen sonstiges Programm (UART, digitale Ausgänge, I2C)
|
13 | while(1)
|
14 | if (ADCON0bits.GO == 0)
|
15 | {
|
16 | i2c_reg_map[0x10 + (ana_chan << 1)] = ADRESH;
|
17 | i2c_reg_map[0x11 + (ana_chan << 1)] = ADRESL;
|
18 | ana_chan++;
|
19 | if (ana_chan > 3)
|
20 | ana_chan = 0;
|
21 | ADCON0bits.GO = 1;
|
22 | }
|
23 | }
|