PICAXE 18M2 test board
Fig. 1 Schematic to my home built test board minus I/O resistors.

AD5220 Digital Potentiometer and 18M2 PICAXE Microcontroller

by Lewis Loflin

The purpose of this demo is to connect the AD5220B digital potentiometer to the PICAXE micro-controller. This will introduce several PICAXE commands in a practical demonstration. The AD5220 can found at www.parallax.com.

Functional block diagram AD5220
Fig. 2

Fig. 2 shows the internal functional parts within the AD5220chip.
PICAXE connections to AD5220
Fig. 3

Fig. 3 shows the actual electrical connections. C.6 is electrical pin 15 and C.7 is electrical pin 16 on the PICAXE. R2 can be between 4.7k and 10k, Q1 any general purpose NPN transistor.

two switches
Fig. 4

Ignore the SW1 designation from figure 1. SW1 is connected to electrical pin 7 and SW2 is connected to electrical pin 10 on the PICAXE. Both SW1/SW2 are normally-open push button switches.

Begin Program Code


AD5220B10 demo to control intensity of LED by 
pressing two switches.

The AD5220 is 128 position single channel digital potentiometer.
R = 10k

Pin layout:

    CLk|1    8|Vcc
    U/D|      |CS
     A1|      |B1
    GND|4    5|W1
1. serial clock input negative edge triggered
2. U/D HIGH is up, LOW is down
3. Pot terminal A1 connect to Vcc   
4. GND
5. Pot wiper connected to LED via external transistor
6. Pot terminal B1 connect to GND
7. CS active LOW connect to GND
8. +5 volts

'HIGH' in the electrical sense is 5-volt 
; 'LOW' switch to ground. 

Page references pertain to PICAXE Manual 2 Basic Commands


#picaxe 18M2 ; type chip used

symbol CLK = C.6 
symbol UD = C.7 ; up/down control 
symbol SW1 = B.1 ; active LOW when pressed
symbol SW2 = B.4 ; active LOW when pressed

;SW1 and SW2 could be pulled HIGH via two 4.7k resistors
; Note: will use internal pullups, 
; which only works on PORT B 18M2 parts:
; see page 159
pullup on ; enable pullups
pullup %00010010; enable pullups on portB B.1 and B.4  

symbol val = b0 ; user variable
;BUTTON  pin, downstate, delay, rate, 
; bytevariable, targetstate ,subroutine
; setup 'button' command see page 40 
symbol delay = 200
symbol downstate = 0
symbol rate = 100
symbol targetstate = 1

HIGH CLK ; initialize to HIGH

; go to 'UP' routine
button SW1,downstate,delay,rate,val,targetstate,UP 
; go to 'DN' routine
button SW2,downstate,delay,rate,val,targetstate,DN

pause 200
goto main

UP: ; LED brightens
pulsout CLK, 200
pause 100
goto main 

DN: ; LED dims
pulsout CLK, 200
pause 100
goto main 

Picaxe Micro-controller Projects!


See How I got into Electronics