Using the I2C Interface
I got caught by a couple of minor traps when using the I2C interface.
- The mbed interface has switched from 7-bit to 8-bit I2C addresses.
- You need pull-up resistors connecting the SCL and SCA lines to the positive supply rail.
I was misled about addressing by an out-of-date code example in the cookbook, which I've now corrected. I forgot about the pull-ups becasue you don't need them on anarduino; the wire library turns on internal pull-ups automatically.
In order to help me find the fault I used this test program:
#include "mbed.h"
I2C i2c(p9,p10);
DigitalOut led1(LED1);
const int addr = 0x40; // define the (8-bit) I2C Address for the PC
int write(char byteOut) {
char * cmd = new char[1];
cmd[0] = byteOut;
return i2c.write(addr, cmd, 1);
}
int main() {
while (1) {
/* now flash on-bosrd LED1 if the write to I2C works
This confirms that you've got the right address
and that you remembered the pull-up resistors on SCL/SDA :) */
if (0 == write(0xff)) {
led1 = 1;
wait(0.2);
led1 = 0;
}
write(0);
wait(0.2);
}
}
There is a PCF8574 library which is simpler to use, but won't help you fault-find. However, you can check that I2C is working and find all address of the I2C slaves on yur bus by using Simon Ford's I2CU utility.
0 comments
You need to log in to post a comment
