PIC16f870 AD-Wandler

H

Hanno Rein

Guest
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
 
"Hanno Rein" <newsx4p@hanno-rein.de> schrieb im Newsbeitrag
news:cebkmo$7gl$04$1@news.t-online.com...
Hallo!

Ich habe hier einen PIC16f870. Nun möchte ich
an den Pins AN0, AN1 ... <gekürzt

BSF ADCON0, 2 ; start

ADCloop1:
BTFSS ADCON0, 2
GOTO ADCloop1
Rüdiger
 
Ich bin für jeden Tipp dankbar :)
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
 

Welcome to EDABoard.com

Sponsor

Back
Top