El Bus I2C, con ejemplo de DS1307

Aprovechando que estamos con el software del nuevo riegamatico, y que estoy con el tema, ahi van unas clases de bus I2C por si le sirven a alguien. Esta bien porque para pequeños proyectos con Arduino permite hacer cosas con gran variedad de sensores y perifericos de muchos otros tipos de forma sencilla.

Cómo funciona el bus I2C explican un poco aquí. Básicamente es que los Dispositivos I2C (sensores de mil tipos, voltímetros, memorias, LCD y displays, relojes, dispositivos de audio y video, drivers para leds, … ) digamos que son como miniordenadores. Van alimentados por 5v o 3.3V generalmente (2 cables), y se comunican por otros 2 cables de datos que los recorren a todos a forma de red. La distancia máxima de este cable puede ser hasta 8 – 10m según dicen, dependiendo de lo bien que pongamos los cables y la velocidad de datos, pero para leer sensores se suele hacer una vez por segundo o menos aun, y eso es poco (velocidades altas con memorias por ejemplo igual si  …). Aun así se puede extender esa distancia con circuitos electrónicos que mejoran y repiten las señales  ( hay hasta quien dice por ahí que ha llegado a una milla con I2C y todo ). Esta bien …

Dos micros (arduinos por ejemplo), y unos conversores Analogico digital y viceversa comunicados por I2C

 

Incluso en muchos multicopteros, el procesador controla los motores por I2C, enviando a cada motor, que tiene una dirección diferente en el bus, a que velocidad tiene que girar. Y se la envía 400 veces por segundo a cada uno en el caso de mi hexa.

Controladora I2C de motor Brushless de Multocoptero

 

Cada tipo de “cacharrillo” I2C tiene su forma de trabajar, pero no suele ser muy dificil. Todo depende de como lo hayan diseñado. Tendrá una o incluso varias direcciones en el bus. En algunos dispositivos esta dirección se puede programar, generalmente dentro de un rango, para poder tener varios del mismo tipo en el mismo bus. Otros no se puede cambiar y todos vienen de fabrica con la misma, porque están pensados mas para estar con dispositivos de otro tipo y no muchos del mismo, y así al no ser programable la dirección son mas baratos …

La mejor forma de entender un poco y poder hacer pruebillas es con un ejemplo. En el riegamatico, que estoy en plena renovación, tengo yo un reloj real I2C y un display de 2 lineas tambien I2C.

Display LCD y Reloj I2C. Se ven los pines de Alimentacion y lineas SDA (SerialDAta) y SCL (SerialCLock) del BUS

 

Realmente el funcionamiento interno del bus I2C y como viajan los datos no necesitamos saber mucho. Solo que nos suene en principio. Tenemos una libreria en arduino, con 10 funciones, que nos hace muy fácil enviar y leer datos de los cacharrillos I2C.

En la siguiente pagina veremos un ejemplo de comunicacion con el reloj I2C DS1307.