Hola a todo soy nuevo en este mundo de microcontroladores y es la primera vez que escribo, tengo la siguiente inquietud es que compre un Lcd VT162B/B que supuesta mente era compatible con S6A0069 bueno tuve problema con la compatibilidad del Lcd que no me funcionaba y aun no me funciona , la historia es que pedí ayuda a la empresa ellos me enviaron un archivo y un data de este modelo(no aceptaban devoluciones) y bueno me enviaron una librería que supuestamente trabaja con el LCD VT162B/B y es como me dijo el hombre que la librería es del CCS, Bueno lo compilo y buala me sale un mensaje de error o es un bugs del compilador por la siguiente declaración
#byte DataBus = PORTD // DEFINE BUS DE DATOS
#byte Tris_DataBus = TRISD // DEFINE TRIS DE BUS DE DATOS
#byte ControlBus = PORTE // DEFINE BUS DE CONTROL
#byte Tris_ControlBus = TRISE // DEFINE TRIS DEL BUS DE CONTROL
Yo estoy usando el compilador CCS 4.08 y el pic16f874a no sé si es un bugs o es que me enviaron para callarme un código cualquiera de internet por favor ayúdenme le agradesco por su comprensión.
Pd aquí le envió el código de la libreria que me entrego la empresa para el LCD espero que le sirva y me puedan a su ves ayudarme a corregir:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LCD.H //
// VERSION 2.1 //
// JULIO 2009 //
// //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
#nolist
// DEFINICION DE CONSTANTES PARA USO EN FUNCIONES
#define HOME 0x02 // PARA PONER CURSOR EN LA POSICION 0 DEL DISPLAY. USAR CON WRITE_LCD_COM
#define INCREASE 0x02 // INCREMENTA CURSOR. USAR CON LCD.ID
#define DECREASE 0x00 // DECREMENTA CURSOS. USAR CON LCD.ID
#define SHIFT_ON 0x01 // SHIFT DISPLAY. USAR CON LCD.SHIFT
#define SHIFT_OFF 0x00 // NO SHIFT DISPLAY. USAR CON LCD.SHIFT
#define LCD_ON 0x04 // ACTIVA LCD. USAR CON LCD.MODE
#define LCD_OFF 0x00 // DESACTIVA LCD. USAR CON LCD.MODE
#define CURSOR_ON 0x02 // ACTIVA CURSOR. USAR CON LCD.CURSOR
#define CURSOR_OFF 0x00 // DESACTIVA CURSOR. USAR CON LCD.CURSOR
#define BLINK_ON 0x01 // ACTIVA PARPADEO DEL CURSOR. USAR CON LCD.BLINK
#define BLINK_OFF 0x00 // DESACTIVA PARPADEO DEL CURSOR. USAR CON LCD.BLINK
#define BUS_8 0x10 // DEFINE BUS DE 8 BITS. USAR CON LCD.INTERFASE
#define BUS_4 0x00 // DEFINE BUS DE 4 BITS. USAR CON LCD.INTERFASE
#define CLEAR 0x01 // LIMPIA DISPLAY. USAR CON FUNCION WRITE_LCD_DATA()
#define NOCLEAR 0x00 // NO LIMPIA DISPLAY. USAR CON FUNCION WRITE_LCD_DATA()
#define LINE1 0x00 // PRIMERA DIRECCION DE LINEA 1.
#define LINE2 0x40 // PRIMERA DIRECCION DE LINEA 2.
#define LINE3 0x14 // PRIMERA DIRECCION DE LINEA 3.
#define LINE4 0x54 // PRIMERA DIRECCION DE LINEA 4.
#define LARGO 16 // Editar esta línea para indicar la cantidad de caracteres por línea del display
#define LINEAS 2 // Editar este línea para indicar la cantidad de líneas que dispone el display
#define NULL 0x00
#list
struct
{
char TEXT[LARGO+1]; // define texto para escribir en lcd
int ID; // define si el cursor de incrementará o decrementará
int SHIFT; // define el shift del cursor
int MODE; // define si el display está ON ú OFF
int CURSOR; // define si el cursor estará visible
int BLINK; // define si el cursor parpadeará
int INTERFASE; // define interfase de 4/8 bits
} lcd;
// CONFIGURAR AQUI LOS PUERTO QUE SE USARAN PARA BUS DE DATOS Y DE CONTROL
#byte DataBus = PORTD // DEFINE BUS DE DATOS
#byte Tris_DataBus = TRISD // DEFINE TRIS DE BUS DE DATOS
#byte ControlBus = PORTE // DEFINE BUS DE CONTROL
#byte Tris_ControlBus = TRISE // DEFINE TRIS DEL BUS DE CONTROL
// GENERA PULSOS DE ESCRITURA PARA COMANDOS DEL DISPLAY Y SACA DATO
void WriteLcdComData(int x)
{
Tris_ControlBus = 0xF8 & Tris_ControlBus;
Tris_DatalBus = 0x00;
DataBus = ControlBus = 0x00;
ControlBus = 3;
ControlBus = 0;
ControlBus = 4;
DataBus = x;
ControlBus = 0;
ControlBus = 3;
delay_us(50);
}
// LIMPIA DISPLAY
void ClearLcd(void)
{
WriteLcdComData(CLEAR); // display clear
delay_ms(2);
}
// INICIALIZA EL EL DISPLAY
void IniLcd(void)
{
delay_ms(20);
WriteLcdComData(0x30);
delay_ms(5);
WriteLcdComData(0x30);
delay_us(150);
WriteLcdComData(0x30);
}
// CONFIGURA EL DISPLAY. LOS DATOS PARA LA CONFIGURACION DEBEN SER PUERTOS ANTES DE LLAMAR
// A ESTA FUNCION. LOS DATOS SON PARTE DE LA ESTRUCTURA LCD.
void SetupLcd(void)
{
WriteLcdComData(0x04 | lcd.ID | lcd.SHIFT); //ENTRY MODE SET
WriteLcdComData(0x08 | lcd.MODE | lcd.CURSOR | lcd.BLINK); // DISPLAY ON OFF
WriteLcdComData(0x28 | lcd.INTERFASE); // SET FUNCTION
}
// ESCRIBE DATOS EN EL DISPLAY. X REPRSENTA DESDE QUE DIRECCIÓN DEL DISPLAY SE DESEAN ESCRIBIR LOS DATOS
// E Y INDICA SE SE LIMPIARÁ EL DISPLAY ANTES DE ESCRIBIR
// SI C = CLEAN, EL DISPLAY ES LIMPIADO
// SI C = NOCLEAN, SOLO SE ESCRIBEN LOS DATOS DESDE LA POCISION ESPECIFICADA POR POS
// LOS DATOS A ESCRIBIR DEBE SER COPIADOS PREVIAMENTE EN EL ELEMENTO LCD.TEXT DE LA ESCTRUCTIRA LCD
void WriteLcd(int pos, int c)
{
int *p;
Tris_ControlBus = 0xF8 & Tris_ControlBus;
Tris_DatalBus = 0x00;
DataBus = ControlBus =0x00;
if (c)
{
clear_lcd();
delay_ms(2);
}
pos|= 0x80;
WriteLcdComData(pos);
p = lcd.TEXT;
for (; *p!=NULL; p++)
{
DataBus = 0xff;
ControlBus = 2;
ControlBus = 1;
ControlBus = 5;
DataBus = *p;
ControlBus = 1;
ControlBus = 2;
delay_us(50);
}
}
void PutcLcd(int ini, char data)
{
if (ini != CURRENT)
{
ini|= 0x80;
WriteLcdComData(ini);
}
Tris_ControlBus = 0xF8 & Tris_ControlBus;
Tris_DatalBus = ControlBus = 0x00;
DataBus = 0xff;
ControlBus = 2;
ControlBus = 1;
ControlBus = 5;
DataBus = data;
ControlBus = 1;
ControlBus = 2;
delay_us(50);
}
void ClearLcdLine(int x)
{
int y;
for (y=0; y<=LARGO; y++)
{
lcd.TEXT[y] = ' ';
}
lcd.TEXT[++y] = NULL;
switch (x)
{
case 1 : WriteLcd(LINE1,NOCLEAR);
break;
case 2 : WriteLcd(LINE2,NOCLEAR);
break;
case 3 : WriteLcd(LINE3,NOCLEAR);
break;
case 4 : WriteLcd(LINE4,NOCLEAR);
break;
default : break;
}
}