PCF8574: Sobre o I2C I / O Expander para Arduino

PCF8574 TI CHIP

Você certamente já ouviu falar do PCF8574 CI, um chip que pode ser adquirido separadamente ou já montado em um módulo como muitos outros componentes eletrônicos para facilitar sua integração com sua placa Arduino. Neste caso, é um extensor das entradas e saídas para o ônibus I2C.

Você pode pensar que o Arduino já tem seu próprio barramento I2C integrado, e é verdade. Mas o PCF8574 pode ajudar a estender esse barramento além dos limites de sua placa de desenvolvimento, o que pode ser de grande ajuda para alguns fabricantes que precisam mais do que apenas o que é fornecido pelo Arduino.

O que é o barramento I2C?

Arduino UNO funções millis

O nome I2C vem de Circuito Inter-integrado ou circuitos inter-integrados. Sua versão 1.0 foi criada em 1992 pela Philips. Então, um segundo 2.1 viria em 2000 e hoje se tornou um padrão (a 100 kbit / s, embora permita até 3.4 Mbit / s no máximo) quando a patente expirou em 2006 e pode ser usada livremente.

Atualmente, é amplamente utilizado na indústria para comunicação, e também muito apreciado pelos fabricantes por seus projetos para comunicar diferentes microcontroladores e periféricos integrados em um IC.

El I2C é um ônibus bem conhecido da comunicação serial. Utiliza um protocolo de comunicação síncrona com apenas 2 canais (existe um terceiro, mas é acoplado a referência ou GND), na verdade também é conhecido como TWI (Two Wire Interface):

  • Um para o relógio (SCL).
  • Outro para dados (SDA).
Ambos são conexões CMOS de dreno aberto e requerem resistores pull-up. Além disso, se um dispositivo transmitir 0 e outro 1, pode haver problemas, por isso a linha está sempre definida como 1 (nível alto) e os dispositivos sempre transmitem 0 (nível baixo).

Isso implica que o mestre e escravo eles enviam dados pelo mesmo cabo ou trilha, que é controlado pelo primeiro que gera o sinal de clock. Cada um dos dispositivos periféricos conectados ao barramento I2C terá um endereço exclusivo atribuído, a fim de direcionar as transmissões. Mas não é necessário que o professor seja sempre o mesmo (multi-professor), é sempre ele quem inicia a transferência.

Como já expliquei no artigo sobre Arduino I2C Eu mencionei anteriormente, cada placa tem essas conexões I2C em locais diferentes. É algo que você deve ter em mente para poder usá-lo adequadamente em cada versão de placa:

  • Arduino UNO: SDA está em A4 e SCK em A5
  • ArduinoNano: o mesmo que o anterior.
  • Arduino MiniPro: mesmo.
  • Arduino Mega: SDA está no pino 20 e SCK no 21.
  • Mais informações sobre placas.

Você já sabe que pode usar o I2C para seus esboços facilmente, pois o Biblioteca Wire.h com várias funções para esta comunicação serial:

  • begin (): inicie a biblioteca Wire e especifique se é mestre ou escravo
  • requestFrom (): usado pelo mestre para solicitar dados do escravo.
  • beginTransmission (): inicia a transmissão com o escravo.
  • endTransmission (): fim da transmissão.
  • write ()- Grave dados de um escravo em resposta a uma solicitação do mestre ou você pode enfileirar a transmissão de um mestre.
  • acessível (): retornará o número de bytes a serem lidos.
  • read (): lê um byte transmitido de um escravo para um mestre ou vice-versa.
  • onReceive (): Chama uma função quando um escravo recebe uma transmissão de um mestre.
  • onRequest (): Chama uma função quando um escravo solicita dados de um mestre.

Pára mais informações sobre a programação e funções do Arduino, você pode baixar nosso Tutorial PDF.

O que é PCF8574?

Módulo PCF8574

O PCF8574 é um Expansor de entradas e saídas digitais (I / O) do barramento I2C. Pode ser fabricado por diversos fabricantes, além de estar disponível em CIs e módulos. Em qualquer caso, é muito prático conectá-lo à sua placa Arduino e ter a capacidade de controlar mais dispositivos do que a placa-mãe permite.

El Pinagem PCF8574 é simples, pois inclui apenas Pinheiros 8 quasidirecional (P0-P7 onde os chips de comunicação estão conectados), e por outro lado você tem o SDA e o SCL que deve conectar na placa Arduino, assim como VCC e GND para alimentar também o módulo. E não se esqueça dos três pinos de endereçamento A0, A1, A2 para escolher para qual dos dispositivos a comunicação é direcionada ...

Pinagem PCF8574

É dono outras características que você deve saber:

  • Suas conexões, sendo um dreno aberto, podem ser usado como entradas e saídas.
  • La corrente de pico é 25mA quando atua como saída (dissipador, quando a corrente flui para PCF8574) e 300 µA (fonte, corrente flui para PCF8574).
  • La tensão a fonte de alimentação é 2.5 e 6v. O consumo em stand-by é muito baixo, apenas 10 µA.
  • Todas as saídas tem travas, para manter o estado sem a necessidade de ações externas. Você só precisa agir quando quiser mudar o estado.
  • Você pode obter 8 direções possíveis, ou seja, até 8 dispositivos para se comunicar com ou usando 8 módulos para expandi-lo para até 64 dispositivos. Os endereços (pinos A0, A1, A2) serão:
    • 000: endereço 0x20
    • 001: endereço 0x21
    • 010: endereço 0x22
    • 011: endereço 0x23
    • 100: endereço 0x24
    • 101: endereço 0x25
    • 110: endereço 0x26
    • 111: endereço 0x27
  • admite interrupção (INT) por uma linha especial para detectar dados sem monitoramento constante.

Integração com Arduino

Captura de tela do Arduino IDE

A conexão com o Arduino é muito simples, basta conectar o Vcc com o pino 5v da placa do Arduino, e o GND com o GND do Arduino. Por outro lado, os pinos do módulo PCF8574 SDA e SCL podem ser conectar com pinos 14 (A5 SCL) e 15 (A4 SDA). Só com isso ia começar a funcionar, obviamente você pode usar o Px para conectar os aparelhos que você quer se comunicar ...

Então só faltaria comece com um esboço de exemplo no Arduino IDE. Você pode fazer isso sem usar uma biblioteca adicional, como ...

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   for (short channel = 0; channel < 8; channel++)
   {
      // Escribir dato en cada uno de los 8 canales
      Wire.beginTransmission(address);
      Wire.write(~(1 << channel));
      Wire.endTransmission();
      
      // Lee dato del canal
      delay(500);
   }
}

Como entrada:

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   short channel = 1;
   byte value = 0;
 
   // Leer el dato del canal
   Wire.requestFrom(pcfAddress, 1 << channel);
   if (Wire.available())
   {
      value = Wire.read();
   }
   Wire.endTransmission();
 
   // Mostrar el valor leido por el monitor serie
   Serial.println(value);
}

Ou também usar bibliotecas, como o PCF8574 que você pode baixe aqui e use um código semelhante a este do próprio exemplo que vem com esta biblioteca:

#include <Wire.h>
#include "PCF8574.h"
 
PCF8574 expander;
 
void setup() 
{
  Serial.begin(9600);
  
  expander.begin(0x20);
  
  /* Setup some PCF8574 pins for demo */
  expander.pinMode(0, OUTPUT);
  expander.pinMode(1, OUTPUT);
  expander.pinMode(2, OUTPUT);
  expander.pinMode(3, INPUT_PULLUP);
 
  /* Blink hardware LED for debug */
  digitalWrite(13, HIGH);  
  
  /* Toggle PCF8574 output 0 for demo */
  expander.toggle();
  
  /* Blink hardware LED for debug */
  digitalWrite(13, LOW);
}
 
 
 
void loop() 
{
}


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.