Har problem att få igång analogingången AN8 (RC6) på en PIC16F690 (som rubriken säger). Symtomen är att vid avläsning får jag bara 0 i ADRESH.
Så här ser min init-kod ut där jag ska ställa in alla register så den ska fatta att RC6 är en analog ingång:
Kod: Markera allt
Init_Proc
BANKSEL CM1CON0
clrf CM1CON0 ;stäng av komparator 1
clrf CM2CON0 ;stäng av komparator 2
clrf CM2CON1
clrf ANSEL
movlw B'00000001'
movwf ANSELH
BANKSEL OSCTUNE
clrf OSCTUNE
; BANKSEL TRISA
movlw B'01110101' ;8Mhz, kör på intern osc,
movwf OSCCON
movlw B'11000000' ;sätt på global interrupt och pehriferal interrupt
movwf INTCON ;*
movlw B'00000001' ;sätt på Timer1 interrupt
movwf PIE1 ;*
movlw B'00000000' ;stäng av alla andra interrupt
movwf PIE2 ;*
movlw B'00000000'
movwf OPTION_REG
movlw B'00110000'
movwf TRISA
movlw B'10000000'
movwf TRISB
movlw B'11000000' ;RC 7 och RC6 IN resten UT
movwf TRISC
movlw B'01010000' ;1 TAD = Fosc/16 (2us vid 8MHz)
movwf ADCON1
BANKSEL PORTA
clrf SSPCON ;stäng av serieporten
clrf CCP1CON
clrf ECCPAS
movlw B'001000001' ;left justified, VDD ref, AN8 ch select, GoDon = 0, ADON = 1
movwf ADCON0 ;init ADC
call Timer1_Tracking_Conf ;ställ in timer1 i utgångsläge för tracking
clrf COM_REG ;sätt com till utgångsläge, idle
clrf COMMAND_REC ;vi har inget giltigt kommando att ta hand om
clrf COMMAND_SEND ;vi har inget kommando att sända
clrf ERROR_STATE ;vi har inte ngn error än så länge
call Init_Step_Seqencer ;här sätter vi upp stegsekvensräknaren, kan hämta pos från EEPROM etc
clrf MACHINE_MODE
clrf ACTION_REG
call Init_Error_Handler ;här initar vi alla räknare för error_handler
call Set_Lower_Speed_Limit
call Set_New_Move_Timer
bsf MACHINE_MODE,0 ;vi visar att vi ska tracka
call Timer1_ON
call Timer1_Tracking_Init
call Init_Digital_Pot
call Test_Pot
return
Och här ska jag kolla av analogporten men får alltså bara 0 tillbaka... (värdet på ADRESH ska ligga i W vid return är det tänkt).
Kod: Markera allt
Get_Curr_ADC
BANKSEL ADCON0 ;
movlw B'001000001' ;left justified, VDD ref, AN8 ch select, GoDon = 0, ADON = 1
movwf ADCON0 ;init ADC
call ADC_Delay
bsf ADCON0,GO ;Start conversion
btfsc ADCON0,GO ;Is conversion done?
goto $-1 ;No, test again
BANKSEL ADRESH ;
movf ADRESH,W ;Lägg in höga resultatet i W
BANKSEL PORTA ;ställ in rätt port
return ;återgå till koden
Mäter jag spänningen på pinnen så är den inte noll. Om jag tar bort det som jag ska mäta på, så att RC6 "hänger i luften" så är det 0V på den.
Är det ngt jag glömmer konfigurera, eller gör jag ngt annat fel. Skulle vara väldigt tacksam för dem som hjälper mig.
Per