Problema al inicializar el modo LCD de 4 bits (DEM 20486 SBH-PW-N)

0

Tengo un ATMEGA16 con una pantalla LCD DEM 20486 SBH-PW-N ( hoja de datos ) conectado al puerto C como así

  • C0 - RS
  • C1 - RW
  • C2 - E
  • C3 - no establecido
  • C4 - D4
  • C5 - D5
  • C6 - D6
  • C7 - D7 D0-D3 están conectados a tierra

No he podido encontrar mucha información detallada sobre cómo trabajar con la pantalla LCD y he estado probando esto durante dos días, por lo que cualquier información sobre lo que he estado haciendo mal sería útil.

#define LCDPORT PORTC
#define LCDPIN PINC
#define LCDDDR DDRC
#define RS 0
#define RW 1
#define EN 2

#define D4 4
#define D5 5
#define D6 6
#define D7 7

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

void LcdFlash() {  // Flash enable flag
    LCDPORT |=  (1<<EN);
    _delay_ms(2);
    LCDPORT &= ~(1<<EN);
    _delay_ms(2);
}

void LcdSendNibble(char cmd, char rs) {
    LCDPORT &= ~(1<<RW); // Write mode
    if(rs)
        LCDPORT &= ~(1<<RS); // Command mode
    else
        LCDPORT |=  (1<<RS); // Data mode
    LCDPORT |=  (cmd<<D4);
    LcdFlash();
}

void LcdInit() {

    LCDDDR |=  (1<<RS);     // SET(LCDDDR, RS);
    LCDDDR |=  (1<<RW);     // SET(LCDDDR, RW);
    LCDDDR |=  (1<<EN);     // SET(LCDDDR, EN);
    LCDDDR |=  (0x0F<<D4);  // ASSIGN(LCDDDR, D4, 0x0F);

    _delay_ms(150); //Wait for boot
    //Function set
    LcdSendNibble(0b0010, 0);
    LcdSendNibble(0b0010, 0);
    LcdSendNibble(0b0100, 0); //N = 0, F = 1
    _delay_ms(50);

    // Display on/off control
    LcdSendNibble(0b0000, 0);
    LcdSendNibble(0b1100, 0); //D = 1, C = 0, B = 0
    _delay_ms(50);

    // Display clear
    LcdSendNibble(0b0000, 0);
    LcdSendNibble(0b0001, 0);
    _delay_ms(50);

    //Entry mode set
    LcdSendNibble(0b0000, 0);
    LcdSendNibble(0b0110, 0); //I/D = 1 SH = 0
    _delay_ms(50);
}

int main() {
    LcdInit();
    while(1) {}
}

También agradecería la información sobre lo que significan algunas de las diferentes marcas durante la inicialización. específicamente el indicador de modo de línea N y el indicador de cambio SH.

Mi objetivo es simplemente hacer que la pantalla se ilumine, y luego escribir un carácter en la primera posición, aunque esto no se ha intentado en primer lugar

    

1 respuesta

1

Suponiendo que sea Hitachi HD44780 -compatible, debes estudiar hoja de datos con mucho cuidado y sígalo hasta la letra y funcionará. Debería haber un montón de cosas en la red para un AVR si desea copiar, pero creo que es mejor averiguarlo (tm).

También, asegúrese de tener la entrada de voltaje de contraste configurada en un valor razonable (cerca del suelo para las unidades de rango de temperatura normal). La hoja de datos que vinculó es un poco confusa, ya que muestra 4.5V para Vo. Tenga en cuenta que el voltaje es relativo a Vdd, por lo que para un suministro de 5 V debe ser de aproximadamente 0,5 V con respecto a tierra.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas