t6963 GLCD muy bajo contraste

1

Estoy intentando configurar un GLCD 240x128 con el controlador t6963c ( hoja de datos ). Estoy familiarizado con los controladores ks0108 pero novato en t6963. He escrito un código simple con solo lcd-init () que espero ver parpadeando el cursor. Aquí están los problemas:

  1. Parece que GLCD recibe códigos (comandos y datos) correctamente porque se puede ver un cursor parpadeante, pero el contraste es muy bajo, por lo que solo se puede ver en una habitación oscura. He conectado VOUT (el pin de producción de -15 voltios: 18) a un potenciómetro y el otro lado de la olla está conectado al suelo, el limpiaparabrisas a VO (pin: 4) y configura la olla al máximo contraste. ¡Incluso lo probé conectando VOUT directamente a VO pero con el mismo contraste!
  2. el cursor parece parpadear en una posición incorrecta y cambia su posición cada vez que enciendo el módulo y con diferentes alturas.

¿Qué me estoy perdiendo? ¿Es un problema en mi configuración?

void lcd_init(void)
{

    GLCD_CTRL_PORT=0xFF;
    SET_FONT8x8;   // all ctrl bit =1 except FS.  FS=0 means font size=8x8  FS=1 fontsize=6x8
    GLCD_CTRL_DDR=0xFF;

    GLCD_DATA_PORT=0x00;
    GLCD_DATA_DDR=0xFF;

    //all contorl lines high:
    SET_WR;
    SET_RD;
    SET_CE;
    SET_CD;

    CLEAR_RESET;
    _delay_ms(DELAY);
    SET_RESET;
    SET_FONT8x8;

    fontSize=8;
    charsPerRow=NUMBER_OF_COLUMNS/fontSize;


    GLCD_WriteCommand(GRAPHICS_OFF | TEXT_OFF | CURSOR_OFF);  //reset settings

    GLCD_GraphicsSetup(); //set home address and area
    GLCD_TextSetup();     //set home address and area

    GLCD_WriteCommand(TEXT_ONLY_MODE | CGROM_MODE); //mode

    GLCD_WriteCommand(GRAPHICS_ON | TEXT_ON | CURSOR_ON | CURSOR_BLINK_ON);  //turn on settings

    GLCD_CursorSetup();


    GLCD_cursorSetXY(0,0);


}

void GLCD_TextSetup(){

    GLCD_WriteDataW(TEXT_HOME);
    GLCD_WriteCommand(TEXT_HOME_SET_COMMAND);

    GLCD_WriteDataW(charsPerRow);
    GLCD_WriteCommand(TEXT_AREA_SET_COMMAND);
}


void GLCD_GraphicsSetup(){

    GLCD_WriteDataW(GRAPHICS_HOME);
    GLCD_WriteCommand(GRAPHICS_HOME_SET_COMMAND);

    GLCD_WriteDataW(charsPerRow);
    GLCD_WriteCommand(GRAPHICS_AREA_SET_COMMAND);
}


void GLCD_CursorSetup(){

    GLCD_WriteCommand(CURSOR_PATTERN | CURSOR_HEIGHT); // cursor height

    GLCD_WriteDataW(CURSOR_HOME);    //set cursor pointer to memory
    GLCD_WriteCommand(CURSOR_HOME_SET_COMMAND);
}

void GLCD_cursorSetXY(char X,char Y){

    GLCD_WriteData(X);
    GLCD_WriteData(Y);
    GLCD_WriteCommand(CURSOR_POSITION_SET_COMMAND);

}

unsigned char GLCD_ChceckStatus(void) 
{
    unsigned char lcdStatus;
    GLCD_DATA_DDR = 0x00;  //make it ready to accept status


    SET_CD; //command
    SET_WR; //no write
    CLEAR_RD; //read

    CLEAR_CE; //pulse on chip enable and read status
    _delay_ms(DELAY);
    lcdStatus = GLCD_DATA_PIN;

    SET_CE; //no CE anymore
    SET_RD; //no read anymore

    GLCD_DATA_DDR = 0xFF;
    return lcdStatus;
}

void GLCD_WriteCommand( char command)
{

    while(!(GLCD_ChceckStatus()&0x03));
    GLCD_DATA_PORT = command;

    SET_CD;
    SET_RD; // no read
    CLEAR_WR; //write


    PULSE_CE;

    SET_WR;  //no write anymore

}

void GLCD_WriteData( char data)
{

    while(!(GLCD_ChceckStatus()&0x03));
    CLEAR_CD;  //data
    GLCD_DATA_PORT = data;

    SET_RD;     //no read
    CLEAR_WR;  //write

    PULSE_CE;

    SET_WR;  //no write anymore
    SET_CD;  //no data anymore

}

void GLCD_WriteDataW(int data)
{

    GLCD_WriteData(data & 0XFF);
    GLCD_WriteData(data>>8);

}

y los valores son:

#define GRAPHICS_OFF        0x90
#define GRAPHICS_ON         0x98 
#define TEXT_OFF            0x90
#define TEXT_ON             0x94
#define CURSOR_OFF          0x90
#define CURSOR_ON           0x92
#define CURSOR_BLINK_OFF    0x90
#define CURSOR_BLINK_ON     0x91

#define CURSOR_PATTERN      0xA0

#define TEXT_HOME_SET_COMMAND  0x40
#define TEXT_AREA_SET_COMMAND  0x41

#define GRAPHICS_HOME_SET_COMMAND  0x42
#define GRAPHICS_AREA_SET_COMMAND  0x43

#define CURSOR_HOME_SET_COMMAND   0x24
#define CURSOR_POSITION_SET_COMMAND  0x21


#define CGROM_MODE   0x80
#define CGRAM_MODE   0x88
#define EXOR_MODE    0x81
#define OR_MODE      0x80
#define AND_MODE     0x83
#define TEXT_ONLY_MODE 0x84
    
pregunta Aug

1 respuesta

0

Encontré el problema. La disipación de potencia del módulo fue superior a lo que está escrito en la hoja de datos y causó una caída de voltaje. Al usar una fuente de alimentación más fuerte (LM7805 + TIP2955) el contraste está bien ahora.

    
respondido por el Aug

Lea otras preguntas en las etiquetas