|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica   ADB Shell - Android Arduino
   AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

49D.- Leer pulsadores en Bus I2C. Encender LED. Adaptador a Bus I2C, el PCF8574.

- En el tutorial anterior vimos como con el adaptador de bus I2C PCF8574 podemos encender 8 LED.

- Ahora vamos a utilizar el PCF8574 para leer el estado de tres pulsadores.

- La ventaja que tiene el Bus I2C es que con solamente dos cables de datos (y dos de alimentación) podemos enviar muchas señales tanto de entrada como de salida.

- Por ejemplo supongamos que tenemos tres módulos PDF8574, con solo los 4 cables ponemos controlar 32 elementos, pulsadores, LED,... Cada módulo tendrá una dirección configurada mediante los tres puentes amarillos.

______________________________________________________
- 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/salida. 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 3 pulsadores 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.

- No le he puesto resistencia limitadora a los LED, si quieres puedes poner una común. No se suele averiar el Arduino a pesar de estar un tiempo funcionando sin la resistencia limitadora, pero siempre es conveniente ponerla.

- Observa que con solo dos cables SDA y SCL se controla 3 pulsadores. Con un solo módulo PCF8574 podríamos poner 8 pulsadores. En este caso los pulsadores están en P0, P1 y P2.

______________________________________________________
- Código para el Arduino.

Código para las aplicación de los pulsadores.
#include <Wire.h>
#define direccion_PFC8574 0x38

int LED2 = 2;
int LED3 = 3;
int LED4 = 4;

void setup(){
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);

Wire.begin();
Serial.begin(9600);
}

void loop() {
byte cual;
cual = Leer(direccion_PFC8574);

if(bitRead(cual,0))
digitalWrite(LED2, LOW);
else
digitalWrite(LED2, HIGH);

if(bitRead(cual,1))
digitalWrite(LED3, LOW);
else
digitalWrite(LED3, HIGH); 

if(bitRead(cual,2))
digitalWrite(LED4, LOW);
else
digitalWrite(LED4, HIGH);

delay(100);
}

byte Leer(int direccion) {
byte LeeDato = 0xff;
Wire.requestFrom(direccion,1);
if(Wire.available()){
LeeDato = Wire.read();
}
return LeeDato;
}

______________________________________________________
- Comentarios.

- Observa que solo necesita la librería Wire, que viene por defecto en el IDE del Arduino.

- La dirección de este módulo I2C es 0x38, está indicada en el código.

- A modo de resumen indico la manera de Leer y Escribir en el Bus I2C

Leer - Escribir
#include <Wire.h>
#define direccion_PFC8574 0x38

Escribir(direccion_PFC8574, 0xff);

void Escribir(int direccion, byte dato) {
Wire.beginTransmission(direccion);
Wire.write(dato);
Wire.endTransmission();
delay(5);
}

byte Leer(int direccion) {
byte LeeDato = 0xff;
Wire.requestFrom(direccion,1);
if(Wire.available()){
LeeDato = Wire.read();
return LeeDato;
}

______________________________________________________
- Propuesta.

- Utiliza más pulsadores y LED.

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información