Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Help on ASM code - 16f676 ADC not working

Status
Not open for further replies.

UDS

Newbie level 3
Joined
Jul 26, 2017
Messages
4
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
34
Need help on ASM Code - 16f676 ADC not working

I am using 16F676
ADC input AN7
Ref VDD +5V
conversion selction 16Tosc

Code ASM - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ADC settings
        MOVLW   b'00011101'
        MOVWF   ADCON0
        BSF             STATUS, RP0
        MOVLW   b'01010000'
        MOVWF   ADCON1
        MOVLW   b'10000000'
        MOVWF   ANSEL
        
code for acquisition
 
        CALL            TAD                             ;23 MCS DELAY
        BCF             STATUS,RP0
        BSF             ADCON0,1
        NOP
CHK     BTFSC   ADCON0,1
        GOTO            CHK
        MOVF            ADRESH,W
        MOVWF   ADCH
        MOVF            ADCH,W
        MOVWF   RPM
        COMF            RPM,1
        MOVF            RPM,W
        MOVWF   DC2
        RETURN


but no response to AN7>0 or >+5V

Kindly advice
 
Last edited by a moderator:

Help on ASM code - 16f676 ADC not working

I am using 16F676 to change stepper motor rpm
Problem ADC is not working viz. for AN7 = 0 or +5V, no change

Analogue input 0 to 5 V potentiometer, at AN7 (pin 7)
Reference is VDD +5V
Conversion selction 16Tosc
Output at pin <11:8>
Check the problem in program
Program as following,

Code:
    list      p=16F676           ; list directive to define processor
    #include <p16F676.inc>        ; processor specific variable definitions

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 

;**********************************************************************
RESET    	CODE    0x0000       

STATUS		EQU		03
TRISA			EQU		85
PORTA		EQU		05
PORTC			EQU		07

DC1			EQU		25
DC2			EQU		26
DC3			EQU		27
DC4			EQU		28
RPM			EQU		29

;
#DEFINE	OUTA		PORTC,2			;PIN 8
#DEFINE	OUTB		PORTC,1			;PIN 9
#DEFINE	OUTC		PORTC,0			;PIN 10
#DEFINE	OUTD		PORTA,2			;PIN 11


#DEFINE	SWITCH	PORTA,5			;PIN 2
#DEFINE	INPUT		PORTC,4			;PIN 6
#DEFINE	POT		PORTC,3			;PIN 7


MAIN

	ORG	0X00

	BSF 	STATUS, RP0
	BCF		OPTION_REG,7
	BCF     STATUS,RP0        
	CLRF	PORTC
	CLRF	PORTA
	BSF 	STATUS, RP0
	MOVLW	b'00111000'	
	MOVWF	TRISC
	MOVLW	b'00111000'		
	MOVWF	TRISA
	MOVLW	0X30
	MOVWF	WPUA
	MOVLW	0X00	
	MOVWF	VRCON
	BCF 	STATUS, RP0
	MOVLW	0X00			
	MOVWF	CMCON
	BCF		STATUS,RP0
	MOVLW	b'00011101'
	MOVWF	ADCON0
	BSF		STATUS, RP0
	MOVLW	b'01010000'
	MOVWF	ADCON1
	MOVLW	b'10000000'
	MOVWF	ANSEL
	BCF		STATUS,RP0

START
		
LLL
	BTFSC	SWITCH
	GOTO	LLL

	BTFSC	INPUT
	GOTO	LLL


	CALL	FFAA
	CALL	FFCC
	CALL	FFBB
	CALL	FFDD
	GOTO	LLL


FFAA
	BSF		OUTA
	CALL	AAA
	CALL	DLYCADC
	BCF		OUTA
	RETURN

FFCC
	BSF		OUTC
	CALL	AAA
	CALL	DLYCADC
	BCF		OUTC
	RETURN

FFBB
	BSF		OUTB
	CALL	AAA
	CALL	DLYCADC
	BCF		OUTB
	RETURN
		
FFDD
	BSF		OUTD
	CALL	AAA
	CALL	DLYCADC
	BCF		OUTD
	RETURN


AAA
	CALL	TAD				;20 MCS DELAY
	BCF		STATUS,RP0
	BSF		ADCON0,1
	NOP
CHK	BTFSC	ADCON0,1
	GOTO	CHK
	MOVF	ADRESH,W
	MOVWF	RPM
	COMF	RPM,1
	MOVF	RPM,W
	MOVWF	DC2
	RETURN

DLYCADC
	CALL 	DELAY
	DECFSZ	DC2,1
	GOTO 	DLYCADC		
	RETURN
DELAY
	MOVLW	0X03		
	MOVWF	DC1
DLY1	
	NOP
	DECFSZ	DC1,1	;(10X4-1)
	GOTO	DLY1
	RETURN


TAD
	MOVLW	0X01	;1
	MOVWF	DC3
	MOVLW	0X04	;4
	MOVWF	DC4
	GOTO 	DLY2
	RETURN
DLY2	
	DECFSZ	DC4,1	;(10X4-1)
	GOTO	DLY2
	DECFSZ	DC3,1
	GOTO	DLY2
	RETURN


	END
 
Last edited by a moderator:

Hello,
I have still not been able to figure out the problem in my code.
Can any one help?
Regards,
 

Hi,

I tried to read your code.
* no documentation
* no meaningful labels

I gave up.
--> we need more information to be able to help.

Klaus
 

Hello,
Basically I am driving coils of the stepper motor and changing the pulse width (DLYCADC) and hence frequency.
I feel ADC is not measuring the counts (or no acquisition) and hence I do not see anything at ADRESH or for change in voltage at AN7 has no effect. let me clarify here that I do not need ADRESL data.
I hope following comments explain the port configuration and initialization of ADC.
Regards,



Code:
    list      p=16F676           ; list directive to define processor
    #include <p16F676.inc>        ; processor specific variable definitions

    errorlevel  -302              ; suppress message 302 from list file

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 


;**********************************************************************
RESET    	CODE    0x0000       

DC1			EQU		25
DC2			EQU		26
DC3			EQU		27
DC4			EQU		28
RPM			EQU		29
;
#DEFINE	OUTA		PORTC,2			;PIN 8
#DEFINE	OUTB		PORTC,1			;PIN 9
#DEFINE	OUTC		PORTC,0			;PIN 10
#DEFINE	OUTD		PORTA,2			;PIN 11

#DEFINE	SWITCH		PORTA,5			;PIN 2
#DEFINE	INPUT		PORTC,4			;PIN 6
#DEFINE	POT			PORTC,3			;PIN 7



		ORG	        0X00
		BSF 	        STATUS, RP0
		BCF           OPTION_REG,7
		BCF           STATUS,RP0        
		CLRF	        PORTC
		CLRF	        PORTA
		BSF 	        STATUS, RP0
		MOVLW	b'00111000'		;RA<5:3> input	
		MOVWF	TRISC
		MOVLW	b'00111000'		;RC<2:0> output
		MOVWF	TRISA
		MOVLW	0X30
		MOVWF	WPUA
		MOVLW	0X00	
		MOVWF	VRCON
		BCF 	        STATUS, RP0
		MOVLW	0X00			
		MOVWF	CMCON
		BCF		STATUS,RP0
		MOVLW	b'00011101'		;left justified, ref VDD, AN7 analog input, AD on
		MOVWF	ADCON0
		BSF		STATUS, RP0
		MOVLW	b'00010000'		;FOSC/8
		MOVWF	ADCON1
		MOVLW	b'10000000'		;AN7 analog input
		MOVWF	ANSEL
		BCF		STATUS,RP0

START
		
LLL
		BTFSC	SWITCH
		GOTO	        LLL

		BTFSC	INPUT
		GOTO	        LLL


		CALL	        FFAA
		CALL	        FFCC
		CALL	        FFBB
		CALL	        FFDD
		GOTO	        LLL


FFAA
		BSF		OUTA
		CALL	        AAA
		CALL	        DLYCADC
		BCF		OUTA
		RETURN

FFCC
		BSF		OUTC
		CALL	        AAA
		CALL	        DLYCADC
		BCF		OUTC
		RETURN

FFBB
		BSF		OUTB
		CALL	        AAA
		CALL	        DLYCADC
		BCF		OUTB
		RETURN
		
FFDD
		BSF		OUTD
		CALL	        AAA
		CALL	        DLYCADC
		BCF		OUTD
		RETURN

AAA
		CALL	        TAD				;23 MCS DELAY
		BCF		STATUS,RP0
		BSF		ADCON0,GO		
		NOP
		BTFSC	ADCON0,GO
		GOTO	        $-1
		MOVF	        ADRESH,W
		MOVWF	RPM
		COMF	        RPM,1
		MOVF	        RPM,W
		MOVWF	DC2
		RETURN

DLYCADC
		CALL 	        DELAY
		DECFSZ	DC2,1
		GOTO 	DLYCADC		
		RETURN
DELAY
		MOVLW	0X03		
		MOVWF	DC1
DLY1	
		NOP
		DECFSZ	DC1,1			
		GOTO	        DLY1
		RETURN

TAD
		MOVLW	0X01			
		MOVWF	DC3
		MOVLW	0X04			
		MOVWF	DC4
		GOTO 	DLY2
		RETURN
DLY2	
		DECFSZ	DC4,1			
		GOTO	        DLY2
		DECFSZ	DC3,1
		GOTO	        DLY2
		RETURN

		END
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top