Using the I2C Bus for Connecting the CMPS01/03 to the BX-24

Introduction
The compass module uses either a PWM output or the I2C bus for communications.
This example uses the I2C Bus. The SDA
(data) and SCL (clock) lines are connected to pins 13 and 14 on the BX-24 and a
push button for calibration connected to pin 15. These are arbitrarily chosen,
you can use any pins you choose to. As the BX-24 does not have any I2C commands,
the example provided here uses a combination of bit
bashing and the SHIFTIN and SHIFTOUT commands to construct the I2C functions.
The BX-24 internal 5v regulator is not suitable for powering much external
circuitry. I therefore recommend you use a separate 5v regulator.
Circuit Schematic for connecting the BX-24 to the CMPS01/CMPS03 Compass Module using the I2C bus
Note the switch connecting pin 15 on the BX-24 to Ground . This is all that is needed for calibration of Rev7 Firmware via the I2C bus. The following program contains the four lines of code needed to do this.
Software
The sample code below displays the compass bearing as Degrees (0-359) in a
Monitor window on the PC.
It can be downloaded here
| '*********************************************************** '** ** '** I2C Routines for the BX-24 ** '** to demonstrate the use of Compass module ** '** ** '** 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 Dim I2cAck As
Boolean '
Acknowledge flag Call PutPin(SCL, bxOutputHigh) Do ' The following four lines of code are all you need if you wish to
calibrate the compass ' 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 Compass Documentation Here as well as a small FAQ