hallo iedereen ik ben bezig met een 16f690 te programmeren. hierbij wil k gebruik maken van de adc. nu heb ik hier vier kanalen voor gemaakt. maar bij het vierde kanaal geeft hij continu 5volt. terwijl dit niet op de pin is aangesloten. (al haal ik die pin los), wat zou hiervan de fout zijn? ook heb ik het ansel register aangepast.
bij voorbaat dank.
Het is al opgelost, bedankt!!
code:
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
cblock 0x20
delay
delay1
delay2
endc
org 0
Start
bsf STATUS,RP0 ; selecteer Register Pagina 1
bsf STATUS,RP1 ; selecteer Register Pagina 1
movlw 0xFF
movwf TRISA ; maak van poort a inputs
bcf TRISA,4
movlw 0xE0 ;
movwf TRISB ; maak van poort b inputs behalve PORTb,4
clrf TRISC ; maak van poort c alles uitgangen
movlw 0x10 ; deel de A-D klok door 8
movwf ADCON1 ; laad in A-D register
bcf STATUS,RP1 ; selecteer Register Pagina 1
bcf STATUS,RP0 ; ga terug naar Pagina 0
bsf STATUS,RP1
movlw 0x07 ; maak alle ingangen aaloog behalve Poort A bit 0 (poort 1)
movwf ANSEL
movlw 0x04 ; maak alle ingangen aaloog behalve Poort A bit 0 (poort 1)
movwf ANSELH
bcf STATUS,RP1
MainLoop
decfsz delay
goto MainLoop
movlw 0x80 ;10000000 binair
movwf ADCON0 ;
movlw 0x00
movwf PORTC
goto checkport
; nog te doen
; data op uitgangen zetten (8 bits breed)
; een uitgang maken voor status
;--------------------------------------------------------------------------------------------------
met_1 ; meting sensor druk 1
bcf ADCON0,7 ; kies voor last segnificant bit
bsf ADCON0,ADON ;zet analoog converter aan
nop ; wacht even totdat de ad converter opgestart is
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
bsf ADCON0,GO ; start uitlezing
btfsc ADCON0,GO ; als bit GO van ADCONO 0 is ga verder anders w8 tot uitlezing klaar is.
goto $-1
movf ADRESH,w ; kopieer uitlezing naar werkregister.
movwf PORTC ; kopieer uitlezig naar poort c
bsf PORTA,4
ontv1
btfss PORTA,3 ; wacht op ontvangen
goto ontv1 ; gat terug na afvragen
bcf PORTA,4 ; clear bit zenden
bcf ADCON0,CHS0 ; claer keuze poorten
bcf ADCON0,CHS1
bcf ADCON0,CHS2
bcf ADCON0,CHS3
goto MainLoop
;---------------------------------------------------------------------------------------------------
met_2 ; meting sensor druk 2
bcf ADCON0,7
bsf ADCON0,CHS0
bsf ADCON0,ADON
nop ; wacht even totdat de ad converter opgestart is
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
bsf ADCON0,GO ; start uitlezing
btfsc ADCON0,GO ; als bit GO van ADCONO 1 ga verder anders w8 tot uitlezing klaar is.
goto $-1
movf ADRESH,w ; kpieer uitlezing naar werkregister.
movwf PORTC ; kopieer uitlezig naar poort c
; kopieer de uitlezing naar port c.
; w8 op atwoord
; w8 op instructie
bsf PORTA,4
ontv2
btfss PORTA,3 ; wacht op ontvangen (als hij nul is)
goto ontv2 ; ga terug na afvragen
bcf PORTA,4 ; clear bit zenden
bcf ADCON0,CHS0 ; claer keuze poorten
bcf ADCON0,CHS1
bcf ADCON0,CHS2
bcf ADCON0,CHS3
goto MainLoop
;------------------------------------------------------------------------------------------------------
met_3 ; meting sensor druk 3
bcf ADCON0,7
bsf ADCON0,CHS1
bsf ADCON0,ADON
nop ; wacht even totdat de ad converter opgestart is
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
bsf ADCON0,GO ; start uitlezing
btfsc ADCON0,GO ; als bit GO van ADCONO 1 ga verder anders w8 tot uitlezing klaar is.
goto $-1
movf ADRESH,w ; kopieer uitlezing naar werkregister.
movwf PORTC ; kopieer uitlezig naar poort c
bsf PORTA,4
ontv3
btfss PORTA,3 ; wacht op ontvangen
goto ontv3 ; gat terug na afvragen
bcf PORTA,4 ; clear bit zenden
bcf ADCON0,CHS0
bcf ADCON0,CHS1
bcf ADCON0,CHS2
bcf ADCON0,CHS3
goto MainLoop
;-------------------------------------------------------------------------------------------------------
met_4 ; meting sensor flow
bcf ADCON0,7
bsf ADCON0,CHS1
bsf ADCON0,CHS3
bsf ADCON0,ADON
nop ; wacht even totdat de ad converter opgestart is
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
nop ; wacht 1uS
bsf ADCON0,GO ; start uitlezing
btfsc ADCON0,GO ; als bit GO van ADCONO 1 ga verder anders w8 tot uitlezing klaar is.
goto $-1
movf ADRESH,w ; kopieer uitlezing naar werkregister.
movwf PORTC ; kopieer uitlezig naar poort c
bsf PORTA,4 ; set poort versturen
ontv4
btfss PORTA,3 ; wacht op ontvangen(1)
goto ontv4 ; gat terug na afvragen
bcf PORTA,4 ; clear bit zenden
bcf ADCON0,CHS0
bcf ADCON0,CHS1
bcf ADCON0,CHS2
bcf ADCON0,CHS3
goto MainLoop
;---------------------------------------------------------------------------------------------------------
checkport
btfss PORTB,5
goto checkport1
goto met_1 ; druk meting sensor 1
checkport1
btfss PORTB,6
goto checkport2
goto met_2 ; druk meting sensor 2
checkport2
btfss PORTB,7
goto checkport3
goto met_3 ; druk meting sensor 3
checkport3
btfss PORTA,5
goto MainLoop
goto met_4 ; flow meting sensor 4
end
[code/]Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Op 12 juni 2009 10:58:01 schreef rgbledje:
Het is al opgelost, bedankt!!
Mogen we weten wat je verkeerd had?
Kunnen wij misschien ook van leren...
excuses voor de late reactie. maar ik had een draadje gewoon verkeerd aangesloten haha. ik had gelijk de voeding erop geprikt. verder niet veel interresants. greetzz