Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
____________________________
49C.- Juego de luces con 8 LED en bus I2C. Adaptador a bus I2C, el PCF8574.
- En el tutorial anterior vimos como con el adaptador de bus I2C PCF8574 podemos adaptar las 8 entradas de un teclado a 2 señales de bus I2C.
- Ahora vamos a utilizar el PCF8574 al revés, es decir enviaremos la señal por los 2 terminales del bus I2C y llegará a 8 los LED.
______________________________________________________
- Módulo conversor de 8 bits a I2C.
- Tarjeta adaptadoras de 8 conexiones a I2C que contiene al chip PCF8574. Esta tarjeta tiene un precio menor a 2 € y es la opción preferida.
- Tiene 8 terminales amarillos (P0 ... P7) para las conexiones de entrada. Dos conexiones de salida SDA y SCL, además de la alimentación Vcc y Gnd.
______________________________________________________
- Consultar la dirección I2C de la tarjeta.
- Además tiene tres puentes para establecer su dirección I2C, ya que los dispositivos que se conectan a este bus deben tener una dirección propia y que no coincida con la de otro dispositivo del bus.
- Lo más conveniente es conocer la dirección que tiene, para ello conectamos esta tarjeta al Arduino: Vcc, Gnd, SDA y SCL [Por ahora no es necesario conectar el teclado]
- Y cargamos este programa. Ponemos el Serial Monitor a 115200. Consultamos el Serial Monitor. Nos indicará la dirección que tiene actualmente configurada la tarjeta.
Código para ver direcciones I2C |
#include <Wire.h>
void setup() {
Serial.begin (115200);
// Leonardo: wait for serial port to connect
while (!Serial)
{
}
Serial.println ();
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;
Wire.begin();
for (byte i = 1; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1); // maybe unneeded?
} // end of good response
} // end of for loop
Serial.println ("Done.");
Serial.print ("Found ");
Serial.print (count, DEC);
Serial.println (" device(s).");
} // end of setup
void loop() {}
|
|
- En este caso la dirección que tiene la tarjeta I2C es 0x38.
- Si cambias los puentes y reinicias el Serial Monitor, verás que cambia la dirección.
|
______________________________________________________
- Conexión del módulo conversor de 8 bits a I2C a los 8 LED y al Arduino.
- Podemos tomar las conexiones del Bus I2C (SCL y SDA) de arriba o de abajo, según indico en la imagen. El código funcionará igual.
- Fíjate que los LED tienen el ánodo alimentado a 3,3 V positivo.
- Ya que los LED están alimentado con 3,3 V no le he puesto resistencia limitadora.
- Puedes alimentar también al módulo I2C con 3,3 V, en vez de los 5 V mostrado en la imagen.
- Observa que con solo dos cables SDA y SCL se controla 8 LED. Se pueden poner más módulo I2C, cada uno controlará a otros 8 LED, solo tendremos que cambiar su dirección mediante los tres puentes amarillos. Cada módulo I2C llevará una dirección distinta. Todos los módulos irán a la misma pareja de cable SCL y SDA.
______________________________________________________
- Código para el Arduino.
Código para el juego de luces. |
#include <Wire.h>
void setup() {
Wire.begin();
}
void loop() {
Enviar(B00000001);
delay(1000);
Enviar(B00000011);
delay(1000);
Enviar(B00000111);
delay(1000);
Enviar(B00001111);
delay(1000);
Enviar(B11110000);
delay(1000);
}
void Enviar(byte dato) {
Wire.beginTransmission(0x38);
Wire.write(dato);
Wire.endTransmission();
} |
______________________________________________________
- Comentarios.
- Observa que solo necesita la librería Wire, que viene por defecto en el IDE del Arduino.
- El código es sencillo y fácil de entender.
- La dirección de este módulo I2C es 0x38, está indicada en el código.
______________________________________________________
- Propuesta.
- Utiliza varios módulos I2C para controlar más LED.
________________________________
|