PIC16f870 AD-Wandler

Hallo!

Ich habe hier einen PIC16f870. Nun möchte ich an den Pins AN0, AN1 analoge Spannungswerte einlesen. Bei AN0 tut das auch gut. Wenn ich aber beide Eingänge in einem Programm abfragen will erhalte ich irgendeinen undefinierbaren Mittelwert. Dieser hat schon noch etwas mit dem jeweiligen Eingang zu tun, aber auch mit dem anderen. Also irgenwas mach ich falsch.

Hier ist eine Ausleseroutine:

READADC1 BCF ADCON0, 5 ; Eingang wählen BCF ADCON0, 4 BCF ADCON0, 3 movlw D'100' ; Pause nach Portwechsel (400 uS) movwf ow_counter1 Call OW_WAIT BSF ADCON0, 2 ; start

ADCloop1: BTFSS ADCON0, 2 GOTO ADCloop1 movlw 'W' CALL RS232out movlw 'D' CALL RS232out movfw ADRESH CALL RS232decout CALL newline return

Die zweite ist bis auf die Zeile "BSF ADCON0,3" identisch. Ich richte den ADC zu Beginn mit folgendem Code ein:

; ADC initialisieren movlw B'00000100' ; RA0, RA1 = input, vref = vss, vdd movwf ADCON1 movlw B'10000001' ; 10 MHz, anschalten movwf ADCON0

Ich bin für jeden Tipp dankbar :-)

Grüße Hanno

Reply to
Hanno Rein
Loading thread data ...

"Hanno Rein" schrieb im Newsbeitrag news:cebkmo$7gl$04$ snipped-for-privacy@news.t-online.com...

Rüdiger

Reply to
Ruediger Klenner

Nachtrag: Symbolische Adressen benutzen macht die Sache lesbarer (ich hab deine Zeilen jetzt nicht im datasheet auf Übereinstimmung nachgeschaut.)

An TAD denken zwischen einschalten und Samplewert auslesen (Eingangs-RC) wie im ds beschrieben. 400us scheint mir unnötig lange, bring das doch in Übereinstimmung zu deiner ext. Beschaltung in abh. von Quellimpedanz.

Ich würd das so machen:

bcf ADCON0,ADIF ; einschalten

bsf ADCON0,ADON ; start AD movlw .9 ; 5 us TAD (27*200n) movwf wdelay SAD01 decfsz wdelay,f ; (1,2) goto SAD01 ; (2) bsf ADCON0,GO SAD02 btfsc ADCON0,GO ; fertig? goto SAD02

Rüdiger

Reply to
Ruediger Klenner

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.