Hallo Zusammen,
kann mir jemand sagen was ich beim Auslesen des ADC von meinem
PIC18F66K80 falsch mache? Ich verwende MicroC Pro als Compiler. Wenn
ich die integrierte Lib einsetze, funktioniert es einwandfrei, ich
möchte aber wissen was passiert und deswegen alles per Hand
programmieren. Hier mein C-Code:
1 | for (i=0; i<13; i++)
|
2 | {
|
3 | adc_rd = 0;
|
4 | PORTB =pin_mux[i];
|
5 |
|
6 | ADCON0.ADON = 1; //Wake up ADC
|
7 | ADCON0.CHS0=0;
|
8 | ADCON0.CHS1=0;
|
9 | ADCON0.CHS2=0;
|
10 | ADCON0.CHS3=0;
|
11 | ADCON0.CHS4=0;
|
12 |
|
13 | ADCON0.GO = 1; //start 12b ADC conversion
|
14 | while(ADCON0.NOT_DONE); //wait until ADC finished
|
15 |
|
16 | adc_rd=ADRESH; //12b ADC result value
|
17 | adc_rd=adc_rd<<8; //bitwweises verschieben nach links
|
18 | adc_rd=adc_rd+ADRESL; //12b ADC result value
|
19 | ADCON0.ADON = 0; //set ADC conversion module off
|
20 |
|
21 | sprintf(lcd_line[0], "AN0 = %u", adc_rd); //The pec_error variable is simply set negative if any PEC errors
|
22 | Lcd_Out(1,1, lcd_line[0]);
|
23 |
|
24 | ADCON0.ADON = 1; //Wake up ADC
|
25 | adc_rd = 0;
|
26 | ADCON0.CHS0=1;
|
27 | ADCON0.CHS1=0;
|
28 | ADCON0.CHS2=0;
|
29 | ADCON0.CHS3=0;
|
30 | ADCON0.CHS4=0;
|
31 |
|
32 | ADCON0.GO = 1; //start 12b ADC conversion
|
33 | while(ADCON0.NOT_DONE); //wait until ADC finished
|
34 |
|
35 | adc_rd=ADRESH; //12b ADC result value
|
36 | adc_rd=adc_rd<<8; //bitwweises verschieben nach links
|
37 | adc_rd=adc_rd+ADRESL; //12b ADC result value
|
38 | ADCON0.ADON = 0; //set ADC conversion module off
|
39 |
|
40 | sprintf(lcd_line[1], "AN1 = %u", adc_rd); //The pec_error variable is simply set negative if any PEC errors
|
41 | Lcd_Out(2,1, lcd_line[1]);
|
42 |
|
43 | sprintf(lcd_line[2], "MUX = %X", pin_mux[i]); //The pec_error variable is simply set negative if any PEC errors
|
44 | Lcd_Out(3,1, lcd_line[2]);
|
45 | Delay_ms(1000);
|
46 | }
|
Anstatt von Werten zwischen 0 und 40954 bekomme ich Werte um die 65000
auf meine LCD angezeigt.
Vielen Dank