View Full Version : AD7705B interface to the BS2pe24

Andy McLeod
01-22-2007, 09:38 AM
I have an application that will monitor pressure and temperature using the AD7705B ADC with the BS2pe. I have some code that was used with the 7706, but I can't seem to modify it successfully. Analog Devices provides a schematic to make this device, but is unfamiliar with the BS2, using instead some of their own microcontrollers as an example. Has anyone made this ADC work with the BS2/PBasic architecture?

Mohamed Refky
01-24-2007, 02:38 AM
I think the connection is similar to AD7730

Here is the connection between AD7730 & BS2:
AD7730··················· BS2
(SCLK) pin1--------pin12 (P7)···············CLOCK············
(DIN) pin22--------pin13 (P8)················AD data input
(DOUT) pin21------pin14 (P9)············· AD data output
(RDY) pin20 -------pin15 (P10)············ Input pin number
You have DRDY instead of RDY
RESET => +5v
CS····· · => GND

Andy McLeod
01-24-2007, 09:25 AM

Thank you for that pinout. I'll try it with the code I have and see what it gives me.

Andy McLeod
01-24-2007, 08:54 PM

Do you have code for the 7730 that you would share with me?


Andy McLeod
01-25-2007, 12:00 AM

Using your prompt, I've come up with this code. It appears to work, thank you for the prompting!

' {$STAMP BS2pe}
' {$PBASIC 2.5}
'AD7705 BS2
'(SCLK) PIN1---------PIN12 (P7) CLOCK
'(DIN) PIN14--------PIN11 (P6) ADC DATA INPUT
'(DRDY) PIN12--------PIN9 (P4) INPUT PIN number

sample VAR Word 'ADC reading
numsamples VAR Word 'Used to count samples in multiple instances
avg VAR Word(3) 'Temp variables for storing samples to be averaged

SCLK CON 7 'serial clock p7
DIN CON 5 'serial data in p5
DOUT CON 6 'serial data out p6
DRDY CON 4 'logic output p4

GOSUB initadc

avg = 0 ' Clear avg

'----------Take 3 samples, at 60Hz intervals, and store in avg(0),avg(1),avg(2)

FOR numsamples = 0 TO 2
GOSUB getsample
avg(numsamples) = sample

'----------Calculate approximate average, preventing overflow

DEBUG "Avg=",DEC avg(0),CR ' Display the average value by sending over serial port


SHIFTOUT 6,7,1,[%00100000] ' Configure a write to CLOCK register
SHIFTOUT 6,7,1,[%00001101] ' Master clock ENABLE, 4.9152 MHz config, 20 Samp/sec
SHIFTOUT 6,7,1,[%00010000] ' Configure a write to the SETUP register
SHIFTOUT 6,7,1,[%01000010] ' Self calibration, gain=1, bipolar buffered input

SHIFTOUT 6,7,0,[%00111000] ' Configure read from DATA register, 1st channel selected
SHIFTIN 5,7,0, [sample\16] ' Read in 16 bits, store in sample

Mohamed Refky
01-26-2007, 02:45 AM
Code for·AD7730

ADdata··· ·· var·· · WORD 'variable to hold 16 bit result.
DATAin···· con····· 2···········'AD data input pin.
DATAout· con·······3········· 'AD data output pin.
SCKL········· con····· 4········· 'clock to AD.
RDY·········· ·con····· 5········· 'RDY ·input .
SHIFTOUT DATAin, SCLK, MSBFIRST, [$FFFF\16,$FFFF\16] 'write 32 ones will reset the AD7730 to the default state
SHIFTOUT DATAin, SCLK, MSBFIRST, [$02] 'write to communication register setting next operation as write to mode register.
SHIFTOUT DATAin, SCLK, MSBFIRST, [$B0B0\16]'write to mode register initiating internal full scale calibration
pause 500
SHIFTOUT DATAin, SCLK, MSBFIRST, [$B0B0\16]'write to mode register initiating system zero scale calibration
pause 500
SHIFTOUT DATAin, SCLK, MSBFIRST, [$3080\16] 'write to mode register starting continuous conversion for 10mV input range,unipolar,16 bit data word and 5V reference.
SHIFTOUT DATAin, SCLK, MSBFIRST, [$21] 'write to communication register setting next operation as continuous read from data register.
LOW 2 ' set DIN line low to insure part is not reset while in continuous read mode.
IF RDY = 1 THEN waitRDY 'wait for RDY to go low to indicate output update.
SHIFTIN DATAout, SCLK, MSBPOST, [ADdata\16] 'read conversion result from data register.
DEBUG DEC ADdata, CR 'display data in decimal.
PAUSE 500 'wait 0.5 second between reading.
GOTO ReadData