Anda di halaman 1dari 4

Creado

por David lvarez para tallerarduino.worpress.com

Cap 6. Comunicacin I2C.


Que es un bus I2C? El bus I2C, es un protocolo de comunicacin serie. Su estructura de conexin es muy simple ya que con tan solo dos cables podemos conectar multitud de sensores, controladores o actuadores (en funcin de la red que queramos construir) hasta llegar al lmite de 400pF. Como funciona el bus I2C? El bus tiene las siguientes caractersticas: Requiere dos lneas de comunicacin, por un lado SDA (Signal Data) y por otro lado SCL (Signal Clock). Las dos lneas son bidireccionales. Ambas lneas de comunicacin deben tener conectadas una resistencia pull- up de 10K. stas se conectan para provocar que en el momento que no exista comunicacin alguna entre los dispositivos que conformen la red, las lneas se encuentren a nivel alto (5V). Ambas lneas de comunicacin son las que transportan la informacin a los dispositivos que conforman la red, estos datos estn formados por palabras de 8 bits. El protocolo de comunicacin es Master-Slave. Est permitida la conexin de varios masters. Todos los dispositivos conectados pueden ser Master o Slave. Cada uno de los dispositivos conectados disponen de un cdigo propio para ser reconocido por el resto de dispositivos, por lo que en el momento de iniciar la comunicacin, el dispositivo que quiera comunicarse con otro, deber hacerlo mediante la direccin del dispositivo destinatario.

Bajo licencia creative commons

Creado por David lvarez para tallerarduino.worpress.com

Como funciona la comunicacin? La transmisin bidireccional serie se puede realizar a dos velocidades, el modo ms comn de funcionamiento es el estndar de 100kbit/s. Esta velocidad tambin puede llegar a 400Kbit/s en modo rpido o 3.4Mbit/s para aplicaciones industriales. Una vez montada la red tendr una apariencia como la de la figura 1. En esta imgen podemos observar ambas resistencias de pull-up en las dos lneas de comunicacin y la conexin de los diversos dispositivos.


figura 1 Esquema de comunicacin I2C.

Dicha figura, muestra un momento dnde el uC de la derecha est funcionando como Master, es decir, estara enviando un mensaje a uno de los otros dispositivos. El Master, tal y como se ha comentado anteriormente, es el dispositivo emisor, es decir, es el que decide a quien y el que enviar. Cuando el Master inicia la transferencia de informacin hacia el Slave, genera la seal de Clock, es decir, tal y como observamos en la figura 2, enviaremos la informacin y unos microsegundos despus generamos la seal de Clock (SCL).

figura 2 Trama de comunicacin I2C. Bajo licencia creative commons

Creado por David lvarez para tallerarduino.worpress.com

Ejemplos prcticos. 1 Comunicacin con un sensor de temperatura TC74A0. En este primer ejemplo vamos a trabajar con un sensor de temperatura I2C como el que podemos observar en la figura 3.


figura 3 Pineado del sensor.

Tal y como hemos comentado anteriormente, cada dispositivo debe tener un cdigo propio para ser reconocido dentro de la red. Este tipo de sensores, tal y como observamos en la figura 4, disponen de un nmero de comunicacin que viene indicado en su datasheet.


figura 4 Direccin del sensor.

Como vemos, en funcin de la nomenclatura del sensor el cdigo vara y es nico para cada modelo. As que para el modelo TC74A0 el nmero de comunicacin ser el 72 o 0100 1000 y para el modelo TC74A5 el nmero ser el 77 o 0100 1101.
NOTA: Se nombra el modelo de sensor TC74A5 porque este se utilizar junto al TC74A0 en el segundo ejemplo.

Bajo licencia creative commons

Creado por David lvarez para tallerarduino.worpress.com

Una vez identificadas las ids por los que podremos localizar a los sensores de temperatura, debemos localizar los pins del Atmega con los que construiremos las vas de comunicacin I2C. En este tutorial utilizaremos para la realizacin de la totalidad de los ejemplos dos placas de Arduino, la Arduino UNO y la Arduino MEGA. Tal y como observaremos en los esquemas realizados con Fritzing, los pines de comunicacin son: Arduino UNO. SDA = A4 Arduino MEGA. SDA = 20 SCL = A5 SCL = 21

2 Comunicacin con una red de sensores de temperatura TC74A0 y TC74A5. Este ejemplo ser prcticamente igual al anterior. Tal y como hemos indicado en la figura 4, deberemos aadir el cdigo del nuevo sensor (TC74A5) en la programacin a ms a ms de incorporarlo en nuestra red de comunicacin. 3 Comunicacin entre Arduino UNO y Arduino MEGA. En el ltimo ejemplo, vamos a realizar una comunicacin entre dos Arduinos. Vamos a comunicar un Arduino UNO y un Arduino MEGA. Para ello, necesitaremos realizar dos cdigos de programacin diferentes. Un cdigo para Arduino UNO, el cual funcionar como MASTER, y otro cdigo para el Arduino MEGA, el cual actuar de SLAVE.

Bajo licencia creative commons