Página 1 de 1
Problema escrita LCD

Enviado:
03 Dez 2018 09:34
por longo.251272
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
Re: Problema escrita LCD

Enviado:
11 Jan 2019 13:53
por chrdcv
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!
Re: Problema escrita LCD

Enviado:
11 Jan 2019 17:23
por brasilma
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á.
Re: Problema escrita LCD

Enviado:
15 Jan 2019 13:02
por longo.251272
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++);
}
}
Re: Problema escrita LCD

Enviado:
16 Jan 2019 07:29
por edsont
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.