please dont rip this site

Microchip A2D.SRC

       list    p=16F84,t=ON,c=132,n=80,st=off


	__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

        include "P16F84.INC"

  cblock   0x0C

    count
    t1,t2
    error_code

    total_lo,total_hi
    count_lo,count_hi
  endc

;                /-----<A2D_OUT_BIT
;                R
;                R  Rf
;                R
;          Rin   |
;Vin ----RRRRR---.------>A2D_IN_BIT
;                |
;                -
;                -
;                |
;               Gnd
;  Resistor "Rin" [10K] from unknown voltage to comparator input.
;  Resistor "Rf" [10k] from Feedback pin to comparator pin.
;  Capacitor Cint from comparator pin to ground.0.56uF mylar film

A2D_PORT	EQU	PORTA
A2D_IN_BIT	EQU	0
A2D_OUT_BIT	EQU	1


ERROR_STUCK_HI	EQU	1
ERROR_STUCK_LO	EQU	2




        ORG     0               ;Reset Vector

        GOTO    Main

        ORG     4               ;Interrupt Vector


Main
	bsf	STATUS,RP0
	clrf	PORTB		;Make portb i/o pins outputs
	movlw	1
	movwf	PORTA
	bcf	STATUS,RP0

	clrf	error_code

start:


loop
 	clrf	count_lo
 	clrf	count_hi

	call	a2d_convert2
	
	movf	count_lo,W
	movwf	PORTB

	goto	loop


;--------------------------------------------------------
; a2d_convert
;
; 2I/O pins

a2d_convert:

	call	precharge

a2d_loop
	RLF	A2D_PORT,W
	xorlw	0xff
	movwf	A2D_PORT

	clrc
	movlw	1

	btfss	A2D_PORT,A2D_OUT_BIT
	 addwf	count_lo,f
	skpnc
	 addwf	count_hi,f

	addwf	total_lo,f
	skpnc
	 addwf	total_hi,f

;	clrf	t1
;	decfsz	t1,f
;	 goto	$-1

	btfss	total_hi,4
	 goto	a2d_loop


	return	

;--------------------------------------------------------
; a2d_convert
;
; I/O pin

a2d_convert2:

    ;Put the A2D_PORT's tris into the FSR so that we can
    ;access it with out having to do those damn bank selects

	movlw	TRISA
	movwf	FSR
	movlw	1
	clrf	count_lo
	clrf	count_hi
	clrf	total_lo
	clrf	total_hi
	clrf	t1

    ; Step 1 is the pre-charging cycle where the capacitor 
    ;is made to pass through the low-to-high threshold and
    ;then again through the high-to-low threshold.
    ; This ensures that the voltage on the capacitor is the
    ;same for each time we pass through the algorithm.

    ;Make the capacitor go through the low to high threshold

	bsf	A2D_PORT,A2D_OUT_BIT
	bcf	INDF,A2D_OUT_BIT

a2d2_l1

	call	delay16
	call	delay16
	call	delay16
	call	delay16

	bsf	INDF,A2D_OUT_BIT

	call	delay16

	btfsc	A2D_PORT,A2D_OUT_BIT
	 goto	a2d2_l2

	bsf	A2D_PORT,A2D_OUT_BIT
	bcf	INDF,A2D_OUT_BIT

	decfsz	t1,f
	 goto	a2d2_l1

;	movlw	ERROR_STUCK_LO
;	movwf	error_code
;	goto	display_error



   ;now pass through the high to low threshold

a2d2_l2
	clrf	t1
	bcf	A2D_PORT,A2D_OUT_BIT
	bcf	INDF,A2D_OUT_BIT

a2d2_l3

	call	delay16
	call	delay16
	call	delay16
	call	delay16

	bsf	INDF,A2D_OUT_BIT

	call	delay16

	
	btfss	A2D_PORT,A2D_OUT_BIT
	 goto	a2d2_l4

	bcf	A2D_PORT,A2D_OUT_BIT
	bcf	INDF,A2D_OUT_BIT

	decfsz	t1,f
	 goto	a2d2_l3

;	movlw	ERROR_STUCK_HI
;	movwf	error_code
;	goto	display_error

a2d2_l4
    ;If we get then we've successfully precharged the capacitor
    ;Also, the capacitor voltage is just below the high-to-low
    ;threshold (Vil) so let's begin by ramping it positive

	bsf	A2D_PORT,A2D_OUT_BIT
	bcf	INDF,A2D_OUT_BIT

a2d2_l5
	addwf	total_lo,f
	skpnc
	 addwf	total_hi,f
	btfsc	total_hi,0
	 return

	call	delay16
	call	delay16
	call	delay16
	call	delay16

	bsf	INDF,A2D_OUT_BIT

	call	delay4

	btfss   A2D_PORT,A2D_OUT_BIT
	 goto	a2d2_low

	addwf	count_lo,F

	;The cap voltage is too high
	bcf	A2D_PORT,A2D_OUT_BIT
	bcf	INDF,A2D_OUT_BIT

	skpnc
	 addwf	count_hi,F

	goto	a2d2_l5

a2d2_low
	;The cap voltage is too high
	bsf	A2D_PORT,A2D_OUT_BIT
	bcf	INDF,A2D_OUT_BIT

	goto	$+1
	goto	a2d2_l5

	return	

;--------------------------------------------------------
; precharge 

precharge:

	movlw	1
	clrf	total_lo
	clrf	total_hi

	bcf	A2D_PORT,A2D_OUT_BIT

    ; Make the capacitor voltage go below the trip threshold

pc_low_loop

	btfss	A2D_PORT,A2D_IN_BIT
	 goto	pc_high

	addwf	total_lo,f
	skpnc
	 addwf	total_hi,f

	skpc
	 goto	pc_low_loop

	movlw	ERROR_STUCK_HI
	movwf	error_code
	goto	display_error

    ; Now make the capacitor voltage go above the trip threshold

pc_high
	BSF	A2D_PORT,A2D_OUT_BIT
	clrf	total_lo
	clrf	total_hi

pc_high_loop

	btfsc	A2D_PORT,A2D_IN_BIT
	 goto	precharged

	addwf	total_lo,f
	skpnc
	 addwf	total_hi,f

	skpc
	 goto	pc_high_loop

	movlw	ERROR_STUCK_LO
	movwf	error_code
	goto	display_error

precharged:

	clrf	total_lo
	clrf	total_hi

	bcf	A2D_PORT,A2D_OUT_BIT

	return

;--------------------------------------------------------
;
; error - write an error code to portb. if the error code is
;         zero then toggle portb between 0 and 0xff

display_error:
	bsf	STATUS,RP0
	clrf	PORTB		;Make portb i/o pins outputs
	bcf	STATUS,RP0

error_loop:
	movf	error_code,W
	movwf	PORTB
	skpz
	 goto   error_loop

    ;If the error code is zero, then flash the LEDs

	call	big_delay
	comf	PORTB,f
	call	big_delay
	goto	error_loop

big_delay:
	clrf    t1
	clrf	t2

	decfsz	t1,f
	 goto	$-1
	decfsz	t2,f
	 goto	$-3
	return

delay16 NOP
delay15 NOP
delay14 NOP
delay13 NOP
delay12 NOP
delay11 NOP
delay10 NOP
delay9  NOP
delay8  NOP
delay7  NOP
delay6  NOP
delay5  NOP
delay4  RETURN

        END



file: /Techref/microchip/a2d.src, 5KB, , updated: 1999/7/19 09:09, local time: 2024/11/8 18:07,
TOP NEW HELP FIND: 
3.144.37.147:LOG IN
©2024 PLEASE DON'T RIP! THIS SITE CLOSES OCT 28, 2024 SO LONG AND THANKS FOR ALL THE FISH!

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://massmind.org/techref/microchip/a2d.src"> microchip a2d</A>

Did you find what you needed?

 

Welcome to massmind.org!

 

Welcome to massmind.org!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .