Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
____________________________
49E.- Bus I2C. Adaptador a bus I2C, el PCF8574. Entradas y salidas.
- 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.
|
______________________________________________________
- ¿Cuántos módulos como este podemos conectar?.
- Como has visto en el apartado anterior, el módulo tiene la dirección 0x38 en hexadecimal, es decir es el 56.
- En este caso podemos conectar 8 módulos.
- Los módulos se pueden interconectar:
- En cada módulo hay que establecer una dirección como ves en la imagen.
- Esa dirección la podemos establecer cambiando los puentes A0, A1 y A2.
- La forma de hacerlo lo pueder ver en el tutorial:
31.- Pantalla LCD. Bus I2C.
- En la imagen anterior he puesto varias direcciones como ejemplos, aunque la situación de los puentes no coinciden con las direcciones que he puesto
_________________________________
- Chip PCF8574
PCF8574_PCF8574A.pdf
- El elemento que establece las direcciones es el chip PCF8574 que se encuentra en el módulo I2C.
- PCF8574
- PCF8574A
PCF8574
Las direcciones se configuran mediante uniones en: A0, A1 y A2 Hay fabricantes que utilizan para el módulo I2C el chip PCF8574, este viene con la dirección base: 0x20, por lo cual cuando no tiene ningún puente tendrá la dirección 0x27
|
PCF8574A (Es el que estamos utilizando con este módulo)
Las direcciones se configuran mediante uniones en: A0, A1 y A2 Otros fabricantes utilizan para el módulo I2C el chip PCF8574A, este viene con la dirección base: 0x38, por lo cual cuando no tiene ningún puente tendrá la dirección 0x3F
|
______________________________________________________
- ¿Cómo puedo ver la dirección de un módulo?.
- Consulta el apartado anterior: - Consultar la dirección I2C de la tarjeta.
______________________________________________________
- ¿Cuántos elementos puedo poner en cada módulo?.
- Cada módulo tiene para 8 pin, así que podemos conectar 8 elementos de tipo Digital, es decir de tipo interruptor, ejemplo:
- Pulsador, sensor de inclinación, sensor magnético, sensor de movimiento...
- Otro ejemplo:
- Aquí he conectado varios 4 sensores que producen un nivel Digital, son sensores de tipo interruptor, podríamos conectar 8 en cada módulo.
- Pero otros elementos, por ejemplo el teclado, necesita más pines:
- Se pueden conectar elementos de entradas y de salidas.
______________________________________________________
- ¿Qué significa el terminal INT del módulo?.
- Se utiliza para interrupciones, consulta:
18.- Interrupciones.
______________________________________________________
- Propuesta.
- Realiza un código con el módulo I2C y la siguiente conexión, de manera que al pulsar un botón se encienda un LED distinto.
- Estudia las conexiones de los pulsadores y LEDs. Consulta si necesita resistencias.
- Observa que utilizamos 8 elementos y no ocupamos ningún terminal de Datos Digitales de Arduino.
______________________________________________________
______________________________________________________
______________________________________________________
- Otro Bus I2C.
- Podemos encontrar esta otra tarjeta I2C.
- Es la que utiliza la pantalla LCD que hemos visto en el tutorial:
31.- Pantalla LCD. Bus I2C.
- Se observa que tiene sus cuatro conexiones I2C (Vcc, Gnd, SDA, SDL) y 16 terminales.
- Además su direcciones A0, A1, A2 que se pueden puentear.
- Mediante la aplicación visto en este tutorial se puede deducir que su dirección es: 0x27
- Tiene el chip
PCF8574
- Aquí tenemos el esquema del módulo:
- https://www.electroschematics.com/12459/arduino-i2c-lcd-backpack-introductory-tutorial/
-
________________________________
|