Ir al contenido

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:

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");
  }
}
Calificación
0 0

No hay comentarios por ahora.

para ser el primero en comentar.