TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kain589 en 19 de Febrero de 2009, 19:51:25
-
Hola compañeros, me estoy adentrando en el uso del lcd y como todos los comienzos surgen algunos problemillas.
A continuacion pongo el programa realizado, el uso de pina0 es a modo de indicador. Cuando comento (//) las lineas correspondientes al uso del lcd, el programa consigue hacer parpadear el led, pero si pongo esas lineas se queda colgado; ademas en la pantalla del lcd solo aparecen ?
#include <18F4550.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,NODEBUG,VREGEN,NOUSBDIV
#use delay(clock=4000000)
#include <lcd.c>
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
///PROGRAMA
lcd_init(); //inicializa lcd
while(1)
{
delay_ms(2000);
printf(lcd_putc,"hola mundo ;)\soy manolito"); //muestra por pantalla el mensaje
output_high(PIN_A0);//indicador programa funciona
delay_ms(2000);
printf(lcd_putc,"\f"); //limpia lcd
output_low(PIN_A0);
delay_ms(2000);
printf(lcd_putc,"Soy una prueba"); //muestra por pantalla el mensaje
}
}
La libreria que uso es la de CCs, asi que pongo aqui el codigo a ver si alguien me puede ayudar a ver que pasa. Gracias de antemano.
-
te falta configurar los pines I/O
con...
#use fast_io(a)
y dentro de void main()
set_tris_a (0x00);
en el caso que todo sean salidas...
si esta la resistencia pull-up del MCLR
mira tambien los fuses, si tienes que colocar el MCLR o NOMCLR
no se... por dar ideas...
a lo mejor lo mas esencial se nos olvida... y te aseguro que yo soy uno de esos jajajajaj
-
Si esta parte de tu programa compila, salveme DIOS!!!
printf(lcd_putc,"hola mundo ;)\soy manolito"); //muestra por pantalla el mensaje
Tiene el : de terminacion antes del cierre del parentesis!!! :D :D
Seguro que compila sin errores??? :lol: :lol: :lol:
-
si que compilara bien ya que el cierre de la sentencia va despues de las dobles comillas y el parentesis...
o por lo menos eso creo.....
yo he echo la simulacion en proteus pero sustituyendo el pic y no me ha dado ningun error...
lo unico es que el mensaje sale mal....
al borrar pantalla lcd_putc ("\f");
y no situar el puntero.... lcd_gotoxy(x,y);
rectifico..... depende del lcd sale bien o mal.. yo tenia un circuito con uno de 2x16 y no salia bien....
-
Muchas gracias por las respuestas, mañana lo volvere a mirar y a montar.
Lo del ";" como dice ppyote, al estar en el string no da problemas.
Edito-> Ya consegui hacerlo funcionar, me faltaba tamnbien el lcd_gotoxy como señalaba ppyote, no tenia los pines del lcd no usados conectados a tierra no se si por esto me daba el fallo o por otra conexion, pero hoy al montarlo ha funcionado. Me he pasado al 18f2550, este es el codigo:
#include <18F2550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOUSBDIV,VREGEN
#use delay(clock=4000000)
#define use_portb_lcd True//Para usar puerto B
#include <lcd.c>
void main()
{
output_low(PIN_A0);//indicador programa funciona
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
delay_ms(1000);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
///PROGRAMA
lcd_init(); //inicializa lcd
while(1)
{
printf(lcd_putc,"Hola mundo\n"); //muestra por pantalla el mensaje
output_high(PIN_A0);//indicador programa funciona
delay_ms(1000);
output_low(PIN_A0);//indicador programa funciona
printf(lcd_putc,"Soy una prueba"); //muestra por pantalla el mensaje
delay_ms(1000);
lcd_putc('\f'); //borra lcd
lcd_gotoxy(1,1);
delay_ms(100);
printf(lcd_putc,"Adios mundo\n"); //muestra por pantalla el mensaje
output_high(PIN_A0);//indicador programa funciona
delay_ms(1000);
output_low(PIN_A0);//indicador programa funciona
printf(lcd_putc,"Y segunda linea"); //muestra por pantalla el mensaje
delay_ms(1000);
lcd_putc('\f'); //Borra lcd
lcd_gotoxy(1,1);
delay_ms(100);
}
}
Lo pongo por si a alguien le interesa o viene bien algun dia
-
revisa los fuses....
HS con 4 mhz?
mejor utiliza XT...
no crees?
-
Pues no me dio ningun problema, como decia consegui hacerlo funcionar con ese codigo
-
ok... en verdad en ese ejemplo no es muy significativo pero en algun otro programa con una mayor importancia en cuanto a tiempos deberias de tenerlo en cuenta
a mi me ha pasado en varias ocasiones y casi todo por los fuses