Tutorial sobre PCF8574 e como utilizá-lo com Arduino

 

Adquira estes componentes na Loja do Lab de Garagem

O circuito integrado PCF8574 é um expansor de portas entradas/saídas de 8bits por interface de comunicação I2C(apenas duas portas: serial clock(SCL) e serial data(SDA)). Com ele é possível expandir as portas de um microcontrolador utilizando apenas essas duas portas para 8 portas. Se utiliza endereçamento para se comunicar com os dispositivos conectados a ele. E uma alimentação de 2.5V a 6V.

 

Olhando o datasheet podemos ver a pinagem do PCF8574:

Onde: A0,A1,A2 são o pinos de endereçamento

            P0,P1,P2,P3,P4,P5,P6,P7 são as saídas em bits(cada um é um bit)

            SDA,SCL são as entradas de comunicação com o microcontrolador.

 

Para fazê-lo funcionar é necessário determinar o endereçamento do pcf8574, novamente no datasheet podemos ver quais endereçamentos são disponíveis:

onde: L significa LOW ou 0V(GND)

           H significa HIGH ou VCC

 

Cuidado!! O PCF8574 que foi usado neste exemplo foi o PCF8574 (sem letra no final). O PCF8574, o PCF8574N e o PCF8574P tem o mesmo endereçamento (32). Agora, o PCF8574A e o PCF8574AP começam com o endereço 56!


Vendo a definição de interface do PCF8574 no datasheet, podemos ver como este funciona:

De acordo com o endereçamento que foi determinado, o PCF8574 vai receber ou mandar a informação de acordo com o valor no I/O data bus. Como cada pino é um bit(valor binário) então o PCF tem um total de 255 de entrada ou saída.
Por exemplo: Se o PCF8574 estiver como receptor de dados, este vai receber o valor 32 pelos SDA e SCL  e jogar na saída este valor em binário, ativando apenas o P5 em HIGH.
Se for o valor 48, o PCF8574 vai ativar os pinos P5 e P4 ao mesmo tempo. Isto é, o PCF8574 manda de uma vez o valor que foi recebido.
Agora se o PCF8574 estiver como emissor de dados, é simplesmente o contrário.
Detalhe que o PCF8574 pode ser emissor e receptor, isto depende da montagem e da programação utilizada no microcontrolador. Mas não pode ser utilizado como emissor e receptor ao mesmo tempo!
Agora vamos para a parte prática, utilizando o Arduino, dois PCF8574 conectado a ele e uns leds:
O PCF8574 da esquerda será o receptor, que receberá os comandos e acenderá os leds e o PCF8574 da direita será o emissor e se um botão for apertado, acenderá um led.
O código para o Arduino é este:

#include <Wire.h>

byte x=0;
byte y=0;

void setup()
{
Wire.begin();
}

void loop()
{
Wire.requestFrom(33,1);       //Se PCF8574A - mude de 33 para 57 
if(Wire.available())     //If the request is available
{
x=Wire.receive();       //Receive the data
}
if(x<255)                     //If the data is less than 255
{
if (x==254) { y = 0; } //P0
if (x==253) { y = 2; } //P1
if (x==247) { y = 8; } //P3
if (x==251) { y = 4; } //P2
}                                               //Se PCF8574A mude 32 para 56
Wire.beginTransmission(32);     //Begin the transmission to PCF8574 
Wire.send(y);                                //Send the data to PCF8574
Wire.endTransmission();            //End the Transmission
}

Na programação, quando um botão for apertado, o PCF8574, com o endereço 33, irá mandar o dado para o Arduino, o Arduino irá receber, converter e depois mandará o dado para o PCF com endereço 32. E pronto!

Esperamos que tenham gostado! Boa sorte e boa diversão!

Referências:

http://arduino.cc/en/Reference/Wire

http://www.datasheetcatalog.org/datasheet2/b/0fjjhr6h643gldhx3o1rgk...

Exibições: 45447

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Wiechert em 29 julho 2014 às 17:35

Eduardo, se você reparar nos comentários do sketch do tutorial já está sendo indicado as linhas onde os endereços devem ser modificados. A questão é apenas saber que o endereço correto muda conforme o sulfixo do PCF8574. Então pesquise o endereço do chip que você comprou, ou se estiver simulando no proteus com o endereço correto indicado conforme mostrei no meu comentário anterior.

Comentário de Eduardo Pinheiro da Silva em 29 julho 2014 às 12:16

Wiechert,

Realmente ele mostra o endereço sim, de 0x40 à 0x4f, porém no data sheet do PCF8574 tem os pinos A0 A1 A2, onde conforme a combinação de terra ou positivo em cada pino vc define o endereço que vai de 0x20 ate 0x27. E agora o que podemos fazer para solucionar isso?

Comentário de Wiechert em 26 julho 2014 às 16:01

Marcelo, de um duplo clique no PCF8574 para entrar na janela Edit Component e clique no botão Device Notes, uma janela mostrará os endereços disponíveis.

Comentário de Marcelo Licorini em 26 julho 2014 às 15:11

Olá, não consigo simular no proteus o LCD 16x2 com PCF8574 + Arduino Uno, pois parece que é o problema de endereçamento, alguém já passou por este problema e pode me ajudar??

Comentário de Lucas Silva Chaves em 2 novembro 2013 às 23:25

Os leds ficam fracos em energia o que faço ?

Comentário de carlos alito cavalcante de sousa em 2 novembro 2013 às 8:26
O pino int seria para ser feita uma interrupção externa de default ele é nivel baixo (low). Pra vc controlar leds o tutorial já mostra bem mas se for algo diferente exolica melhor o que vc deseja fazer.
Comentário de Lucas Silva Chaves em 2 novembro 2013 às 7:21

Qual a função do Pino INT?  e o que preciso fazer para controlar leds?

Comentário de Silvio Cavalcante em 16 julho 2013 às 10:20
Carlos o link esta correto
Comentário de carlos alito cavalcante de sousa em 15 julho 2013 às 23:29

Silvio Cavalcante, vê o link ai e me diz se foi assim que fizestes e se tem mais algum "pulo do gato" para fazer rodar ou só isso dá conta (ligar OUT do pcf8574 no IN do uln2003, OUT do uln2003 no GND da bobina do relé)???

Comentário de carlos alito cavalcante de sousa em 15 julho 2013 às 23:24

Bem silvio usei o TIP120 e o BC548b mas ambos sem sucesso, comprei dois CIs o uln2003 e o uln2803 pelo que andei estudando nos sites internacionais, ambos darão conta do recado, eles resolvendo é até melhor que um transistor visto que não preciso de diodo e nenhum isolamento, usando o chip apenas, que deixa tudo mais simples e barato... pretendo fazer as ligações tal qual está nesse link (placa de relé com pcf 8574): http://www-users.cs.york.ac.uk/~pcc/Circuits/dome/relays.html

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço