Får ej till 2 AD-kanaler på pic16f676
Postat: 28 december 2007, 17:11:30
Hej
Jag håller på med ett litet projekt där jag med en pic16f676 ska mäta två analoga signaler och presentera dessa på en 16*2-LCD.
Efter mycket kodletande och testande har jag lyckats få till allt utom att läsa två analoga signaler! Att mäta en signal fungerar hur bra som helst och värdet visas snyggt och prydligt på displayen.
Någon som kan ge några tips så att jag kan få till det allra sista?
Först en fungerande en-kanals a/d-omvandling
Jag håller på med ett litet projekt där jag med en pic16f676 ska mäta två analoga signaler och presentera dessa på en 16*2-LCD.
Efter mycket kodletande och testande har jag lyckats få till allt utom att läsa två analoga signaler! Att mäta en signal fungerar hur bra som helst och värdet visas snyggt och prydligt på displayen.
Någon som kan ge några tips så att jag kan få till det allra sista?
Först en fungerande en-kanals a/d-omvandling
Kod: Markera allt
movlw b'00000001'
movwf TRISA ; set A to all outputs
movlw b'00000001'
movwf ANSEL ; turn on analog input 0
movlw b'11100001' ; A/D kanal 0
movwf ADCON0
bcf ADCON1,ADCS2 ; set ADCS<2:0> = 001 ->
bcf ADCON1,ADCS1 ; Sample Time 8*Tosc
bsf ADCON1,ADCS0 ; from Data Sheet
bcf STATUS,RP0 ; select Register Bank 0
bcf ADCON0, ADFM ; set shift left
bcf ADCON0, VCFG ; set reference voltage = Vdd
bsf ADCON0, ADON ; turn on A/D converter
.
.
.
loop
call Delay100
bsf ADCON0, GO ; acquire a sample
wait_for_sample1
btfsc ADCON0, NOT_DONE
goto wait_for_sample1
movf ADRESH, W
movwf counter1
Kod: Markera allt
movlw b'000011'
movwf TRISA ; set A to all outputs
movlw b'00000011'
movwf ANSEL ; turn on analog input 0 & 1
bcf ADCON1,ADCS2 ; set ADCS<2:0> = 001 ->
bcf ADCON1,ADCS1 ; Sample Time 8*Tosc
bsf ADCON1,ADCS0 ; from Data Sheet
bcf STATUS,RP0 ; select Register Bank 0
bcf ADCON0, ADFM ; set shift left
bcf ADCON0, VCFG ; set reference voltage = Vdd
bsf ADCON0, ADON ; turn on A/D converter
.
.
.
loop
call Delay100
movlw b'11100001' ; A/D kanal 0
movwf ADCON0
bsf ADCON0, GO ;Starta omvandling 1
wait_for_sample1
btfsc ADCON0, NOT_DONE
goto wait_for_sample1
movf ADRESH, W
movwf counter1
call Delay100
movlw b'11100101' ; A/D kanal 1
movwf ADCON0
bsf ADCON0, GO ;Starta omvandling 2
wait_for_sample2
btfsc ADCON0, NOT_DONE
goto wait_for_sample2
movf ADRESH, W
movwf counter2