Página 1 de 1

Problema escrita LCD

MensagemEnviado: 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

MensagemEnviado: 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

MensagemEnviado: 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

MensagemEnviado: 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

MensagemEnviado: 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.