El I2C es un bus usado para interconectar circuitos integrados de una manera simple y sencilla. Este bus esta presente en una gran cantidad de equipos electrónicos como televisores, celulares, equipos industriales y también esta presente en la tarjeta microbit. en este apartado estudiaremos este bus y como programarlo para utilizarlo en proyectos.

 


 

 

 

La sigla I2C proviene de frase: Inter Integrated Circuits, el cual es un bus usado para conectar circuitos integrados. De esta manera podemos conectar memorias, microcontroladores, periféricos de entra y salida, relojes de tempo real (RTC), displays, conversores análogos para digital, etc, a un solo bus. El bus I2C está formado por una línea de clock, llamada SCL, una línea de datos, llamada SDA, como mostrado en la siguiente figura:

 

 


 

 

 

El bus I2C también se conoce con las siglas IIC de: “Inter Integrated Circuit” o con las siglas TWI de: “Two Wire Interface”. Es necesario entender algunos conceptos básicos para poder usar el bus I2C, como, por ejemplo:

• Maestro.

• Esclavo.

• Inicio.

• Parada.

• Dirección.

• Bit de reconocimiento.

 

En el bus I2C, el circuito que controla los pulsos de reloj, es decir la línea SCL, es llamado: maestro y los demás circuitos son llamados: esclavos. También, es posible interconectar otros microcontroladores, porque el bus I2C, es un bus multi maestro es decir que puede ser controlado por varios maestros, gracias a su sistema de arbitración, el cual asegura que, si más de un microcontrolador intenta simultáneamente controlar el bus, solamente un microcontrolador lo consigue y el otro espera hasta que el bus es liberado para hacer las transferencias de datos.

 

Las líneas SDA y SCL, están conectadas a una fuente de voltaje positivo a través de resistencias pull-up como muestra la siguiente imagen:

 

 


 

 

 

Cuando el bus esta libre, las líneas SDA y SCL son altas (HIGH). Todas las transferencias de datos comienzan con una condición de “inicio” (START) y terminan con una condición de “parada” (STOP), como se muestra en la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

Una transición de alto para bajo de la línea SDA, mientras la línea SCL permanece en alto es definida como una condición de “inicio”. Una transición de bajo para alto, mientras la línea SCL permanece en alto, es definida como una condición de “parada”.

 

Todas las condiciones de inicio y parada son generadas por el maestro. Se considera que el bus I2C está ocupado, después de una condición de inicio. Se considera que el bus I2C está libre, después de una condición de parada.

 

Las transferencias de datos son de 8 bit, y el circuito integrado que recibe la información debe responder con un bit de reconocimiento (A) como se muestra en la siguiente figura:

 

 


 

 

 

Para iniciar una transferencia de escritura, el maestro inicia el bus con una condición de inicio (S). Luego envía un byte con la dirección del circuito integrado esclavo con el que se quiere comunicar. La dirección es de 7 bits, el otro bit es usado para indicar si la operación es de escritura o lectura (R/W). Como esta operación es de escritura, este bit será colocado a nivel bajo (0 Lógico), como se muestra en la siguiente imagen:

 

 


 

 

 

Después el circuito integrado esclavo retorna un bit de reconocimiento (A), y así el maestro comienza a enviar datos, hasta que finaliza con una condición de parada.

 

La siguiente es una transferencia de lectura. En este caso el bit R/W, se coloca a nivel alto, indicando que es una transferencia de lectura. Esto se puede observar en la siguiente imagen:

 


 

 

 

La mayoría de las familias de microcontroladores tienen un bus I2C para hacer comunicaciones con otros circuitos integrados.

 

 

 

BLOQUES PARA CONTROLAR EL BUS I2C EN LA TARJETA MICROBIT.

 

Básicamente hay dos bloques para controlar el bus I2C. Uno es usado para escribir datos en los periféricos y el otro es usado para leer datos desde los periféricos, como se muestra en la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

Para encontrar los bloques del bus I2C, vaya al menú: “Avanzado” y seleccione el menú: “Pines … más”, como mostrado en la siguiente imagen:

 

 


 

 

 

Cuando usamos los bloques I2C, usamos un parámetro llamado: “of format”. Esto es el tipo de formato de los datos que se desean escribir o leer en el bus I2C. Los mas utilizados son los de un byte (8 bits), los cuales pueden ser con signo y sin signo. Aunque también puede usarse datos de 2 y 4 bytes como mostrado en la siguiente imagen:

 

 


 

 

 

Las letras finales de cada formato (LE y BE) vienen de la manera como se almacenan los bytes en la memoria. “LE” viene de: “little endian” y significa que el byte más bajo de un número se almacena primero en la memoria. “BE” viene de: “big endian” y significa que el byte más alto se almacena primero en memoria. Para los datos con formato de 8 bit, lo anterior no tiene relevancia, pues esto solo se aplica para datos con 2 bytes (16 bits) y 4 bytes (32 bits).

 

Los bloques vistos anteriormente para controlar el bus I2C, normalmente suelen usarse poco, pues la mayoría de los módulos y adaptadores que usan el bus I2C tienen sus propias “librerías” que ya vienen con todas las funcionalidades listas, evitando que el programador pierda tiempo programando con estos bloques. Mas adelante en este texto, vamos a usar un adaptador I2C para controlar un display de cristal líquido (LCD) y ahí se pone en práctica lo dicho anteriormente.

 

 

 

PINES DEL BUS I2C EN LA TARJETA MICROBIT.

 

La tarjeta microbit tiene 25 conectores en el borde como muestra la siguiente imagen:

 

 


 

 

 

Como podemos notar hay 5 pines grandes llamados: P0, P1, P2, 3V y GND. También, hay 20 pines pequeños. Observe que para el bus I2C usamos los pines pequeños P19 y P20 como se muestra en la siguiente imagen:

 

 


 

 

 

Para facilitar la conexión de estos pines a los componentes externos, podemos usar tarjetas de expansión como las mostradas en la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

 

 

ADATADOR I2C PARA DISPLAY LCD.

 

Con el fin de utilizar el bus I2C, vamos a conectar un display de cristal líquido (LCD) a la tarjeta microbit. El adaptador I2C para LCD permiten conectar un display de cristal líquido usando los los pines SDA y SCL del bus I2C. La dirección I2C del adaptador, es por defecto 0x3F (63 en decimal) o 0x27 (39 en decimal). La siguiente figura muestra un modelo de este adaptador.

 


 

 

 

Es posible controlar pantallas LCD de 16x2 o 16x4 caracteres. Es necesario soldar el módulo adaptador al LCD como muestra la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

El potenciómetro que se observa en el módulo sirve para controlar el contraste de los dígitos del display LCD. Gire este potenciómetro hasta alcanzar el contraste deseado. El jumper presente en el adaptador sirve para controlar la luz LED de fondo del LCD. Para encender la luz de fondo es necesario que el jumper este colocado entre los pines LED del adaptador. Caso no quiera la luz de fondo, puede remover el jumper. También, es posible controlar la luz de fondo por software.

 

La siguiente imagen muestra como conectar el adaptador I2C al modulo expansor de la tarjeta microbit:

 

 


| Clique na imagem para ampliar |

 

 

 

Tenga en cuenta que la mayoría de los módulos expansores para microbit son alimentados con una fuente externa de 6 a 12 voltios. Para alimentar el Adaptador I2C para LCD, en necesario usar un voltaje regulado de 5 VCC que normalmente está presente en el módulo expansor.

 

 

 

BLOQUES DE PROGRAMACION PARA EL ADAPTADOR I2C PARA LCD.

 

 

Para usar los bloques que nos permitirán controlar el LCD, seleccione el menú: “Extensiones”, como mostrado en la siguiente imagen.

 

 


 

 

 

Aparecerá una página como la mostrada en la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

En la caja de texto, digite: “i2c lcd” y aparecerá una página similar a la mostrada en la siguiente imagen:

 

 


| Clique na imagem para ampliar |

 

 

Seleccione el módulo: “i2cLCD1602”. Ahora, es posible ver el menú: “I2C_LCD1602”, como mostrado en la siguiente imagen:

 

 


 

 

 

Este menú contiene bloques para controlar el display LCD, las cuales podemos observar en la siguiente imagen:

 

 


 

 

 

A continuación, explicaremos los bloques usados para controlar el I2C_LCD.

 

El siguiente bloque:

 

 


 

 

 

Inicializa el LCD y le asigna una dirección en el bus I2C.

 

El bloque: “show string”, muestra una cadena de texto en la posición “x,y” del LCD. Este bloque es mostrado en la siguiente imagen:

 

 


 

 

 

El bloque: “show number”, muestra un numero en la posición “x,y” del LCD. Este bloque es mostrado en la siguiente imagen:

 

 


 

 

 

El bloque: “clear LCD”, borra todo el contenido de la pantalla. Este bloque es mostrado en la siguiente imagen:

 

 


 

 

 

El bloque: “turn on LCD”:

 

 

 enciende la pantalla de cristal líquido.
enciende la pantalla de cristal líquido.

 

 

El bloque: “turn off LCD”:

 

 

 apaga la pantalla de cristal líquido.
apaga la pantalla de cristal líquido.

 

 

El bloque: “turn on backlight”:

 

 

 enciende la luz de fondo de la pantalla LCD.
enciende la luz de fondo de la pantalla LCD.

 

 

 

El bloque: “turn off backlight”:

 

 

 apaga la luz de fondo de la pantalla LCD.
apaga la luz de fondo de la pantalla LCD.

 

 

El bloque: “shift Left”:

 

 

desplaza a la izquierda el contenido del LCD.
desplaza a la izquierda el contenido del LCD.

 

 

El bloque: “shift Right”:

 

 

desplaza a la derecha el contenido del LCD.
desplaza a la derecha el contenido del LCD.

 

 

El siguiente es un ejemplo, donde se muestra el uso de los bloques vistos anteriormente:

 

 


 

 

 

El programa comienza asignando una dirección I2C al LCD. Después, apaga la luz de fondo de la pantalla. Después, retarda por 2 segundos el programa. Entonces enciende la luz de fondo de la pantalla y, por último, muestra la palabra: “Hello” en la primera posición del LCD, como se muestra en la siguiente imagen:

 

 


 

 

 

 

 

LECTURA DE TEMPERATURA DE LA TARJETA MICROBIT.

 

 

La tarjeta microbit tiene incorporado un sensor de temperatura, el cual se puede usar para indicar la temperatura ambiente. El siguiente programa lee la temperatura y la muestra en el display LCD:

 

 


 

 

 

La siguiente imagen muestra los caracteres en el LCD:

 

 


 

 

 

El bloque usado para leer la temperatura lo puede encontrar en el menú: “Entrada”, como visto en la siguiente imagen:

 

 


 

 

 

En la siguiente sección de este texto vamos a usar la entrada: “nivel de luz”, la cual se encuentra en el mismo menú.

 

 

 

LECTURA DEL NIVEL DE LUZ CON LA TARJETA MICROBIT.

 

 

 

La tarjeta microbit puede leer el nivel de luminosidad del ambiente. Los LEDs de la matriz de display 5x5, además de funcionar como salida también pueden funcionar como sensor de luz, midiendo la cantidad de luz que cae sobre ellos. Con esta funcionalidad, se pueden hacer interesantes proyectos. El siguiente programa lee el nivel de luz y lo muestra en el display LCD:

 

 


 

 

 

La siguiente imagen muestra los caracteres en el LCD:

 

 


 

 

 

Como visto es muy fácil programar el LCD conectado al bus I2C. Existen una gran variedad de circuitos y módulos que pueden ser conectados al bus I2C, pero todos siguen los mismos principios vistos en este texto.

 

 

 

Buscador de Datasheets



N° de Componente