16x4 LCD no muestra nada

2

Estoy intentando conectar una pantalla LCD de 16x4 con un chip atmega32. Escribí el siguiente código que solía funcionar para LCD 16x2

#include<avr/io.h>
#include<util/delay.h>

#define dataport PORTC // LCD data port
#define commport PORTD
#define en PD6 // enable signal
#define wr PD5 // read/write signal
#define rs PD4 // register select signal


int wrcomm(unsigned int data)
{
  dataport=data;
  _delay_ms(10);
  commport &= ~(1 << rs);
  commport &= ~(1 << wr);
  commport |= (1 << en);
  commport &= ~(1 << en);
  _delay_ms(10);
  return 1;
}

int wrdata(unsigned int data)
{
  dataport=data;
  _delay_ms(10);
  commport |= (1 << rs);
  commport &= ~(1 << wr);
  commport |= (1 << en);
  commport &= ~(1 << en);
  _delay_ms(10);

  return 1;
}

int lcd_putchar(unsigned char x)
{
  wrdata(x);
  return 1;
}

void lcd_init(void)
{
  DDRC=0xff;
  DDRD=0x70;
  wrcomm(0x38);
  wrcomm(0x01); //turn on display and cursor
  wrcomm(0x0E);//cursor line 1 postn 1
  wrcomm(0x80);
}

int main(void)
{
    lcd_init();
    lcd_putchar('a');
    return 0;
}

Supongo que también debería funcionar para LCD 16x4. Pero no lo hace. La pantalla LCD es un JHD539 164b .

Lo único con lo que he progresado es que si no envío ningún comando, la segunda y la cuarta línea permanecen negras, pero si envío un comando, todas están desactivadas. La olla no ayuda en absoluto.

    
pregunta Rick_2047

2 respuestas

1

El JHD539-164b es un LCD estándar compatible con KS0066. Casi idéntico a los lcds controlados por HD44780, y el código final del usuario sería completamente compatible.

La diferencia entre un LCD de 16x2 y un LCD de 16x4 es solo que un 16x4 es realmente un LCD de 32x2 lógico, en cuanto a la dirección.

Si no lo hace funcionar, verifique nuevamente el cableado y vea si el lcd no está dañado.

    
respondido por el Passerby
0

Parece que está usando su pantalla LCD en el modo de 8 bits. Asegúrese de que en su función lcd_init haya seleccionado este modo, ya que los controladores LCD normalmente tienen el modo de 4 bits configurado como predeterminado.

    
respondido por el Drazen Cika

Lea otras preguntas en las etiquetas