Problema escrita LCD

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Problema escrita LCD

Mensagempor longo.251272 » 03 Dez 2018 09:34

Bom dia pessoal,

Tenho uma biblioteca que usa a anos sem problema, porém num lote de display LCD 20x4 que importei quando escrevo uma valor no display a cada 250ms, ele se perde no posicionamento do cursor.
Parece que ele está perdendo bits ao dar o comando de instrução para posicionar o cursor. Na prática onde era pra aparecer 4 dígitos acaba aparecendo 5 até 8.



Certo -> 1245
Quando ocorre o erro na próxima escrita - > 11246

Alguém já vivenciou isso ? Estou pensando em dar um delay maior ao enviar as instruções.

Obrigado pela atenção
Ricardo
longo.251272
Byte
 
Mensagens: 318
Registrado em: 08 Nov 2011 11:58
Localização: São Paulo - SP

Re: Problema escrita LCD

Mensagempor chrdcv » 11 Jan 2019 13:53

Olá!

Eu recomendo vc reescrever tua biblioteca e incluir a checagem do valor do busy bit ou busy flag (não me recordo bem o label correto), pois somente desta maneira, terá uma biblioteca compatível e que respeita as temporizações requeridas para envio de comando e dados para os displays com controladores HD447x compatíveis!
Seu Madruga: "O trabalho não é ruim, ruim é ter que trabalhar"
Avatar do usuário
chrdcv
Dword
 
Mensagens: 1580
Registrado em: 13 Out 2006 14:13

Re: Problema escrita LCD

Mensagempor brasilma » 11 Jan 2019 17:23

Se comentar em que linguagem é a biblioteca e o controlador é possível dar mais palpites...

Para saber onde "mexer" é preciso saber onde é o problema.

Caso tenha uma outra plataforma, por exemplo um Arduíno, tenta simular a mesma escrita e vê o que dá.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Re: Problema escrita LCD

Mensagempor longo.251272 » 15 Jan 2019 13:02

Boa tarde pessoal, vou enviar o código

Código: Selecionar todos
/

/************************** Subrotinas **************************************************

/*****************************************************************************************
******************** Habilita o display **************************************************
**
*/

void LCD_enable(void)
{
    LCD_en = 0;                                                                         // Clear bit P4.0
    DELAY_0_75Ms();
    LCD_en = 1;                                                                         // Set bit P4.0
}

/*****************************************************************************************
******************** Envia um comando para o display *************************************
**
**  Parameter 1 -> Comando
*/

void LCD_command(unsigned char command)
{
    LCD_rs = 0;                                                                         // Clear bit P4.7
    LCD_d = command;
    LCD_enable();
    DELAY_1Ms();
}

/*****************************************************************************************
******************** Posiciona o cursor do display ***************************************
**
**  Parameter 1 -> Linha
**  Parameter 2 -> Coluna
**
**  Retorno 1   -> Posição
*/

unsigned char LCD_pos_row_col(unsigned char row, unsigned char col)
{
    if ( row == 1 ) row = 0x80;
    else if ( row == 2 ) row = 0xc0;
    else if ( row == 3 ) row = 0x94;
    else if ( row == 4 ) row = 0xd4;
    else row = 1;
   
    row += col;
   
    LCD_command(row);
   
    return row;
}

/*****************************************************************************************
******************** Coloca um caracter no display ***************************************
**
**  Parameter 1 -> Caracter
*/

void LCD_write_caracter(unsigned char ascii)
{
    LCD_rs = 1;                                                                         // Set bit P4.7
    LCD_d = ascii;
    LCD_enable();
//    DELAY_0_75Ms();
}

/*****************************************************************************************
******************** Coloca um texto no display ******************************************
**
**  Parameter 1 -> Texto
*/

void LCD_write_string(unsigned char *lcd_string)
{
 while (*lcd_string)
 {
  LCD_write_caracter(*lcd_string++);
 }
}
longo.251272
Byte
 
Mensagens: 318
Registrado em: 08 Nov 2011 11:58
Localização: São Paulo - SP

Re: Problema escrita LCD

Mensagempor edsont » 16 Jan 2019 07:29

Eu acho que falta delay antes de LCD_en=0;
Se eu não estiver enganado o LCD reconhece DATA quando EN vai de 1 para 0. Neste código o EN vai para 0 praticamente ao mesmo tempo que DATA recebe o valor.
Avatar do usuário
edsont
Word
 
Mensagens: 555
Registrado em: 22 Mai 2007 17:19
Localização: Araraquara-SP Brasil - Terra - Sistema Solar - Via Láctea


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x