Connecting Multiple SRF08 Sonar Modules to the BX-24

Introduction
The SRF08 modules use the I2C bus for
communication. This example shows how to connect two SRF08's to the BX-24,
however it is expandable to up 16 SRF08's on the I2C bus. The SDA (data) and SCL (clock) lines are connected to
pins 13 and 14 on the BX-24. The BX-24 does not have I2C communication, so the example provided
here uses a combination of bit bashing and the SHIFTIN and SHIFTOUT commands
instead.
The BX-24 internal 5v regulator is not suitable for powering much external
circuitry. I therefore recommend you use a separate 5v regulator as shown
below..
Circuit Schematic for connecting two SRF08 Sonar Modules to the BX-24
The schematic above shows 1k8 pull-up resistors on the SCL and SDA lines to Vdd. This is for good noise immunity, however any value up to 4k7 should be OK.
Changing the SRF08 I2C Address
Before you can use the SRF08's you will need to re-program their I2C
addresses from the default address of 0xE0 they are supplied with. The program below will do this. Make sure you only have one SRF08 connected when you
do this. You only have to change the SRF08_NEW_ADDRESS constant in the program below to the address you want. For
example if you want the SRF08 to be at hex address 0xF2, then change
SRF08_NEW_ADDRESS to
read;
Const SRF08_NEW_ADDRESS As Byte = $Hf2 ' Place new address
for SRF08 here
Now download the program to the BX-24, you will see rapid brief flashes on the
Red Led on the SRF08 indicating that the change of address was successful. If
you set your Monitor port on the PC, you will see the LDR and first range
displayed on screen. It is
wise to make a note of the new address on the SRF08 itself. It is easy to
forget which is which otherwise.
To use the example
code described later on this page, set one SRF08 to address 0xE0 and the other
to 0xE2. The following program can be downloaded here.
'*********************************************************** '** ** '** I2C Routines for the Basic BX-24 ** '** to change the I2C address of the SRF08 ** '** ** '** Copyright 2002 - Devantech Ltd ** '** Commercial use of this software is prohibited ** '** Private and educational use only is permitted ** '** ** '** Written by Gerald Coe - February 2002 ** '** ** '*********************************************************** Const SRF08_NEW_ADDRESS As Byte =
&He0 '
Place new address for SRF08 here Const SCL As Byte =
14
' I2C clock - choose any pins you wish for SCL and SDA Const GB As Byte =
0
' I2C General Broadcast address Dim I2cAck As
Boolean
' Acknowledge flag Sub Main() Call PutPin(SCL, bxOutputHigh) Call
Delay(1.0)
' Delay just to be sure SRF08 is out of reset ' That's the address changed, now perform SRF08
Ranging in an endless loop at the new address '-------------------------------------------------------------------------------------------- ' writes I2cData to I2cReg at I2cAddr Function I2CByteRead(ByVal I2cAddr As Byte, ByVal
I2cReg As Byte) As Byte Function I2CWordRead(ByVal I2cAddr As Byte, ByVal
I2cReg As Byte) As UnsignedInteger Sub I2cOutByte(I2cData As Byte) Function I2cInByte() As Byte Sub
I2cStart()
' I2C start bit sequence Sub
I2cStop()
' I2C stop bit sequence
|
Displaying Light Sensor and Range readings in a PC Debug window
Now that you have your SRF08's re-programmed to their new I2C addresses
(0xE0 and 0xE2) the following sample code will display the light sensor
reading and the 1st range reading, for each SRF08 in the monitor port window on the PC
.
The sample code below can be downloaded here.
| '*********************************************************** '** ** '** I2C Routines for the BX-24 ** '** to demonstrate the use of multiple SRF08's ** '** ** '** Copyright 2002 - Devantech Ltd ** '** Commercial use of this software is prohibited ** '** Private and educational use only is permitted ** '** ** '** Written by Gerald Coe - February 2002 ** '** ** '*********************************************************** Const SCL As Byte =
14
' I2C clock - choose any pins you wish for SCL and SDA Const CmdReg As Byte =
0
' SRF08 command register ' Note that SRF08's must have been previously set
to these addresses Dim I2cAck As
Boolean
' Acknowledge flag Sub Main() Call PutPin(SCL, bxOutputHigh) Do ' 2nd SRF08 Ranger debug.Print "LDR1 =
"; CStr(Ldr1); ", Range1 = "; CStr(Range1); _ '-------------------------------------------------------------------------------------------- ' writes I2cData to I2cReg at I2cAddr Function I2CByteRead(ByVal I2cAddr As Byte, ByVal
I2cReg As Byte) As Byte Function I2CWordRead(ByVal I2cAddr As Byte, ByVal
I2cReg As Byte) As UnsignedInteger Sub I2cOutByte(I2cData As Byte) Function I2cInByte() As Byte Sub
I2cStart()
' I2C start bit sequence Sub
I2cStop()
' I2C stop bit sequence |
You can find more information on the SRF08 here