Ir ao conteúdo
  • Cadastre-se
Joao Anacleto

Como ler de um display lcd diretamente do display

Recommended Posts

Olá, sou novo no fórum, então se estiver fazendo algo errado peço desculpas.

 

Estou com a necessidade de ler as informações de  um display lcd 20x4, que  e controlado por  um PLC (que tem o codigo hex protegido), e enviar os dados pela porta serial.

Para isso estou utilizando um arduino uno para fazer a leitura. liguei o arduino em paralelo com o barramento de dados do display, para tentar ler os bits e converte posteriormente.

 

Esse e o esquema que estou usando:udRDk.thumb.png.8f0099e25304dc18ef8eaf2ee4220f71.png

 

Obs: Coloquei resistores pulldown em cada pino,pra evitar erros de leitura.

 

 

Com esse código

12.PNG.be0aa93816a9f0bfedd82f4d3d719dd2.PNG

13.PNG.fa70cb30baff5302f846818bd0e2fb8f.PNG

 

O Problema e que  estou tendo esses resultados na  leitura:

134.PNG.bca1bc737a88f38becab59d8162ad82a.PNG

 

Independente do que apareça na  tela.

Se alguem identificar onde está meu problema, ficarei muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É sério achei este desafio bem legal. Tenta ler o byte de uma vez só. Infelizmente não devo te ajudar com a linguagem do arduíno mas em c eu faria algo como:

unsigned char i,d[16];
for(i=0;i<16i++)
{
while(!E);//espera habilitar o display. timeout aqui vai bem 
if (!RS) d[i]=PORTD; //só captura se for caracter da tela
//printf(d[i]);// caso queira enviar de imediato pra serial, deve usar a máxima velocidade senão zoa 
}

Na saída teremos a matriz de 16 caracteres do display.

Claro é só o esqueleto mas quasi-funcional. Deve implementar algo como um time-out pra não ficar preso na função, algum ajuste de temporização e etc.

abç

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sintaxe está  quase correta, mas, infelizmente não e recomendado setar as portas 0 e 1 do arduino uno como input. Estes pinos  são predefinidos para  comunicação serial. entretanto tenho em mãos o arduino due, e ja estou adequando o hardware para fazer a leitura simultânea.  

o código esta ficando assim:

 

byte d[80]; //20x4 display
int RS = 10;
int E = 12;
int i = 0;

void setup() {

DDRD = B00000000;

pinMode(RS,INPUT);
pinMode(E,INPUT);
Serial.begin (1200);

}

void loop() {


      for (i = 0;i < 80; i++){
        while(!E){
          if (!RS){
          d [1]= PIND; // ler todos os 8 bits
          }
        }
      }     
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×