Scaner I2C-Bus.
utilidad que detecta la dirección de un dispositivo I2C.
Presentación.
En muchas ocasiones nos encontramos ante un proyecto que requiere un número importante de puertos y esta labor se la encomendamos a unos dispositivos que ya conocemos como son el sistema I2C-Bus, el cual nos da una solución sencilla y rápida de servicio, en esos casos, la cuestión es direccionar cada dispositivo, es decir, utilizar las distintas direcciones únicas para cada uno.
Normalmente, ante una tabla de direcciones, podemos elegir la correspondiente a cada dispositivo y habremos solucionado el contratiempo. Sin embargo, la cuestión es que, cada dispositivo tiene una dirección única y sin la cual no podemos acceder al dispositivo. En cuantas ocasiones nos encontramos ante esta situación o que, después de un tiempo o en caso de una fortuita ampliación del sistema, tenemos que conocer la dirección del nuevo dispositivo.

Fig. 1
En esta página, vamos a dar respuesta a esta situación con un código libre que se puede encontrar en distintos sitios. El código es muy sencillo y no hace "nada más", sólo nos muestra la dirección que le corresponde a cada dispositivo I2C que estamos interrogando.
Este es el código para reconocimiento de la dirección de un dispositivo I2C-Bus.
- Código: Seleccionar todo
//
// i2c_scanner
//
// Version 1
// Este programa (código que aparece) se pueden encontrar en muchos sitios.
// Por ejemplo, en el foro Arduino.cc.
// El autor original no se conoce.
// Version 2, Juni 2012, Using Arduino 1.0.1
// Adaptado para ser lo más simple posible por usuario Krodal Arduino.cc
// Version 3, Feb 26 2013 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Version 5, March 28, 2013
// Como la versión 4, pero las exploraciones de direcciones ahora a 127.
//
// Este boceto prueba las direcciones estándar de 7 bits.
// Los dispositivos con dirección de bits más alta
// no pueden ser vistas correctamente.
#include <Wire.h>; librería Wire.h
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// El i2c_scanner utiliza el valor devuelto o el
// Write.endTransmisstion para ver si un
// dispositivo reconoció la dirección.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("Dispositivo I2C en dirección 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Error desconocido en dirección 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("Dispositivo I2C No hallado.\n");
else
Serial.println("hecho\n");
delay(5000); // espera 5 segundos para otro scan
}
Copie y pegue usted este código, compile y súbalo a su Arduino. Ahora, abra la ventana del monitor serie, para ver los mensajes que se producen en cada captura. Recuerde que un dispositivo I2C utiliza lógica inversa, esto quiere decir que, la señal que procesa debe estar permanentemente en H (alto), si necesita más información al respecto visite este enlace. Si usted no ha conectado ningún dispositivo I2C o si estuviera en mal estado, se mostraría la siguiente imagen.

Fig. 2
En el caso de tener conectado un dispositivo I2C en buen estado, le mostrará un mensaje similar al siguiente, en el que se aprecia la dirección única de dicho dispositivo.

Fig. 3
En ciertas ocasiones podemos encontrarnos ante un proyecto en el que utilicemos varios dispositivos conectados a lmismo Bus-I2C. En ese caso, si conectamos este sencillo programa al bus, podemos encontrarnos ante una respuesta en la que aparecerán lo valores de las direcciones correspondientes a cada uno de los dispositivos I2C que tengamos en el Bus, como se aprecia en la siguiente imagen.

Fig. 4
Esta es una aplicación de ayuda que se puede considerar una herramienta para facilitar la tarea del programador, cuando se tiene que servir de una dispositivo que utiliza este protocolo de bus I2C. La siguiente es una foto del uso del escaner.

Si le ha servido de ayuda me consideraré complacido.

Esto es todo, por este simple tutorial. Si tiene interés en leer más sobre Arduino, revele esta sección.
(Mostrar/Ocultar)
Creada el: 06-04-2013
Actualizada el:
11/07/2013

Desarrollado por:
hispavila.com 1998, 2000, 2002, 2004, 2006, 2008, 2010, 2012
Como se puede comprobar, no tenemos patrocinador. Sin anuncios que molesten, esto lo agradece el lector.
Desde que se inició la andadura, en 1998 hasta el momento, el mantenimiento de este sitio, lo asume el propio autor.
Este obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 Unported.
Hispavila.com. |
| declaración de privacidad | LSSI | Póngase en contacto con nosotros