Ajuda com display 20x4

Enviado:
31 Jan 2007 18:04
por edusoppa
Ola pessoal,
Nao estou conseguindo escrever no display 20x4 sera que alguem pode me dar uma dica, obrigado.

Enviado:
31 Jan 2007 20:30
por Orcino
Qual linguagem vc tá usando ?
Orcino

Enviado:
31 Jan 2007 21:19
por phophollety
Em quantos bits está trabalhando? 4 ou 8?
Pode parecer idiota.. mas lembrou de inicializar o lcd antes?
Onde comprou? Pagou quanto? Qual cor e tem back? Estou precisando de um!
Re: Ajuda com display 20x4

Enviado:
31 Jan 2007 22:43
por Renie
Edu,
Veja se o tutorial que fiz ha alguns anos ajuda, estáno meu site!

Enviado:
02 Fev 2007 08:22
por phophollety

Enviado:
05 Fev 2007 20:34
por edusoppa
Pessoal estou usando linguagem C
Eu nao esqueci de inicializa-lo, mas nao sei se estou inicializando corretamente.

Enviado:
06 Fev 2007 18:59
por edusoppa
Pessoal problema resolvido, na verdade eu tava comendo bola no enderecamento das linhas do display, na verdade eh um pouco sacal, mas blz, obrigado a todos, segue o codigo caso alguem precise.
Um abraco,
Eduardo.
/************************************************************************/
/* MOD_LCD.C - Biblioteca de manipulação de módulo LCD */
/* */
/* Autor: Fábio Pereira */
/* */
/************************************************************************/
// As definições a seguir são utilizadas para acesso aos pinos do display
// caso o pino RW não seja utilizado, comente a definição lcd_rw
#ifndef lcd_enable
#define lcd_enable pin_d1 // pino enable do LCD
#define lcd_rs pin_d0 // pino rs do LCD
//#define lcd_rw pin_e2 // pino rw do LCD
#define lcd_d4 pin_d4 // pino de dados d4 do LCD
#define lcd_d5 pin_d5 // pino de dados d5 do LCD
#define lcd_d6 pin_d6 // pino de dados d6 do LCD
#define lcd_d7 pin_d7 // pino de dados d7 do LCD
#endif
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 linhas
#define lcd_seg_lin 0x40 // Endereço da segunda linha na RAM do LCD
int cont;
// a constante abaixo define a seqüência de inicialização do módulo LCD
byte CONST INI_LCD[4] = {0x20 | (lcd_type << 2), 0xf, 1, 6};
void lcd_envia_nibble( byte dado )
// envia um dado de quatro bits para o display
{
// coloca os quatro bits nas saidas
output_bit(lcd_d4,bit_test(dado,0));
output_bit(lcd_d5,bit_test(dado,1));
output_bit(lcd_d6,bit_test(dado,2));
output_bit(lcd_d7,bit_test(dado,3));
// dá um pulso na linha enable
output_high(lcd_enable);
output_low(lcd_enable);
}
void lcd_envia_byte( boolean endereco, byte dado )
{
// coloca a linha rs em 0
output_low(lcd_rs);
// aguarda o display ficar desocupado
//while ( bit_test(lcd_le_byte(),7) ) ;
// configura a linha rs dependendo do modo selecionado
output_bit(lcd_rs,endereco);
delay_us(100); // aguarda 100 us
// caso a linha rw esteja definida, coloca em 0
#ifdef lcd_rw
output_low(lcd_rw);
#endif
// desativa linha enable
output_low(lcd_enable);
// envia a primeira parte do byte
lcd_envia_nibble(dado >> 4);
// envia a segunda parte do byte
lcd_envia_nibble(dado & 0x0f);
}
void lcd_ini()
// rotina de inicialização do display
{
byte conta;
output_low(lcd_d4);
output_low(lcd_d5);
output_low(lcd_d6);
output_low(lcd_d7);
output_low(lcd_rs);
#ifdef lcd_rw
output_high(lcd_rw);
#endif
output_low(lcd_enable);
delay_ms(15);
// envia uma seqüência de 3 vezes 0x03
// e depois 0x02 para configurar o módulo
// para modo de 4 bits
for(conta=1;conta<=3;++conta)
{
lcd_envia_nibble(3);
delay_ms(5);
}
lcd_envia_nibble(2);
// envia string de inicialização do display
for(conta=0;conta<=3;++conta) lcd_envia_byte(0,INI_LCD[conta]);
}
void lcd_pos_xy( byte x, byte y)
{
byte endereco;
/*if(y!=1)
endereco = lcd_seg_lin;
else
endereco = 0;*/
//----Modificacao
switch(y)
{
case(1):
endereco=0;
break;
case(2):
endereco=0x40;
break;
case(3):
endereco=0x14;
break;
case(4):
endereco=0x54;
break;
}
//-------------
endereco += x-1;
lcd_envia_byte(0,0x80|endereco);
}
void lcd_escreve( char c)
// envia caractere para o display
{
switch (c)
{
case '\f' :
lcd_envia_byte(0,1);
cont=1;
delay_ms(2);
break;
case '\n' :
case '\r' :
cont++;
lcd_pos_xy(1,cont);
break;
case '\b' : lcd_envia_byte(0,0x10);
break;
default : lcd_envia_byte(1,c);
break;
}
}