Hola gente !, recurro a uds porque tengo un problema que me esta volviendo loco. Tengo una placa que esta conectada a un display LCD 4x20 con un controlador SPLC780 compatible, aclaro que no uso MicroChip y las funciones las implemente yo. El problema es que no puedo mostrar nada en segunda linea, la primera y la tercera funciona bien y cuando intento mostrar en la cuarta lo hace en la primera, los comandos tipicos borrar pantalla, cursor al home, desplazamiento, cursor, definicion y muestra de carcteres custom, etc. funcionan bien. Basicamente la función que setea el address pointer interno del contralador hace esto:
/*----------------------------------------------------------------------------------------------------------------------------------
** Function Name : SetCol
** Description : Set appropiate address col
** Input : Col
** Output : Nothing
** Notes :
----------------------------------------------------------------------------------------------------------------------------------*/
void SetCol( byte Col, byte Row )
{
/* Express in zero base */
Col --;
switch ( Row )
{
case 1:
WriteLCD( FALSE, (( 1 << LCD_DDRAM ) | ( LCD_LINE1_ADDRESS + Col )), TRUE );
break;
case 2:
WriteLCD( FALSE, (( 1 << LCD_DDRAM ) | ( LCD_LINE2_ADDRESS + Col )), TRUE );
break;
case 3:
WriteLCD( FALSE, (( 1 << LCD_DDRAM ) | ( LCD_LINE3_ADDRESS + Col )), TRUE );
break;
case 4:
WriteLCD( FALSE, (( 1 << LCD_DDRAM ) | ( LCD_LINE4_ADDRESS + Col )), TRUE );
break;
}
}
Donde la función es similar al gotoxy de otras librerias, y las direcciones de cada linea serian estas:
- Linea 1 = 0x00
- Linea 2 = 0x40
- Linea 3 = 0x14
- Linea 4 = 0x54
La función selecciona en base a la linea ( Row ) y hace un OR entre 0x80 que es comando para setear un address interno del LCD con el valor deseado de columna. Pero no hay caso no funciona.
Aclaro que cambie de módulos y el problema persiste, hoy veo si cambio la placa, les adjunto los fuentes para que el pueda lo mire.
Muchas gracias !
Saludos !