TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: johnnycero en 15 de Octubre de 2014, 14:23:45
-
Buenas a todos! Estoy tratando de hacer funcionar un pic18f4550 con una lcd 2x16 powertip pc1602f en ccs y no hay manera si alguien me da una mano estare agradecido por siempre, he leido unos cuantos hilos y no llego a buen puerto. pongo el codigo que estoy usando
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,VREGEN
#use delay(clock=48000000)
#include "flex_lcd.c"
void main()
{ output_high(pin_c0);// esto es para verificar si el pic anda y funciona pues enciende y apaga el
delay_ms(1000); //led antes y despues de intentar hacer funcionar el lcd
output_low(pin_c0);
lcd_init();
for(;;){
lcd_gotoxy(1,1);
printf(lcd_putc,"Hola Mundo ESP");
delay_ms(1000);
lcd_gotoxy(1,2);
printf(lcd_putc,"Hello Word ENG");
delay_ms(1000);
output_high(pin_c0);
delay_ms(1000);
output_low(pin_c0);
delay_ms(1000);
}
}
utilizo la libreria lcd_flex.c midificada para que funcione con el puerto b de la siguiente manera
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
//
#define LCD_RS PIN_b2
#define LCD_RW PIN_b1
#define LCD_E PIN_b0
Tengo el pin mclr a 5v, y el potenciometro para el contraste los pines no usados de la lcd a tierra y la retroiluminación con su debida resitencia pero solo me aparece la primera linea en negro nada de mensaje de ningún tipo. No tengo muy claro los fuses pues este programa lo he copiado para probar la lcd . Agradecería cualquier aporte.
-
Hola johnnycero por lo poco que se el problema es que el lcd no se inicializa, ¿Has tenido en cuenta los delays de dentro de la librería? lo digo porque como dices que lo has copiado si cambias la frecuencia del pic los tiempos del delay cambian.
Otra cosa veo que tienes los pines de Enable R/W y RS escritos en minuscula y creo haber leido que CCS distingue mayusculas de minusculas.
Saludos!
-
hola Miquel_S gracias por tu tiempo, he cambiado a mayúsculas los pines Enable R/W y RS y sigue igual con respecto a los tiempos de delay no tengo idea como modificarlo pues veo que algunas lineas del lcd_flex hay unos delay_cycles() y otros delay_us(). :(
-
intenta bajandole la frecuencia al micro, prueba con 4Mhz o 20Mhz
-
Gracias por la ayuda, decidi regresar a la simulación y probar el programa el cual para mi sorpresa funcionó como debía, creo que se debio a la modificacion de los fuses, pues lo tengo muy claro pero funciona, :-/, pongo el codigo que me funcioa a continuación
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL5,CPUDIV2,NOFCMEN,NOIESO,NOBROWNOUT,NOPBADEN,NOMCLR
#use delay(clock=48000000)
#include "flex_lcd.c"
void main()
{ output_high(pin_c0);
delay_ms(1000);
output_low(pin_c0);
lcd_init();
delay_ms(1000);
for(;;){
lcd_gotoxy(1,1);
printf(lcd_putc,"Hola Mundo ESP");
delay_ms(1000);
lcd_gotoxy(1,2);
printf(lcd_putc,"Hello Word ENG");
delay_ms(1000);
output_high(pin_c0);
delay_ms(1000);
output_low(pin_c0);
delay_ms(1000);
}
}
y la configuración de los pines en la lcd_flex
// These pins are for the Microchip PicDem2-Plus board,
// which is what I used to test the driver. Change these
// pins to fit your own board.
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
//
#define LCD_RS PIN_B2
#define LCD_RW PIN_B1
#define LCD_E PIN_B0
// 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
Eso si he puesto el pin rw a tierra y funciona ya haré mas pruebas para adquirir los datos de la pantalla.
una vez mas gracias por la ayuda.
-
Me alegro que te funcionara.
Saludos!