## Pot

measures a variable resistance.

PBASIC's Pot command allows you to measure resistance without an external analog-to-digital converter. All that's required is a capacitor to set up a timing circuit as shown below.

Pot works by fully charging the capacitor, then measuring the time required to discharge it through the series resistance. This time is proportional to the resistance of the pot. The listing shows the technique. The Pot I/O pin is set up as an output. Then the capacitor is fully charged by making the Pot pin high for a period equal to 5 x R x C, where R is the maximum resistance of the pot, and C is the value of the capacitor. In this case, that is 5 x (10 x 103) x (0.1 x 10-6) = 5 x 10-3 seconds or 5 milliseconds.

Once the capacitor is fully charged, the program discharges it a little at a time, periodically changing the pin to input to determine whether it's low yet. If not, Pot increments a counter and tries again until the pin goes low.

You can adapt this technique to practically any combination of R and C. However, if C is greater than 0.1µF, it's a good idea to add a fixed series resistor of 220 ohms or so between the I/O pin and the pot itself. This limits the maximum current through the I/O pin in the event that the pot resistance is near 0 and the capacitor is initially discharged.

The PBASIC Pot routine includes a scale factor that can be used to calibrate a particular combination of R and C to produce full-range results (0 to 255). That feature undoubtedly draws on built-in math routines. You may not need scaling capabilities, so the demonstration here scales the Pot results by shifting them right. This is equivalent to integer division by two. It doesn't provide exactly full-scale results, but it keeps the routine compact.

#### Demonstrating Pot.

To see Pot in operation, connect the circuits above and below to an erasable PIC or PIC emulator, such as the Parallax downloader. Assemble and run POT.SRC. When you adjust the pot, the binary value displayed on the LEDs will change.

```;
; ***************************************************************************
; ***  Bubble Software Parallax to PIC Source Converter. Copyright 1999.  ***
; ***  http://www.bubblesoftonline.com                 email: sales@picnpoke.com  ***
; ***************************************************************************
;
; POT
; This program shows a technique for reading resistance. The pot input pin can
; only be changed during assembly, not once the program is running.

P = pic16c55
#include <16c55.inc>   ; processor assembler definitions
_CONFIG _xt_osc & _wdt_off & _protect_off
reset start

org 8
temp Res d'1' 	; Temporary counter for delay.
potL Res d'1' 	; Low byte of Pot measurement.
potH Res d'1' 	; High byte of Pot measurement.
pot equ		;ra.0 Pin assigned to pot.
out_pot equd'0'	; Value to set ra.0 to output for pot.
in_pot equd'1'	; Value to set ra.0 to input for pot.

org 0
start        MOVLW out_pot              ; RA.0 to output.
TRIS 5h
MOVLW d'0'                 ; All outputs for LEDs.
TRIS 6h
BSF 5h,d'0'                ; Start charging cap.
MOVLW d'8'                 ; Set up for 6-ms delay: 8 trips
MOVWF potL
start_wait   DECFSZ temp                ; through outside loop x 256
GOTO start_wait
DECFSZ potL                ; x 3 cycles for inside loop = 6.1 ms.
GOTO start_wait
CLRF potL
CLRF potH
MOVLW in_pot               ; Get input from pot.
TRIS 5h
BCF 5h,d'0'                ; Clear output latch for pot bit.
start_loop   BTFSS 5h,d'0'              ; IF pot = 0 THEN :done
GOTO start_done
MOVLW out_pot              ; Discharge cap a little.
TRIS 5h
MOVLW in_pot               ; Change pot pin to input.
TRIS 5h
INCF potL                  ; Incerement potL.
BTFSC status,z             ; If zero then potL overfolowed, so
INCFSZ potH                ; increment potH. If it overflows, exit.
GOTO start_loop            ; Overflowed? No: loop.
start_done   MOVLW d'2'                 ; Divide 16-bit number represented by
MOVWF temp
start_div    BCF status,c               ; potH and potL by 2^temp (in this case,
RRF potH                   ; 2^2 or 4). This scales the pot value to
RRF potL                   ; fit within an 8-bit range.
DECFSZ temp
GOTO start_div
MOVF potL,w                ; Show the outcome on LEDs.
MOVWF 6h
GOTO start                 ; Do it again

end

```

```; POT
; This program shows a technique for reading resistance. The pot input pin can
; only be changed during assembly, not once the program is running.

device	pic16c55,xt_osc,wdt_off,protect_off
reset	start

org	8
temp	ds	1	; Temporary counter for delay.
potL	ds	1	; Low byte of Pot measurement.
potH	ds	1	; High byte of Pot measurement.
pot	=	ra.0	; Pin assigned to pot.
out_pot =	0	; Value to set ra.0 to output for pot.
in_pot	=	1	; Value to set ra.0 to input for pot.

org	0
start	mov	!ra,#out_pot	; RA.0 to output.
mov	!rb,#0		; All outputs for LEDs.
setb	pot		; Start charging cap.
mov	potL,#8 	; Set up for 6-ms delay: 8 trips
:wait	djnz	temp,:wait	; through outside loop x 256
djnz	potL,:wait	; x 3 cycles for inside loop = 6.1 ms.
clr	potL
clr	potH
mov	!ra,#in_pot	; Get input from pot.
clrb	pot		; Clear output latch for pot bit.
:loop	jnb	pot,:done	; IF pot = 0 THEN :done
mov	!ra,#out_pot	; Discharge cap a little.
mov	!ra,#in_pot	; Change pot pin to input.
inc	potL		; Incerement potL.
snz			; If zero then potL overfolowed, so
incsz	potH		; increment potH. If it overflows, exit.
jmp	:loop		; Overflowed? No: loop.
:done	mov	temp,#2 	; Divide 16-bit number represented by
:div	clc			; potH and potL by 2^temp (in this case,
rr	potH		; 2^2 or 4). This scales the pot value to
rr	potL		; fit within an 8-bit range.
djnz	temp,:div
mov	rb,potL 	; Show the outcome on LEDs.
jmp	start		; Do it again

```

 file: /Techref/microchip/seepicsrc/psbpix/pot.htm, 6KB, , updated: 2002/11/1 18:03, local time: 2017/12/17 15:47, TOP NEW HELP FIND:  54.82.112.193:LOG IN

 ©2017 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! /  microchip seepicsrc psbpix pot

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.

Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
 Did you find what you needed? "No. I'm looking for: " "No. Take me to the search page." "No. Take me to the top so I can drill down by catagory" "No. I'm willing to pay for help, please refer me to a qualified consultant" "No. But I'm interested. me at when this page is expanded."

 PICList 2017 contributors: o List host: MIT, Site host massmind.org, Top posters @20171217 RussellMc, Van Horn, David, Sean Breheny, James Cameron, alan.b.pearce, IVP, Neil, Bob Blick, David C Brown, John Gardner, * Page Editors: James Newton, David Cary, and YOU! * Roman Black of Black Robotics donates from sales of Linistep stepper controller kits. * Ashley Roll of Digital Nemesis donates from sales of RCL-1 RS232 to TTL converters. * Monthly Subscribers: Gregg Rew. on-going support is MOST appreciated! * Contributors: Richard Seriani, Sr.

.