Introducción
Un bus I2C es un sistema de comunicación ampliamente utilizado para la conexión interna entre diferentes dispositivos. Se basa en un dispositivo principal que funciona como un maestro que controla los otros dispositivos conocidos como esclavos. Para enviar datos a un esclavo específico, utiliza la dirección de su dispositivo proporcionada por el fabricante. En algunos casos el proveedor no da la dirección para trabajar, lo que complica la comunicación I2C. En este blog veremos cómo conocer las direcciones de los dispositivos que no conocemos en un principio.
Requisitos
Cualquiera de nuestros controladores PLC controllers
Un dispositivo I2C
Cables (opcional)
¿Cómo se conecta?
Si estás usando un PLC de la familia MDuino, no necesitas ninguna conexión extra aparte de la del PC para cargar el código, ya que se incluye un RTC (Conexión en Tiempo Real) con comunicación I2C.
Si no, tendrás que conectar otro dispositivo usando los pines de comunicación SCL y SDA. Además, es mejor conectar la misma tierra para una conexión adecuada. Ambos dispositivos deben estar correctamente alimentados, comprueba la información del dispositivo proporcionada por el fabricante.
En la imagen de la izquierda puedes ver un ejemplo donde un MDunio 21+ se conecta a un Arduino Uno usando los pines I2C. En el Arduino Uno puedes usar el A4 (SCL) y A5 (SDA), podría cambiar en otros dispositivos de Arduino.
Interfaz de software
Programaremos usando Arduino Ide, que es un software basado en el lenguaje C. Industrial Shields proporciona placas para programar los controladores industriales. Básicamente no es necesario definir los pines y si son entradas o salidas ya que todo se configura automáticamente usando las placas.
Para instalar las placas de Industrial Shields, el siguiente enlace explica todo:
First steps using Arduino based PLCs
Después de haber configurado todas las placas, elija la placa y el modelo que utiliza y el puerto donde se conecta el dispositivo al PC en la sección de Herramientas de Arduino Ide. Usaremos un simple esquema que escanea el bus I2C en busca de dispositivos, mostrando los que se encuentran en el Serial Monitor de Arduino en el borde superior derecho de la pantalla. El código se muestra en la sección de abajo. Asegúrate de que el cable de la librería de Arduino está previamente instalado. En este caso, estarás detectando, como hemos dicho antes, el dispositivo RTC mostrado como la dirección 0x68. Si hay otro dispositivo conectado, debería aparecer en este escaneo.
Código
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);
}
Escáner I2C en un entorno de automatización industrial