Universidad Autónoma de Baja California Facultad de Ingeniería Mexicali Inter-Integrated Circuit – Two Wire Interface Microprocesadores y Microcontroladores M.C. Jorge Eduardo Ibarra Esquer Semestre 2015-1 I2C/I2C/IIC/TWI • Bus desarrollado por Philips Semiconductors (hoy NXP Semiconductors). • Permite la comunicación entre dispositivos utilizando un bus bidireccional de dos líneas: – Datos SDA – Reloj SCL I2C/I2C/IIC/TWI • A cada dispositivo en el bus se le asigna una dirección. • Distintas implementaciones permiten transferencias a 100 kbit/s, 400 kbit/s, 3.4 Mbit/s y un modo unidireccional de hasta 5 Mbit/s I2C/I2C/IIC/TWI I2C en Arduino Modelo SDA SCL Uno A4 A5 Leonardo 2 3 Librería Wire • Permite la comunicación con dispositivos I2C/TWI, utilizando las siguientes funciones: – – – – – – – – – begin() requestFrom() beginTransmission() endTransmission() write() available() Read() onReceive() onRequest() begin() • Se utiliza para inicializar la librería y unirse al bus ya sea como maestro o esclavo. • Sintaxis: – Wire.begin() – Maestro – Wire.begin(address) – Esclavo • El parámetro address se refiere a una dirección de 7 bits con la que se identificará al esclavo. beginTransmission() • Inicia la transmisión con el esclavo que se seleccione. • Sintaxis: – Wire.beginTransmission(address) write() • Escribe datos a un esclavo seleccionado por el maestro mediante la función beginTransmission() • Sintaxis: – Wire.write(value) – Wire.write(string) – Wire.write(data,length) //Arreglo y cantidad • La función regresa el número de bytes transmitidos. endTransmission() • Termina la transmisión de datos hacia un esclavo. • Sintaxis: – Wire.endTransmission() – Wire.endTransmission(stop) // boolean • Regresa un byte que indica el estado de la transmisión: – “0” indica que se realizó con éxito. Ejemplo de escritura // Transmite al dispositivo #44 (0x2c) Wire.beginTransmission(44); // Se envía un byte Wire.write(val); // Termina la transmisión Wire.endTransmission(); requestFrom() • Se utiliza por el dispositivo maestro para solicitar datos a un esclavo. • Sintaxis: – Wire.requestFrom(address,quantity) – Wire.requestFrom(address,quantity,stop) available() • Regresa el número de bytes que se encuentran disponibles para leer desde un esclavo. • En un maestro, se llama después de la función requestFrom() • En un esclavo, se utiliza dentro del método onReceive() read() • Lee un byte que fue transmitido desde un esclavo. • Sintaxis: – Wire.read() • Regresa el siguiente byte disponible. Ejemplo de lectura // Solicita 6 bytes al dispositivo #44 (0x2c) Wire.requestFrom(44,6); // Se leen los bytes enviados por el esclavo while(Wire.available()) { char c=Wire.read(); Serial.print(c); } onRequest() • Registra una función que se llamará cuando un maestro solicite datos al esclavo. • En este caso, el microcontrolador está configurado como esclavo. • Sintaxis: – Wire.onRequest(handler) onReceive() • Registra una función que se llamará cuando un esclavo recibe datos desde un maestro. • En este caso, el microcontrolador está configurado como esclavo. • Sintaxis: – Wire.onReceive(handler) – void handler(int numBytes) // Número de bytes recibidos
© Copyright 2024 ExpyDoc