Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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]
#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
}
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
}