Saludos a todos.
Mi problema es el siguiente, realice un programa para visualizar en un lcd alguna informacion que voy a necesitar en un proyecto. En la simulacion todo anda bien pero cuando lo implemento solamente me permite mostrar texto. Trato de visualizar un entero con la conversion de itoa que ofrece la libreria stdlib.h pero cuando le doy para visualizar no me aparece nada y se borra el texto tambien en la implementacion.
El LCD que ocupo es un WH2004A Winstar que tiene un controlador KS0066, ya lei en el foro sobre la inicializacion, efectivamente cambie los tiempos como aparecen en la hoja de datos del KS0066 y como Suky recomienda. Bueno tambien ocupo la libreria de Suky: flex_lcd_c18.c. Ya que la libreria XLCD.h de microchip no me funciona en la implementacion aun cambiando los tiempos. Ahora bien tampoco me muestra nada en la implementacion el lcd cuando ocupo el comando printf. Verdaderamente no se que mas estaria pasando.
Aqui pongo el codigo:
#include <p18f4680.h>
#include <delays.h>
#include <stdio.h>
#include <usart.h>
#include <stdlib.h>
#include "flex_lcd_c18.h"
#pragma config OSC = HS,FCMEN = OFF,IESO = OFF //CONFIG1H
#pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
#pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF//CONFIG3H
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
#pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
#pragma config CPB = ON,CPD = ON//CONFIG5H
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
#pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
#pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
#pragma config EBTRB = ON//CONFIG7H
void main()
{
int h,r,t;
char visual[10];
//OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT &
//USART_CONT_RX & USART_BRGH_HIGH,25); // 9600,8,n,1
// Modificamos para utilizar función del usuario, o sea escribir en LCD.-
//stdout =_H_USER;
//printf("Var");
//Incializa el LCD
lcd_init();
h=15;
itoa(h,visual);
lcd_puts(visual);
lcd_gotoxy(1,2);
lcd_putrs("Sistema Embebido");
lcd_gotoxy(1,3);
lcd_putrs("Logica Difusa");
while(1)
{
}
}
Todo en la simulacion anda bien el problema es cuando lo implemento.
Ahora lo que se agrego a la libreria de Suky para trabajar con 4 lineas es lo siguiente:
En el archivo .h:
#define LCD_4X20
En el archivo .c
#ifndef LCD_4X20
void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
#else
void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
switch(y)
{
case 1 : address=0x80; break;
case 2 : address=0xC0; break;
case 3 : address=0x94; break;
case 4 : address=0xD4; break;
}
address += x-1;
lcd_send_byte(0, address);
}
#endif
En cuanto a los tiempos el delay de 5ms se lo aumente a 15ms, para que en la inicializacion se dilate 45ms antes de encenderlo.