bus de comunicacion i2c con arduino creatividad codificada

Bus de comunicaci贸n I2C en Arduino

Arduino

Este bus de comunicaci贸n I2C (Inter Integrated circuits) que usan en Arduino fue dise帽ado por los ingenieros de Philips en los a帽os 80 para simplificar 茅l envi贸 de datos entre dispositivos que soportan este protocolo de comunicaci贸n, adem谩s de poder tener varios maestros y esclavos conectados entre s铆 al mismo tiempo.

Para iniciar la comunicaci贸n entre dispositivos siempre la debe iniciar el maestro y no el esclavo, adem谩s este tipo de comunicaci贸n es s铆ncrona y half d煤plex.

El bus I2C en Arduino necesitamos generar dos se帽ales, una se帽al es usada por los pulsos de reloj para sincronizar los cambios de flancos de bajada y subida, y la otra se帽al es usada para el intercambio de datos.

Se帽ales usadas por el bus de comunicaci贸n I2C / TWI en Arduino

Como ya mencionamos este tipo de comunicaci贸n solo requiere dos se帽ales, el SCL y SDA, esto lo hace muy f谩cil de implementar para nuestros proyectos.

SCL (Serial Clock Line).- Usada para determinar la frecuencia de reloj.

SDA (Serial Data Line).-  Con esta l铆nea de se帽al podemos intercambiar datos entre nuestros dispositivos.

Velocidades con el bus de comunicaci贸n I2C / TWI en Arduino

Las velocidades de transferencia de datos son relativamente bajas, pero podemos trabajar hasta los 3.4 Mbit/s con un bus bidireccional y 5 Mbit/s con un bus unidireccional.

Velocidades del Bus de comunicaci贸n I2C con Arduino

Pines del bus I2C / TWI en Arduino

Lo m谩s recomendable para saber que pin usar para este tipo de conexi贸n es ir directamente a la hoja de datos del microcontrolador que utiliza nuestra placa de Arduino, pero la documentaci贸n de Arduino nos indica que pines usar y se lo detalla a continuaci贸n:

Pines para usar en las placas de Arduino para realizar la comunicaci贸n I2C

Conexi贸n de maestro esclavo para la comunicaci贸n con el bus I2C / TWI en Arduino

En este tipo de conexi贸n podemos tener hasta 128 dispositivos interconectados asign谩ndole una direcci贸n 煤nica a cada dispositivo, esto porque las direcciones trabajan con 7 bit lo que nos da un rango de 0 a 127 direcciones posible, el bit restante se usa para determinar si el dispositivo est谩 leyendo o escribiendo, para tener una buena interconectividad se recomienda usar una resistencia pull-up, adem谩s como dijimos podemos trabajar con uno o varios maestros.

Conexion para tener varios esclavos con un bus I2C

comunicaci贸n
 i2c en Arduino

Conexion para tener varios maestros con un bus I2C

Comunicaci贸n i2c con arduino

Librer铆a Wire para usar la comunicaci贸n I2C / TWI con Arduino

La librer铆a Wire que viene preinstalado en el IDE de Arduino nos permite trabajar de manera f谩cil y ordenada con el bus de comunicaci贸n I2C, en la cabecera de nuestro c贸digo se inserta la siguiente instrucci贸n: #include <Wire.h>, con esto ya estaremos listos para utilizar sus m茅todos de esta librer铆a que se detallan a continuaci贸n:

Wire.begin()

Esta funci贸n nos permite inicializar la conexi贸n como maestro o esclavo.

Si ponemos direcci贸n del dispositivo se configurara como esclavo y en caso contrario ser谩 maestro el dispositivo.

Wire.requestFrom()

Esta funci贸n es usada para recuperar informaci贸n desde el esclavo, tiene tres argumentos, en el primer argumento debemos colocar la direcci贸n del dispositivo esclavo, en el segundo argumento debemos colocar la cantidad de bits que solicitaremos, y en el tercer argumento colocamos una booleano 鈥淭RUE鈥 que nos permitir谩 terminar la conexi贸n despu茅s de la solicitud o 鈥淔ALSE鈥 para mantener la conexi贸n.

Wire.beginTransmission(direcci贸n)

Inicia la transmisi贸n de datos con una direcci贸n de 7 bits del dispositivo como argumento.

Wire.endTransmission()

Termina la transmisi贸n de datos, los bytes en cola en la funci贸n write() seran enviadas, tambi茅n podemos definir un argumento booleano 鈥淭rue鈥 para liberar el bus y 鈥渇alse鈥 para seguir usando el bus.

Wire.write()

Env铆a datos desde el maestro al esclavo, puede tener un argumento donde puede ser un byte o una cadena, tambi茅n podemos enviar datos con respectiva longitud y para esto usaremos dos argumentos.

Wire.available()

Esta funci贸n nos permite determinar si existen bytes para ser le铆dos.

Wire.read()

Es usada para leer los bytes enviados.

Wire.setClock(frecuencia del reloj)

Es usada para colocar la frecuencia de reloj y poder trabajar con la velocidad que necesitemos seg煤n los modos ya mencionados anteriormente, esto depender谩 si soporta o no el dispositivo que vayamos a usar, para esto debemos hacer uso de sus hojas de datos para saber si es posible trabajar con estas velocidades.

Wire.onReceive(funci贸n)

Con esta funci贸n podemos hacer referencia a otra funci贸n para realizar alguna acci贸n cuando recibamos alguna transmisi贸n de datos dese el maestro.

Wire.onRequest(funcion)

Es usada para responder con alg煤n mensaje al maestro cuando lo requiera, el mensaje lo podemos programar en una funci贸n propia y colocarla como argumento.

驴Qu茅 te pareci贸 el art铆culo?

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

  * He le铆do y acepto la pol铆tica de privacidad

驴Qu茅 hacemos con tus datos?

Creatividad Codificada como responsable tratar谩 tus datos con la finalidad de gestionar tu participaci贸n en nuestro blog informativo. Puedes acceder, rectificar y suprimir tus datos, as铆 como ejercer otros derechos consultando la informaci贸n adicional y detallada sobre protecci贸n de datos en nuestra Pol铆tica de Privacidad