PIC16f870 AD-Wandler

Jul 29, 2004 2 Replies

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" schrieb im Newsbeitrag news:cebkmo$7gl$04$ snipped-for-privacy@news.t-online.com...

Rüdiger

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required