Sida 1 av 1

Problem: få igång AN8 på en PIC16F690

Postat: 22 maj 2012, 20:30:46
av funkstar
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:

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

Re: Problem: få igång AN8 på en PIC16F690

Postat: 22 maj 2012, 22:23:22
av sneaky
Kikade bara lite snabbt men här har du väl lite för många siffror? ;)
movlw B'001000001' ;left justified, VDD ref, AN8 ch select, GoDon = 0, ADON = 1

Re: Problem: få igång AN8 på en PIC16F690

Postat: 23 maj 2012, 07:51:50
av funkstar
AHA!! Det borde göra susen. Man blir blind av att stirra på sin kod ibland. Återkommer när jag testat ikväll.

Per

Re: Problem: få igång AN8 på en PIC16F690

Postat: 23 maj 2012, 20:22:25
av funkstar
HA!! Nu funkar det. Stort tack för hjälpen. Du är dagens hjälte :-)

Per