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:
#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...
Comentar
Carlos Furtado,
A lógica é a mesma, com uma simples diferença. Em contatos NF o PCF responsável pelas entradas irá apresentar sinal nas portas que tiverem dispositivos conectados com saidas 1, então, por exemplos com 4 botões NF o endereço binário que será transmitido será B00001111 então você usa o oposto desse binário como estado inicial B00000000 (todos leds apagados) se abrir a porta 1 o binário seria B00001110 e você enviaria B00000001 e assim sucessivamente... espero ter ajudado!
Carlos Alito bom dia,
Consegui fazer os testes e ficou show, porem estou tentando fazer esse programa com uma logica inversa, ou seja, usando contatos fechados quando os mesmos abrirem o led correspondente ao sensor acenda, vc teria como me ajudar nessa programação.
Eu consigo usar ele como entrada ou saída no mesmo e também liberar saída sem interferir na outra usando biblioteca. Se interessar me avise Ilgner.
Olá , como faço um acionamento onde eu consiga acionar sem interferir no estado dos outros pinos já acionados ? Precisarei mapear qual eu já acionei ?
PESSOAL ESTOU TENTANDO USAR ESTE PROJETO MAIS QUANDO EU COLO E MANDO COMPILAR DA ERRO NA LINHA x=Wire.receive(); //Receive the data
O QUE ESTA ERRADO AI
Blz! vou tentar hj que estou com um tempo.
Carlos boa tarde, fiz os testes aqui e está funcionando certinho, porém oq eu estou precisando e q quando eu pressione uma vez o botão o led acenda e quando eu pressione outra vez o led apague uma função ON/OFF no mesmo botão teria como me ajudar.
Vou testar o código mais tarde quando voltar do trabalho valeu Carlos obrigadão.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)