Sobre la respuesta de jfh900 los defines los realizo dentro de la libreria.
#define LCD_DB4 PIN_C2
#define LCD_DB5 PIN_C3
#define LCD_DB6 PIN_C4
#define LCD_DB7 PIN_C5
#define LCD_E PIN_C0
#define LCD_RS PIN_C1
//#define LCD_RW PIN_A2//No usado
// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.
//#define USE_LCD_RW 1
--- EN el main.c
#include "flex_lcd.c"
void main(void)
{
RC4:D4
RC5:D5
RC6:D6
RC7:D7
RS y E los puedes dejar igual.
Tendrias que hacer varias cosas, para probar de donde vienen tus problemas.
Hazlas en este orden:
- Cambia el tiempo del delay en la espera de escritura, ya que no es una constante para todos los modelos y marcas de displays.
Código: C
void lcd_send_byte(int8 address, int8 n) { output_low(LCD_RS); #ifdef USE_LCD_RW while(bit_test(lcd_read_byte(),7)) ; #else delay_us(60); <<<<<<<<<<<<<<< Sube este tiempo a 800 y luego ve probando donde funciona #endif if(address) output_high(LCD_RS); else output_low(LCD_RS); delay_cycles(1); #ifdef USE_LCD_RW output_low(LCD_RW); delay_cycles(1); #endif output_low(LCD_E);[/li]
[li]Cambia todos los
Delay_cycles(1);
por:
Delay_us(1);
esto es porque segun el cristal puedes estar funcionando a mas velocidad y un delay_cicles equivale a 1 microsegundo para 4 MHz, pero la misma instruccion equivale a 0,2 microsegundos para 20 MHz.....
El uso de la libreria esta hecho para 4 MHz, nadie asegura que funcione en otro cristal...
[/li]