Você está na página 1de 3

Protocolo I2C y Arduino

20 noviembre, 2013 pruebas 2 comentarios

El protocolo I2C, define las reglas de como podemos conectar diferentes dispositivos entre
si, desarrollado por Philips en la dcada de los 80/90, convirtindose en la actualidad como
un estndar. I2C crea un bus de comunicacin entre los diferentes dispositivos en serie, esto
nos permite conectar hasta 1000 dispositivos uno detrs de otro. La comunicacin siempre
se realizara entre dos dispositivos, uno actuara de maestro, este es el que trasmitir la seal
para sincronizar la transferencia de datos, y el otro de esclavo. El que hace de maestro, no
tiene por que hacer esta funcin siempre, puede ir pasndose de uno a otro, aunque no todos
los perifricos tienen esta funcionalidad, estn diseados para ser siempre esclavos.

Para identificar que perifrico a enviado la informacin, cada uno de ellos tiene una
direccin nica, igual que una red de ordenadores donde cada ordenador tiene sus propia
direccin.

El bus I2C consta de 3 lineas, SDA ( datos), SCL (reloj) y GND (masa)

SDA: Es la linea por donde circulan los datos, formateada de la siguiente forma:
| start | A7 A6 A5 A4 A3 A2 A1 R/W | ACK | DATA | ACK | stop | idle |
SCL: Por esta linea va la seal para sincronizar las transferencias de datos.
GND o masa: Se utiliza como referencia de voltaje para el calculo de las otras
lineas.

I2C y Arduino

Arduino cuenta la posibilidad de poder manejar comunicaciones I2C. Segn el modelo de


Arduino que tengamos, los pines de SDA y SCL, varan, En el caso del Arduino UNO los
pines son: para SDA es el pin A4, y el SCL es el pin A5, para el LEONARD estos vienen
marcados como tales, y en caso de MEGA el pin para el SDA es el pin digital 20 y para
SCL es el pin digital 21.

[singlepic id=31 w=480 h=480 float=center]

Para el manejo de comunicaciones I2C en Arduino debemos importar la librera Wire.h


ha nuestro programa. Esta librera esta incluida con las bsicas que trae el programa de
Arduino.

Ejemplo con dos Arduinos

Ejemplo de como podemos unir dos Arduinos a travs de una comunicacin I2C. Uno de
los Arduinos sera el maestro y el otro el esclavo.

Esquema de conexionado
[singlepic id=32 w=480 h=480 float=center]

Cdigo fuente para el Arduino maestro:

#include <Wire.h>

1 void setup()
2 {
3 Wire.begin(); // Iniciamos la comunicacin I2C, en el maestro la direccion no
4 es obligatoria
5 Serial.begin(9600); // Iniciamos la comunicacion por el puerto serie para mostrar
6 los datos
7
8 }
9
10 void loop()
11 {
12 Wire.requestFrom(1, 12); // Manda una peticion al escaldo numero 2 de 6 bytes
13
14 while(Wire.available()) // Miestras tengamos datos en el buffer seguimos leyendo
15 {
16 char Datos = Wire.read(); // Leemos un byte y lo pasamos a una variable de tipo
17 char
18 Serial.print(Datos); // Lo mostramos en el puerto serie
19 }
20
21 delay(60000); // Esperamos 1 minuto para volver a pedir informacin al
esclavo
}

Cdigo para el Arduino que hace las funciones de esclavo

1 #include <Wire.h>
2
3 void setup()
4 {
5 Wire.begin(1); // Nos aadimos al bus como esclavo, con la direccion 1
6 Wire.onRequest(requestEvent); // Registro de eventos
7 }
8
9 void loop()
10 {
11 delay(100); // retraso de 100 milisegundos
12 }
13
14 // Funcion que se ejecuta cuando recibe una peticion desde el maestro
15
16 void requestEvent()
17 {
18 Wire.write("Hola maestro"); // Responde a la peticion del maestro de enviarle 12
19 bytes
}