Extender PCF8574.

article featured image

À medida que os nosso projetos vão crescendo vamo-nos deparando com o problema de não termos mais portas para ligar os nosss dispositivos. Como resolver?

A resposta a este problema é simples, utilizando expansores.

Hoje vamos falar de um deles, o PCF8574. Este é um expansor de portas I2C de 8 bits que permite criar e controlar 8 portas utilizando apenas os pinos A4 e A5 do nosso microcontrolador. Funciona com tensões entre os 2.5 e 6V.

Vamos precisar do seguinte material: Arduíno, Breadboard, Jumpers, 2 PCF8574, 1 Push Button, 1 LED, 4 resistências 10k, 1 Resistência 220Ohm.

Vamos criar o seguinte circuito:

Para que se entenda melhor o circuito criado, vejamos o datasheet do PCF8574:

Os pinos A0, A1 e A2 vão servir para definir o endereço do nosso extender PCF8574. Existem vários modelos, e entre eles os endereços variam. Por exemplo, para o PCF8574P os endereços vão do 0x20 ao 0x27, se for o PCF8574AP, que é o nosso caso, os endereços variam do 0x38 ao 0x3F.  Vejamos a seguinte tabela de configuração:

A2A1A0Endereço
LLL38
LLH39
LHL3A
LHH3B
HLL3C
HLH3D
HHL3E
HHH3F

 

Os pinos P0, P1, P2, P3, P4, P5, P6 e P7 vão ser as nossas "portas extras" que cada PCF8574 vai possibilitar. São portas bidirecionais que podem ser usadas como entrada ou saída. De ter em conta que podemos ter um máximo de 8 extenders, do mesmo tipo, ligados entre si através do protocolo I2C.

Os pinos VSS e VDD irão servir para ligar o GND e os 5V respetivamente.

Os pinos SDA (I2C Serial Data Input/Output) e SCL (I2C Serial Clock Input) são para a interface I2C, ligam às portas A4 e A5 respetivamente. De ter em atenção que ambos devem ser ligados ao VDD através de um pull-up resistor.

Por último temos o pino INT (Interrupt Output), este a ser usado também deve ser ligado ao VDD através de um pull-up resistor.

"Resistores pull-up são resistores usados em circuitos lógicos eletrônicos para garantir que entradas de sistemas lógicos se ajustem em níveis lógicos esperados no caso de dispositivos externos serem desconectados. Eles também podem ser usados na interface entre dois diferentes tipos de dispositivos lógicos, possivelmente operando em tensões diferentes.

A ideia de um resistor pull-up é que ele fracamente "puxe" (pull) a tensão do condutor que ele está conectado para nível lógico alto. Contudo, o valor do resistor é intencionalmente alto o suficiente para que, se qualquer outra coisa que puxe fortemente a tensão do condutor para 0V, a tensão irá para 0V. Um exemplo de algo que fortemente puxaria a tensão para 0V seria o transistor em uma saída de coletor aberto."

Fonte: Wikipédia: https://pt.wikipedia.org/wiki/Resistor_pull-up

 

Tendo entendido o conceito do extender PCF8574 e a sua forma de funcionamento, vamos criar o código necessário para colocar o circuito a funcionar:

 

A utilização deste expansor torna-se muito útil, certo?

No entanto, depois de implementado este exemplo podemos vir a ter um pequeno problema. Dependendo dos LEDs que estivermos a usar a luminusidade do LED pode ser demasiadamente fraca. Isto acontece porque a intensidade de saída do expander PCF8574 é de 100uA e o LED necessita de 20mA.

Para podermos resolver o problema temos de adicionar a cada LED um transistor (Pn2222a) para que a intensidade da corrente seja amplificada.

Tendo em conta esta situação teremos de modificar o nosso circuito:

A ideia desta aula é que este exemplo sirva de base para o desenvolvimento de um projeto de domótica que estámos a dar ínicio neste momento. Muito em breve irei publicar na secção de projetos as várias etadas de desenvolvimento do mesmo. Por isso, esteja atento!

Fiquem bem. Abraço...