I²C (Inter-Integrated Circuit) es un protocolo de comunicación síncrono muy extendido, diseñado para la comunicación a corta distancia entre circuitos integrados y microprocesadores/microcontroladores. Usa una arquitectura maestro-esclavo con una interfaz de dos hilos: SCL (línea de reloj serie) y SDA (línea de datos serie).
En el ámbito de los controladores lógicos programables (PLC), I²C es especialmente útil para ampliar la funcionalidad del sistema sin necesidad de un cableado complejo. Con I²C, los PLC pueden conectarse fácilmente a sensores, pantallas, módulos de memoria y otros periféricos, lo que facilita la adquisición de datos, la monitorización y el control en tiempo real.
Hardware
Los PLC basados en Arduino tienen un puerto I2C externo que trabaja con los niveles de tensión del microprocesador interno: 5V. Para usar la comunicación I2C con un dispositivo externo, hay que conectar las líneas SDA y SCL, además de una tierra común:
No conectes tensiones superiores a 5V a los pines I2C, ya que podrías dañar el PLC.
Los pasos para configurar I2C varían según el PLC. Sigue el procedimiento correspondiente a tu modelo de PLC:
Interruptores DIP
Configura los siguientes interruptores, situados en el lado izquierdo del PLC, para activar la comunicación I2C.
- Interruptor 3 (superior) en OFF para habilitar el pin SCL.
- Interruptor 4 (superior) en OFF para habilitar el pin SDA.

Interruptores DIP
Configura los siguientes interruptores, situados en el lado izquierdo del PLC, para activar la comunicación I2C.
- Interruptor 1 en OFF para habilitar el pin SDA.
- Interruptor 2 en OFF para habilitar el pin SCL.

Interruptores DIP
Configura los siguientes interruptores, situados en el lado derecho del PLC, para activar la comunicación I2C.
- Interruptor 3 (superior) en OFF para habilitar el pin SCL.
- Interruptor 4 (superior) en OFF para habilitar el pin SDA.

Recuerda alimentar correctamente el PLC con una fuente de alimentación de 12-24V.
Software
I2C se usa con la librería "Wire". Consulta el siguiente ejemplo,
que implementa un escáner I2C que busca en el bus los dispositivos
conectados. Cuando detecta un dispositivo, lo indica en el monitor
serie. Ten en cuenta que, si conectas los pines I2C (SDA y SCL) a otro
dispositivo, debería aparecer en el escaneo.
#include "Wire.h" void setup() { Serial.begin(115200); Wire.begin(); } void loop() { byte error, address; int nDevices = 0; delay(5000); Serial.println("Scanning for I2C devices ..."); for(address = 0x01; address < 0x7f; address++){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.printf("I2C device found at address 0x%02X\n", address); nDevices++; } else if(error != 2){ Serial.printf("Error %d at address 0x%02X\n", error, address); } } if (nDevices == 0){ Serial.println("No I2C devices found"); } }
#include "Wire.h" void setup() { Serial.begin(115200); Wire.begin(); } void loop() { byte error, address; int nDevices = 0; delay(5000); Serial.println("Scanning for I2C devices ..."); for(address = 0x01; address < 0x7f; address++){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.printf("I2C device found at address 0x%02X\n", address); nDevices++; } else if(error != 2){ Serial.printf("Error %d at address 0x%02X\n", error, address); } } if (nDevices == 0){ Serial.println("No I2C devices found"); } }
No hay comentarios por ahora.