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
Obrigado, mas o tutorial não é meu, foi a turma do LDG quem fez...
De qualquer forma, nem sempre a simulação ocorre como deveria.
Fiz sim cara, idêntico ao que está na imagem acima do seu tutorial (que está bem descritivo, parabéns!). Porém mesmo após as conversões para que o programa ficasse compatível com o Isis, Wire.requestFrom(0x41,1) e Wire.beginTransmission(0x40), não obtive o resultado esperado. Mas isso foi é só por curiosidade mesmo.
Muito obrigado pela atenção!
Voce fez a ligação dos pinos de endereçamento no PCF para o GND de forma a indicar o endereço igual ao que está no sketch?
A tabela agora começa em 40fh para A2,A1,A0 em LOW...
Mas tenta tipo um Wire.requestFrom(0x41,1) por exemplo.
Não funciona...
Tentei simular esse tutorial no Isis, mas sem sucesso. Simulei utilizando um PCF8574 e um ATMega328P.
Eu acho que o endereçamento do PCF é diferente no Isis.
Olá Marcos muito obrigado pela dica
Olá Silvio,
Faz o seguinte, clica na biblioteca CORE, e arraste para a protoboard o IC DIP 8 pins.
Selecione o CI e nas propriedades mude os pinos de 8 para 16.
Agora mude o rótulo do chip para PCF8574.
Pronto!!!!
Olá estou tentando passar para o fritzing um esquama eletrico com o PCF8574 mas não encontro o desenho do CI alguem poderia me dar uma dica.
Grato
Segue abaixo o código com o acionamento das 8 portas de cada um dos PCF8574.
#include <Wire.h>
byte x=0;
byte y=0;
void setup()
{
Wire.begin();
}
void loop()
{
Wire.requestFrom(57,1);
if(Wire.available())
{
x=Wire.read();
}
if(x<255)
{
if(x==254){y = 1;}; // P0
if(x==253){y = 2;}; // P1
if(x==247){y = 8;}; // P3
if(x==251){y = 4;}; // P2
if(x==239){y = 16;}; // P4
if(x==223){y = 32;}; // P5
if(x==191){y = 64;}; // P6
if(x==127){y = 128;}; // P7
}
Wire.beginTransmission(56);
Wire.write(y);
Wire.endTransmission();
}
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)