TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Enigma en 28 de Agosto de 2009, 00:12:33

Título: Flex_lcd
Publicado por: Enigma en 28 de Agosto de 2009, 00:12:33
Hola he venido aquí por otra cuestión... A Alguien le ha funcionado la librería de la LCD en donde dicen que se pueden cambiar los pines de control y de datos como uno quiera..???

Atte: Enigma... La llanerita de Guayana ;-)
Título: Re: Flex_lcd
Publicado por: Suky en 28 de Agosto de 2009, 00:25:52
He probado vaaarias configuraciones y me ha funcionado correctamente ;-) Cual seria el caso particular en donde no te ha funcionado?

Saludos!
Título: Re: Flex_lcd
Publicado por: Enigma en 28 de Agosto de 2009, 00:48:36
Jejeje ya me funcionó.... es que tenia una librería que encontré en otra página, y probe, probe con esa y no me funcionó... luego probe con una que encontre en redpic y funcionó muy bien!!!! gracias a Dios!

Problema solucionado!
Gracias por la atención Sucky!!!!

Voy a tener que revisar porque no funcionaba!!!!

Atte:  Enigma... La llanerita de Guayana  ;-)
Título: Re: Flex_lcd
Publicado por: Enigma en 12 de Septiembre de 2009, 12:51:51
Una preguntica muchachos esta libreria de LCD permite visualizar variables tipo float??, se lo pregunto porque estoy usando varios comandos para imprimir un float en la pantalla de la LCD y pues la verdad no me lo muestra....

La cuestión es que quiero imprimir, la variable dato la cual es una conversión que hago del conversor analógico digital, es decir:

value=read_adc();
dato=value*5/255;
printf(lcd_putc,"V= %2.2g V",dato);

y también uso esta:

 printf(lcd_putc,"V= %2.2f V",dato);

y pues en pantalla solo se muestra:

1.00V ó 2.00V ó 3.00V ó 4.00V ó 5.00V, es decir no se muestran los decimales del voltaje, ni el .1 ni .2 ni .3 ni .4 ni .5 ni .6 ni .7 ni .8 ni .9 


Atte:  Enigma... La llanerita de Guayana ;-)
Título: Re: Flex_lcd
Publicado por: Suky en 12 de Septiembre de 2009, 13:05:16
De esta manera debería funcionar, mientras la variable dato sea float:

Código: C
  1. dato=((float)value)*5/255;
  2. printf(lcd_putc,"V= %2.2f V",dato);


Saludos!
Título: Re: Flex_lcd
Publicado por: Enigma en 12 de Septiembre de 2009, 13:23:34
ehhhh!!!! funciona gracias Sucky... ahora si no es mucha molestia me podrias de cir porque sucede esto??? Porque tengo que colocarle a dato float, si en la declaración de las variables pues en efecto lo declaro como float también....???ç

Atte:Enigma...La llanerita de Guayana ;-)
Título: Re: Flex_lcd
Publicado por: Suky en 12 de Septiembre de 2009, 13:36:31
Seguramente value esta declarado como long (16 bits), entonces al realizar la multiplicación/división realiza los cálculos como variables enteras. Al hacer el casting ((float)value) se le indica al compilador que la variable la trate como float de esa manera no hay truncamiento en los valores obtenidos en las operaciones.



Saludos!
Título: Re: Flex_lcd
Publicado por: Enigma en 14 de Septiembre de 2009, 17:31:00
Ummm... pues no, a value la tengo normalita de 8 bits.... y el dato pues float normalito también!!! ha de ser el compilador que me está poniendo travas!! Seguiré indagando por si acaso a ver porque se da esto!!

Atte:Enigma...La llanerita de Guayana  ;-)
Título: Re: Flex_lcd
Publicado por: migsantiago en 14 de Septiembre de 2009, 18:07:09
El cálculo siguiente se hace como int8 todo el tiempo y al final se pasa a float pero ya con su respectiva pérdida de decimales...

Código: [Seleccionar]
dato=value*5/255;
Corrígelo así y nos avisas:

Código: [Seleccionar]
dato=(float) value*5.0/255.0;
Título: Re: Flex_lcd
Publicado por: Suky en 14 de Septiembre de 2009, 18:22:49
Bueno, la idea es que value esta definido como entero y como te indica Mig hace el calculo de esa manera (Como enteros). Al hacer como te indique dato=((float)value)*5/255; lo trata como float normalito  :mrgreen: ...




Saludos!
Título: Re: Flex_lcd
Publicado por: Enigma en 14 de Septiembre de 2009, 21:29:16
Ohhh Dios.... :oops: Tienes razón Sucky, la variable que me recoje el dato del ADC está declarada como entero largo!!! Mis disculpas por contradecir tu teoria y las de migsantiago también!!!! :oops: Habría jurado que la había declarado como entero de 8 bits.... De igual forma comprobe todas las teorias que me dieron, también las de migsantiago y funciona cheevere colocando los decimales en la formula... Jejeje bueno está equivocación de mi parte me sirvio para aprender los del entero largo y los otros consejos que me dieron!!! cada día voy expandiendo mi aprendizaje en C.... :lol:

Atte: Enigma... La llanerita de Guayana ;-)
Título: Re: Flex_lcd
Publicado por: migsantiago en 14 de Septiembre de 2009, 21:45:11
jeje yo también cuando empezaba con C no sabía sobre las operaciones float... ¡siempre me daban 0.0!  :D
Título: Re: Flex_lcd
Publicado por: Enigma en 15 de Septiembre de 2009, 14:53:34
jajaja bueno más de una vez me han dado cero.....jejejeje ;-) y disculpas de nuevo en serio...

Atte: Enigma... La llanerita de Guayana  :D
Título: Re: Flex_lcd
Publicado por: Suky en 15 de Septiembre de 2009, 14:59:43
jajaja bueno más de una vez me han dado cero.....jejejeje ;-) y disculpas de nuevo en serio...
No hay problema, siempre se aprende algo nuevo. A todos nos paso cuando comenzábamos. Lo único que no me gusta es que cambias el nombre del nick, Sucky?  :D :D

Saludos!
Título: Re: Flex_lcd
Publicado por: migsantiago en 15 de Septiembre de 2009, 15:12:24
Oye Suky, ¿por qué te llamas Suky, Suky?  :D
Título: Re: Flex_lcd
Publicado por: Suky en 15 de Septiembre de 2009, 15:22:18
Oye Suky, ¿por qué te llamas Suky, Suky?  :D
Eeee?? Ni idea, fue lo único que se me ocurrió cuando me registré! Algo de SilverSurfer tendrá!  :D :D
Título: Re: Flex_lcd
Publicado por: Enigma en 15 de Septiembre de 2009, 16:59:55
ay verdad no me había fijado que te cambio el nombre!!! jejejeje está bien Suky!!! :mrgreen:

Atte: Enigma... La llanerita de Guayana ;-)
Título: Re: Flex_lcd
Publicado por: Enigma en 16 de Septiembre de 2009, 03:52:06
Una pregunta....

Se puede hacer que la LCD visualice tres digitos en vez de dos con esta libreria???

Lo pregunto porque estoy incrementando con unos pulsadores una cuenta que va de diez en diez, y pues cuando llega a 90 logicamente se me va 00, pero ¿Sé puede lograr visualizar un tercer digito?, por ejemplo para que marque 100??

Atte: Enigma... La llanerita de Guayana  ;-)
Título: Re: Flex_lcd
Publicado por: Suky en 16 de Septiembre de 2009, 09:34:54
No entiendo el problema? Porque si vas incrementado una variable entera de 8 bits no signada y la muestras de la siguiente manera:
Código: C
  1. printf(lcd_putc,"%u",Variable);
Debería mostrarte el incremento hasta 255 y luego pasar a 0  :?
Título: Re: Flex_lcd
Publicado por: Enigma en 16 de Septiembre de 2009, 23:05:23
Si yo también pense eso....
pero estoy mostrando el incremento de dicha variable y cuando doy 99 oulsos, pues se me va a 00 en vez de irse a 100... La lcd me muestra 00... :? en vez de seguir a 100, 191 y eso...
Y no es problema de declaración porque la misma está como int8...

Es decir tengo esto...

int8 max;

if(!input(PIN_A6))
 {
       max=max+1;
       print(lcd_putc,"max=%u",max);
       delay_ms(2000);
 }

y en la LCD, pues cuando está en 99, pasa a 00............

Es igual también cuando hago el decremento de la variable... Se supone que si está en cero y le resto 1, esta me deberia mostrar como valor -1, cierto??? pues hago la misma subrutina pero en vez de incrementar la variable, la decremento y cuando está en cero y le sigo decrementando se me va a 1 positivo en vez de a -1...


Es decir:

int8 min;

if(!input(PIN_A6))
 {
       min=min-1;
       print(lcd_putc,"min=%u",min);
       delay_ms(2000);
 }


Cuando voy decrementando y llega a 0, se me va a 1 poitivo en vez de -1.... :?

P
Atte: Enigma... La llanerita de Guayana :?