I2C maestro

Dependencies:   mbed

Committer:
jangelgm
Date:
Tue Mar 07 11:35:15 2017 +0000
Revision:
0:b90c11323d98
I2C maestro

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jangelgm 0:b90c11323d98 1 /*Program Example 7.5: I2C Master, transfers switch state to second mbed acting as
jangelgm 0:b90c11323d98 2 slave, and displays state of slave’s switches on its leds.
jangelgm 0:b90c11323d98 3 */
jangelgm 0:b90c11323d98 4 #include "mbed.h"
jangelgm 0:b90c11323d98 5 I2C i2c_port(p9, p10); //Configure a serial port, pins 9 and 10 are sda, scl
jangelgm 0:b90c11323d98 6
jangelgm 0:b90c11323d98 7 DigitalOut red_led(p25); //red led
jangelgm 0:b90c11323d98 8 DigitalOut green_led(p26); //green led
jangelgm 0:b90c11323d98 9 DigitalIn switch_ip1(p5); //input switch
jangelgm 0:b90c11323d98 10 DigitalIn switch_ip2(p6);
jangelgm 0:b90c11323d98 11
jangelgm 0:b90c11323d98 12 char switch_word ; //word we will send
jangelgm 0:b90c11323d98 13 char recd_val; //value received from slave
jangelgm 0:b90c11323d98 14
jangelgm 0:b90c11323d98 15 const int addr = 0x52; //the I2C slave address, an arbitrary even number <-- ojo con esto
jangelgm 0:b90c11323d98 16
jangelgm 0:b90c11323d98 17 int main()
jangelgm 0:b90c11323d98 18 {
jangelgm 0:b90c11323d98 19 while(1) {
jangelgm 0:b90c11323d98 20 switch_word=0xa0; //set up a recognizable output pattern
jangelgm 0:b90c11323d98 21 if (switch_ip1==1)
jangelgm 0:b90c11323d98 22 switch_word=switch_word | 0x01; //OR in lsb
jangelgm 0:b90c11323d98 23 if (switch_ip2==1)
jangelgm 0:b90c11323d98 24 switch_word=switch_word | 0x02; //OR in next lsb
jangelgm 0:b90c11323d98 25
jangelgm 0:b90c11323d98 26 //send a single byte of data, in correct I2C package
jangelgm 0:b90c11323d98 27 i2c_port.start(); //force a start condition
jangelgm 0:b90c11323d98 28 i2c_port.write(addr); //send the address
jangelgm 0:b90c11323d98 29 i2c_port.write(switch_word); //send one byte of data, ie switch_word
jangelgm 0:b90c11323d98 30 i2c_port.stop(); //force a stop condition
jangelgm 0:b90c11323d98 31 wait(0.002);
jangelgm 0:b90c11323d98 32
jangelgm 0:b90c11323d98 33 //receive a single byte of data, in correct I2C package
jangelgm 0:b90c11323d98 34 i2c_port.start();
jangelgm 0:b90c11323d98 35 i2c_port.write(addr | 0x01); //send address, with R/W bit set to Read <-- ojo con esto
jangelgm 0:b90c11323d98 36 recd_val=i2c_port.read(addr); //Read and save the received byte
jangelgm 0:b90c11323d98 37 i2c_port.stop(); //force a stop condition
jangelgm 0:b90c11323d98 38
jangelgm 0:b90c11323d98 39 //set leds according to incoming word from slave
jangelgm 0:b90c11323d98 40 red_led=0; //preset both to 0
jangelgm 0:b90c11323d98 41 green_led=0;
jangelgm 0:b90c11323d98 42 recd_val=recd_val&0x03; //AND out unwanted bits
jangelgm 0:b90c11323d98 43 if (recd_val==1)
jangelgm 0:b90c11323d98 44 red_led=1;
jangelgm 0:b90c11323d98 45 if (recd_val==2)
jangelgm 0:b90c11323d98 46 green_led=1;
jangelgm 0:b90c11323d98 47 if (recd_val==3){
jangelgm 0:b90c11323d98 48 red_led=1;
jangelgm 0:b90c11323d98 49 green_led=1;
jangelgm 0:b90c11323d98 50 }
jangelgm 0:b90c11323d98 51 }
jangelgm 0:b90c11323d98 52 }