se explica en que consiste la comunicacion I2C, asi como los principales comandos en arduino
Size: 1.03 MB
Language: es
Added: Aug 27, 2024
Slides: 18 pages
Slide Content
Bus de Comunicación I2C
Qué es la comunicación I2C I2C Circuito inter-integrado ( por sus siglas en inglés inter- integrated circuit ) es un protocolo de comunicación serial desarrollado por phillips semiconductors . I2C también es denotado como TWI (por sus siglas en inglés Two Wired Interface) o interfaz a dos hilos. En el bus I2C, cada dispositivo tiene una dirección, que se utiliza para acceder a los dispositivos individualmente. El bus I2C es síncrono. El maestro proporciona una señal de reloj, que mantiene todos los dispositivos en el bus sincronizados.
Qué es la comunicación I2C El protocolo I2C funciona con una arquitectura maestro-esclavo (master- slave ). En esta arquitectura existen dos tipos de dispositivos : Maestro (Master) o Controlador ( Controller ): son los que inician y coordinan la comunicación. Esclavos (Slave) o Periféricos ( Peripheral ): son los dispositivos que están a la espera de que algún maestro se comunique con ellos. Casos comunes son los sensores y actuadores que soportan este protocolo.
Qué es la comunicación I2C El bus I2C requiere únicamente dos cables para su funcionamiento, uno para la señal de reloj (SCL) y otro para el envío de datos ( SDA). Pueden existir varios maestros y esclavos o un maestro y varios esclavos. La clave es que cada uno de esos dispositivos poseen una dirección única, por lo cual es posible hacer comunicación usando solo las dos líneas.
Funcionamiento de la Comunicación I2C Para poder comunicarse con un solo cable de datos, la comunicación consiste en: - 7 bits con la dirección del dispositivo esclavo con el que queremos comunicarnos . - Un bit restante indica si queremos enviar o recibir información . - Un bit de validación . - Uno o más bytes son los datos enviados o recibidos del esclavo . - Un bit de validación.
Funcionamiento de la Comunicación I2C Los mensajes están compuestos por varias tramas o secciones. Específicamente un mensaje está compuesto por una trama de dirección (que indica a cual esclavo va dirigida la información) y una o varias tramas de datos. Bit de confirmación
Funcionamiento de la Comunicación I2C Condición de inicio ( Start condition ) Para enviar un mensaje un dispositivo controlador coloca el pin SDA en estado bajo manteniendo el pin SCL en estado alto. Esto hace que el resto de los dispositivos entiendan que un mensaje está a punto de ser enviado .
Funcionamiento de la Comunicación I2C Trama de dirección ( Address frame ) La trama de dirección contiene la dirección del esclavo con el cual se desea comunicar el maestro, seguida por el bit escritura/lectura (R/W) y el bit de reconocimiento (ACK/NACK).
Funcionamiento de la Comunicación I2C Trama de datos (Data frame ) Los datos pueden ser enviados por el esclavo o el maestro, depende del valor del bit R/W de la trama de dirección . Toda trama de datos concluye con un bit de reconocimiento. Este bit tiene que ser puesto a cero por el dispositivo que está recibiendo la información para indicar que se recibió correctamente. Es importante destacar que las transferencias se realizan comenzando por el bit más significativo
Funcionamiento de la Comunicación I2C Condición de parada (Stop condition ) Una vez se han enviado todas las tramas de datos el dispositivo controlador pone ambos pines en estado alto, primero el pin SCL y después el pin SDA. A esto se le denomina condición de parada y sirve para indicarle al esclavo que la comunicación ha terminado.
Librería Wire para I2C Wire.begin () Esta función es la encargada de inicializar la librería Wire y de hacer que la placa se una al bus I2C. Se puede llamar de dos maneras diferentes dependiendo del número de parámetros que admita: La primera no admite parámetros. De esta forma la placa se vincula al bus I2C para actuar como un dispositivo maestro o controlador . Wire.begin (); La segunda admite un único parámetro . Wire.begin ( address ); address : es la dirección de 7 bits utilizada por la placa para unirse al bus. El valor de este parámetro debe estar entre 8 y 127. Esta función vincula la placa al bus I2C para actuar como un dispositivo esclavo cuya dirección es especificada por el parámetro address .
Librería Wire para I2C Wire.requestFrom () Esta función es utilizada por el maestro para solicitar datos de un dispositivo esclavo. Se puede llamar de dos maneras diferentes: La primera admite dos argumentos . Wire.requestFrom ( address , cantidad ) Donde: address : es la dirección del esclavo al que se le están solicitando los datos. cantidad : es la cantidad de bytes que se solicitan al esclavo. Esta función solicita a un esclavo una cantidad específica de bytes y libera el bus I2C para que otro dispositivo lo pueda utilizar. Los bytes solicitados son leídos utilizando la función Wire.read ().
Librería Wire para I2C Wire.requestFrom () La segunda admite tres parámetros. Wire.requestFrom ( address , cantidad , parada ); Donde: address : es la dirección del esclavo al que se le están solicitando los datos. cantidad : es la cantidad de bytes que se solicitan al esclavo. parada : es de tipo boolean y si es true el maestro enviará una condición de parada al terminar la solicitud para liberar el bus. En caso de ser false no se envía la condición de parada. Permite realizar la solicitud de lectura sin liberar el bus I2C.
Librería Wire para I2C Wire.beginTransmission () Esta función comienza una transferencia de datos hacia el esclavo con la dirección indicada . Wire.beginTransmission ( address ); Donde : address : es la dirección del esclavo al que van dirigidos los datos . Wire.write () Esta función se puede utilizar para enviar datos desde un esclavo a un maestro ante una solicitud de datos, o para enviar datos a un esclavo desde un maestro después de ejecutar la función Wire.beginTransmission (). La primera función admite un parámetro. Wire.write ( byte ); byte : el valor a transmitir como un simple byte. Esta función envía un byte utilizando el bus I2C.
Librería Wire para I2C Wire.write () La segunda función admite un parámetro. Wire.write ( string ); string : la cadena de caracteres a transmitir . Esta función envía una cadena de caracteres como una secuencia de bytes. La tercera función admite dos parámetros . Wire.write ( arreglo , cantidad ); arreglo : Arreglo de datos a enviar como una secuencia de bytes. cantidad : cantidad de bytes a transmitir . También es posible utilizar Wire.print () y Wire.println () para enviar datos, tal y como se realiza con la clase Serial .
Librería Wire para I2C Wire.endTransmission () Termina una transmisión iniciada con Wire.beginTransmission () a un esclavo y transmite los bytes que fueron almacenados en la cola utilizando la función Wire.write (). Wire.available () Esta función retorna el número de bytes disponibles para leer utilizando la función Wire.read (). Esta función debe ser ejecutada en un maestro después de una llamada a la función de solicitud de datos “ Wire.requestFrom ()”, o en un esclavo dentro de la función de recepción.
Librería Wire para I2C Wire.read () Esta función retorna un byte leído. En un maestro esta función debe ser ejecutada después de una llamada a la función solicitud de datos “ Wire.requestFrom ()”, en un esclavo debe ser ejecutada dentro de la función de recepción . Wire.setClock () Esta función permite especificar la velocidad de comunicación para el puerto I2C . Wire.setClock ( frecuencia ); frecuencia : es la frecuencia (en Hertz) de los pulsos de la señal de reloj del bus. Los valores permitidos son 100000 (modo estándar) y 400000 (modo rápido).
Librería Wire para I2C Wire.onReceive () P ermite registrar una función para que se ejecute cuando un esclavo recibe una transmisión desde un maestro . Wire.onReceive ( handler ); handler : es la función a ejecutar cuando el esclavo reciba los datos. La función empleada debe recibir un entero como parámetro.