Hallooo,
es hat wundervolle 32 Grad in meinem Zimmerchen und meine Nerven sind
Aufgrund eines zickigen AD Wandlers leicht angespannt! Deshalb hoffe ich
das ihr mir weiterhelfen könnt!
Also Problemstellung: PIC16F876 mit 20MHZ, ich will 2 AD Eingänge
benutzen. Erste AD Wandlung scheint zu Funktionieren, bei der Zweiten
stimmt der Wert nicht.
Es sollen die Eingänge AN0 und dann AN1 verwendet werden. Die Wait
Funktion hat eine Laufzeit von 200µs.
Bin für jeden Hinweis dankbar!!
Code:
1 | READAD
|
2 |
|
3 |
|
4 | CLRWDT ;Watchdog CLR
|
5 |
|
6 |
|
7 | ; Anfangsinitialisierung
|
8 | init
|
9 |
|
10 | ; ADC einschalten ;Vorgabe Messen poti
|
11 | BSF ADCON0, 0 ; ADON=1
|
12 |
|
13 |
|
14 |
|
15 | ; ADC-Eingang AN/RA0 auswählen
|
16 | BCF ADCON0, 5 ; ADCHS2=0
|
17 | BCF ADCON0, 4 ; ADCHS1=0
|
18 | BCF ADCON0, 3 ; ADCHS0=0
|
19 |
|
20 | ; ADC speed für 20 MHz einstellen
|
21 | BSF ADCON0, 7 ; ADCS1=1
|
22 | BCF ADCON0, 6 ; ADCS0=0
|
23 |
|
24 | ; Daten linksbündig
|
25 | BSF STATUS,RP0 ; Bank1
|
26 | BCF ADCON1, 7 ; ADFM=0
|
27 | BCF STATUS,RP0 ; Bank0
|
28 |
|
29 | call Waitms
|
30 |
|
31 | ;Eingangsspannung wandeln
|
32 | BSF ADCON0, 2 ; ADC starten
|
33 | loop1
|
34 | BTFSC ADCON0, 2
|
35 | GOTO loop1
|
36 |
|
37 |
|
38 | movlw ADRESH ; obere 8 Bit auslesen
|
39 | movwf P1 ; obere 8-Bit nach P1
|
40 |
|
41 |
|
42 |
|
43 | call Waitms ;warten
|
44 |
|
45 |
|
46 | ; ADC-Eingang AN1 auswählen ;Temp Messen
|
47 | BCF ADCON0, 5 ; ADCHS2=0
|
48 | BCF ADCON0, 4 ; ADCHS1=0
|
49 | BSF ADCON0, 3 ; ADCHS0=1
|
50 |
|
51 | ; ADC speed für 20 MHz einstellen
|
52 | ; BSF ADCON0, 7 ; ADCS1=1
|
53 | ; BCF ADCON0, 6 ; ADCS0=0
|
54 |
|
55 | ; Daten linksbündig
|
56 | ; BSF STATUS,RP0 ; Bank1
|
57 | ; BCF ADCON1, 7 ; ADFM=0
|
58 | ; BCF STATUS,RP0 ; Bank0
|
59 |
|
60 | call Waitms ;Warten
|
61 |
|
62 | ;Eingangsspannung wandeln
|
63 | BSF ADCON0, 2 ; ADC starten
|
64 | loop11
|
65 | BTFSC ADCON0, 2
|
66 | GOTO loop11
|
67 |
|
68 |
|
69 | movlw ADRESH
|
70 | movwf T1
|