Problem: få igång AN8 på en PIC16F690
Postat: 22 maj 2012, 20:30:46
Hej
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:
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).
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
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