Adquira estes componentes na Loja do Lab de Garagem

Neste tutorial vamos mostrar como utilizar o LCD 16x2 com PCF8574 e Arduino. Para quem não sabe o que é o PCF8574, temos um tutorial explicando e implementando o PCF8574 com Arduino. Clique aqui para o tutorial sobre PCF8574.

Antes de mais nada, baixe a biblioteca para a versão 1.0 da IDE do Arduino: biblioteca para a versão 1.0 da IDE do Arduino.

Caso você esteja utilizando uma versão mais antiga(002x) da IDE do Arduino, baixe esta biblioteca: biblioteca para IDE de versões anteriores.

Depois de baixado a bilbioteca, extraia para a pasta "libraries" localizada dentro da pasta da IDE do Arduino.

Agora, faça a seguinte ligação:

Você irá ligar o LCD no PCF8574 e um potenciometro para aumentar ou diminuir o contraste. E por fim o PCF8574 no Arduino como está mostrado na imagem.

Depois de feito a ligação, abra a IDE do Arduino e vá em File/Examples/LiquidCrystal_I2C e clique em "Hello World". Irá abrir a seguinte programação:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(32,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display

void setup()
{
lcd.init(); // initialize the lcd

// Print a message to the LCD.
lcd.backlight();
lcd.print("Hello, world!");
}

void loop()
{
}

Agora, selecione a versão da placa Arduino(UNO, Duemilanove, etc) e a porta em que a placa Arduino está conectado. E clique em UPLOAD.

Ao passar a programação, ajuste o contraste pelo potenciomêtro. Pronto! A frase "Hello, world!" irá aparecer no LCD.

E é isso, pessoal!! Até a próxima!! Se tiver dúvidas, poste aqui no blog! Para sugestões de tutoriais, clique aqui! Você pode ver outros tutoriais também, clicando aqui! E projetos abertos desenvolvidos pelos garagistas, clicando aqui!!

Referências:

http://arduino.cc/playground/Code/LCDi2c

http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/

 

Exibições: 30303

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 Cleber Soares em 27 novembro 2015 às 10:24

Olá Diego, obrigado por tentar ajudar.

tanto o 56 ou 0x38 eu já havia tentado e ambos ao gravar o cód o display não amostra nada.

no seu cód de analise está dando o erro de sintaxe
linha
for(address = 1; address span class="pl-c1">127; address++ ) {

que deu o erro

sketch_nov27a:16: error: expected ';' before 'span'
for(address = 1; address span class="pl-c1">127; address++ ) {
^
sketch_nov27a:16: error: 'span' was not declared in this scope
sketch_nov27a:16: error: expected ')' before 'class'
for(address = 1; address span class="pl-c1">127; address++ ) {
^
sketch_nov27a:16: error: expected primary-expression before 'class'
sketch_nov27a:16: error: expected ';' before 'class'
sketch_nov27a:16: error: expected ';' before ')' token
for(address = 1; address span class="pl-c1">127; address++ ) {
^
sketch_nov27a:28: error: expected '}' at end of input
}
^
exit status 1
expected ';' before 'span'

Comentário de Diego Previero em 26 novembro 2015 às 7:30

Corrigindo:

Alinha 2 do código é:

<Wire.h>

Comentário de Diego Previero em 26 novembro 2015 às 7:27

Olá Cleber, troca o endereço do PCF8574P para 0x38 ou 56 assim:

LiquidCrystal_I2C lcd(0x38,16,2); ou LiquidCrystal_I2C lcd(56,16,2);

Testa e fala pra gente se deu certo.

Vou colar aqui embaixo um scanner para verificar o endereço do PCF8574 pode ajudar tbm.

#include /span>Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address span class="pl-c1">127; address++ ) {
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) { Serial.print("I2C device found at address 0x"); if (addressspan class="pl-c1">16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !");
nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (addressspan class="pl-c1">16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n");
delay(5000); // wait 5 seconds
}

Comentário de Cleber Soares em 25 novembro 2015 às 13:59

Pessoal.
gostaria muito da ajuda de vcs.
sou hobista no que se diz respeito de Arduino e estou me fascinando com as possibilidades que o microcontrolador pode fazer.
estou montando um projeto e precisaria muito fazer esse cód funcionar.

e estou com um problema que acho muito estranho e gostaria de pedir ajuda caso alguém tenha passado o mesmo problema que eu ,estou quase 01 semana me matando e não consigo resolver.

Desculpe a ladainha toda,é que é meu 1° post aqui e queria me apresentar.

Bom vamos lá!

estou usando o seguinte cód simples

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,16,2);

void setup()
{
lcd.init();
lcd.setCursor(0,0);
lcd.print("Hello, world!");
}

void loop()
{
lcd.setCursor(0,0);
lcd.print("Olá");
lcd.setCursor(0,1);
lcd.print("Seja Bem vindo");
}

Mais o estranho é que meu LCD só amostra a 1° letra de cada linha

ficando

O
S

agora se eu trocar a linha exemplo

lcd.setCursor(0,0);
lcd.print("Olá");

por

lcd.setCursor(1,0);
lcd.print("O");
lcd.setCursor(2,0);
lcd.print("l");
lcd.setCursor(3,0);
lcd.print("á");

ele imprime na tela olá

eu já fiz o teste com meu lcd e está ok.
o Ci que estou usando é o pcf8574P

Comentário de Luiz Ernesto Szczerbowski em 28 outubro 2013 às 12:08

Lucas,  biblioteca Wire já vem com o IDE do Arduino, fica em C:\Arduino\libraries\Wire

Comentário de lucas v fernandes em 27 outubro 2013 às 14:23

ola pessoal, onde consigo a biblioteca wire.h?? obrigado

Comentário de Rodrigo José Araújo em 2 outubro 2013 às 19:52
Bruno você pode ligar ambos em paralelo sem problemas. Se precisar eu tenho o código pronto. Me solicite pelo email rodrigo.rja@hotmail.com .
Comentário de Bruno Moreira em 2 outubro 2013 às 15:18

Olá! Tenho um circuito igual a este e quero acrescentar um RTC (Real_Time_Clock_Module_(DS1307)_V1.1), mas ambos usam os pinos A4 e A5, alguem sabe alguma solução?

Comentário de Raphael C.Celine em 3 agosto 2013 às 1:18

Discussão meio antiga, mas gostaria de postar um comentário, pois tive uma dificuldade recentemente, e nao achei as respostas pela internet.

Eu tenho o PCF8574AP da NXP, e consegui fazer o LCD 16 por 2(PCB-1602KJ-01) funcionar depois de alguns problemas. Para isso além de determinar o endereço correto (x38) tive que deixar o pino 5 do lcd (Read/Write) no GND e nao no pino 10 do PCF8574AP como exemplificado. 

Alguém poderia me dizer pq sou unico ? pois olhei varias montagens pela internet e todos pinavam o R/W no pino 10, e nao no GND.

Comentário de Luiz Ernesto Szczerbowski em 14 julho 2013 às 4:20

Quanto à dúvida do colega Rodrigo José Araújo, a resposta é que pode ligar sem problemas, o conflito é resolvido pelo endereçamento, cada chip deve ter um endereço diferente no barramento. Exemplo: no RTC DS1307 é 0x68, no PCF8574 é 0x32, no PCF8574AP é 0x38, nas memórias EEPROM da série 24Cxxxx é 0x50. 

É para isso que servem os 3 pinos  A2, A1 e A0, para mudar o endereço conforme são ligados ao terra (0) ou ao +V (1). Assim podemos ligar ao mesmo tempo 2^3 = 8 chips do mesmo tipo com endereços diferentes.

Não se esqueça de de quando tiver mais que um chip ligado ao barramento I2C deve-se ligar 2 resistores de pull-up (4k7, por exemplo) entre os pinos 4 e 5 do Arduino e +V).

Aliás algumas placas de RTC com o DS1307 já vem com uma memória 24C32, o 32 quer dizer 32 kBITS ou 4 kBYTES de 8 bits, configurada no endereço 0x50. Se quiser usar outra memória com esta placa, deve configurar outro endereço.

Outra coisa: nas data sheets esse endereço é chamado de "slave address", o Arduino é sempre o master.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço