PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auswahlprobleme beim AD-Wandler



HoStAn
10.10.2006, 19:21
ich möchte an RA0 und RA1 jeweils einen analogen Wert einlesen. Wenn ich die einzelnene AD-Werte in 2 verschiedenen Programme einlese, funktioniert es.
Wenn ich die 2 einzelnen Programme zusammen schreibe, dann habe ich Probleme mit dem einlesen, da RA0 und RA1 sich
beeinflussen. Der Fehler liegt auf jeden Fall in der Auswahl, welcher PIN als Eingang für den AD-Wandler gewählt wird.
Nachdem ich die 2 einzelnen Programme zusammen geschrieben habe, habe ich den kompletten Teil für die zweite Anzeige
ausgeklammert, und nacheinander wieder ins Programm gestellt. Als ich dann die Auswahl des PIN RA1 "freigeschaltet" habe, trat
der Fehler wieder auf.

Habt Ihr eine Idee woran das liegt?
Die Konfiguration des Programms ist in Ordnung.




;****Eingang (RA0) des AD-Wandler auswählen****

bcf ADCON0,5
bcf ADCON0,4
bcf ADCON0,3
;****Auswahl Ende****

bsf ADCON0,2 ;AD-Wandler starten
loopad1: btfsc ADCON0,2 ;AD-Wandler fertig?
goto loopad1 ;noch nicht fertig, warten

adhol1: movfw ADRESH
movwf adneu_1


movlw 0x01 ;wartezeit von 1mS
movwf loops
call wait_ms


;****Eingang (RA1) des AD-Wandler auswählen****
bcf ADCON0,5
bcf ADCON0,4
bsf ADCON0,3
;****Auswahl Ende****

bsf ADCON0,2 ;AD-Wandler starten
loopad2: btfsc ADCON0,2 ;AD-Wandler fertig?
goto loopad2 ;noch nicht fertig, warten

adhol2: movfw ADRESH
movwf adneu_2

robocat
10.10.2006, 20:06
kenn mich mit pics ja nicht aus, aber dein AD-wandler-auswahlcode is bei beiden identisch!? soll das so sein?

HoStAn
10.10.2006, 20:39
der ist nicht identisch,
hier ist die Auswahl auf RA0

bcf ADCON0,5
bcf ADCON0,4
bcf ADCON0,3


und hier liegt die Auswahl beim RA1
bcf ADCON0,5
bcf ADCON0,4
bsf ADCON0,3

bei ADCON0,3 steht einmal bcf und einmal bsf

robocat
10.10.2006, 20:59
stimmt... sorry :|

kalledom
11.10.2006, 12:50
Hallo HoStAn,
probier mal folgendes:
- AD-Kanal setzen
- 1 ms warten, damit sich die interne Kapazität aufladen kann
- Wandlung starten
- Warten bis Wandlung fertig ist
- AD-Wert auslesen
- AD-Kanal setzen
- 1 ms warten, damit sich die interne Kapazität aufladen kann
- ....
Du kannst das aber auch mit einem 1ms-Timer-Interrupt machen; in der 'Freizeit' kannst Du dann was 'Besseres' erledigen.
Schau mal unter http://www.domnick-elektronik.de/picasm.htm#RdAdw

HoStAn
11.10.2006, 19:11
Danke kalledom, da war der Fehler, der Kondensator hatte nicht genügend Zeit um sich aufzuladen