Autor Tema: sacar un valor float en lcd, programando en C  (Leído 10902 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Syd

  • PIC10
  • *
  • Mensajes: 5
sacar un valor float en lcd, programando en C
« en: 03 de Mayo de 2007, 07:52:23 »
hola!! soy nuevo en el foro, un saludo a todos!!:) Soy de España, no se si habra alguien de aqui por el foro jejeje
pues ahi va mi primera pregunta, estoy usando un pic 16f877, programandolo en C con el compilador PCW de CCS, y no se como narices sacar un valor float por un lcd, yo que parece ser que el compilador de CCS no  funciona con valores float. ME estoy volviendo loco porque llevo varios dias atascado en mi proyecto por esto :S
alguien sabe la manera de sacarlo?? lo necesito, ya que estoy haciendo una estacion meteorologica, y para ciertas señales de los sensores(temperatura,humedad,velocidad de viento) necesito valores float.

Y bueno ya que estoy pregunto otra tambien jeje sabeis como se usan los sensores de direccion de viento?? quiero decir, que señal generan y como se convierte?? o si sabeis alguna pagina donde pueda mirar caracteristicas o algo para ir informandome jeje
bueno nada mas, un saludo a todos y gracias!:)

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 611
Re: sacar un valor float en lcd, programando en C
« Respuesta #1 en: 03 de Mayo de 2007, 09:13:33 »
Hola, Bienvenido... te comento que estoy haciendo una estación igual que tú...
Si usas la librería lcd.c pones:

printf(lcd_putc,"\f<    BATERIA    \n   %3.1f V",tension_bateria);

Este es un ejemplo de como expreso en el lcd el valor de tensión de la batería de alimentación de la estación...

%3.1f V      ==> reserva 3 lugares para poner el valor tipo f=float con .1=un decimal y la V es la unidad (voltios)

Revisa la ayuda de PIC C la función printf que esta explicada en forma muy simple.
En la imagen puedes ver los tipos de datos que puedes enviar usando esta función
« Última modificación: 03 de Mayo de 2007, 09:29:35 por Menta »
     

Desconectado Syd

  • PIC10
  • *
  • Mensajes: 5
Re: sacar un valor float en lcd, programando en C
« Respuesta #2 en: 03 de Mayo de 2007, 09:27:37 »
hola! vaya creo que me explique yo mal jeje :)
es que el compilador CCS al parecer, no puede trabajar con numeros float, y no se si hay alguna manera de sacarlos en lcd, usando este compilador.
que compilador estas usando tu???
gracas por contestar ya que asi me has dado otra idea de como sacarlo en pantalla jejeje
un saludo!

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 611
Re: sacar un valor float en lcd, programando en C
« Respuesta #3 en: 03 de Mayo de 2007, 09:42:32 »
Puede ser que tengas una de las versiones reducidas del pic C, entiendo que éstas no soportan todos los tipos de datos.

Yo tengo el compilador CCS PCWH v3.235 y trabajo en su propio entorno de desarrollo (IDE)

Ahora que releo, mencionas PCW, esta versión soporta todo excepto la línea PIC18

Acá hay una tabla de copiladores CCS pero no dice nada de tipos de datos. Pienso que PCW debería soportar flotantes
tabla de compiladores

si declaras float x; y no te da ningun error es porque sí los soporta, prueva con lo que te mencioné antes y luego me cuentas.
Saludos y Suerte!
« Última modificación: 03 de Mayo de 2007, 09:50:06 por Menta »
     

Desconectado Syd

  • PIC10
  • *
  • Mensajes: 5
Re: sacar un valor float en lcd, programando en C
« Respuesta #4 en: 04 de Mayo de 2007, 18:18:04 »
ufff llevo toda la tarde peleandome con el maldito programa, pero no saco nada en claro xDD al final consegui representar un float, guardando por un lado la parte entera, y por otro lado los decimales jeje le tuve que preguntar al profesor porque no encontraba nada ;)
ahora estoy dandole vueltas a una cosa, y es que no se como hacer para sacar la temperatura de un sensor, por el lcd. No tengo claro que operaciones hacer para convertir los voltios que da el sensor a la salida, en grados que es lo que quiero :S si me pudieses alumbrar un poco el camino jeje o dejarma exar un vistazo a tu programa  para sacar alguna idea, porque la verdad es que no se como hacer jeje lo que si consegui es hacer una conversion AD y sacar un voltaje, pero no se como narices pasar el voltaje a los grados centigrados :(
un saludo y gracias por tu ayuda! ;)

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 611
Re: sacar un valor float en lcd, programando en C
« Respuesta #5 en: 08 de Mayo de 2007, 12:01:02 »
A ver que puedo hacer... Te recomiendo que mires los sensores que te envié y si puedes usar ese de sensirion mejor y después me cuentas Sí?, ya que yo me quedé con las ganas de comprarlo...

Aquí te adjunto un programita que es un extracto de lo que estoy haciendo tiene muchas cosas de más, te recomiendo que borres todo lo que esta de más para que lo entiendas mejor y lo simules. Lo único que anda en la simulación es la lectura de temperatura, humedad y presión. Los sensores están representados por los 3 potenciometros de arriba a la izquierda, la adaptación a los valores reales a mostrar está hecha en la función leer_sensores fíjate que no es más que regla de 3. Fijate también en el uso de los modificadores (float) delante de las operaciones, ese puede ser un motivo por el cual no te salen los flotantes...

Recuerdo: PIC C CCS v3.235 y proteus v6.7 SP3

P.D. si quieres un buen empujón en programación con pic c fijate en los ejemplitos de vszener que son una masa!
     

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
incrementar una variable float en lcd,con pulsadores
« Respuesta #6 en: 06 de Enero de 2016, 14:06:21 »
Hola que tal,antes que nada feliz año para todos!!!!.Me engancho en este tema por que mi pregunta va relacionada a algo parecido .Estoy haciendo un control de temperatura con 3 sensores lm35 ,los sensores los leo perfectamente y los tengo representados en float, hasta aca ningún problema.
En el programa tengo un menu donde hago un ajuste por cada sensor para que me accione un relay cuando la temperatura me llegue a un valor maximo y uno para un valor minimo, este valor lo voy incrementando y decrementando con pulsadores y luego los guardo en memoria,y aca esta el problema en pantalla me sale 0.0 y ni incrementa ni decrementa , probe pasarlos a int y si funciona.Que estoy haciendo mal ? adjunto parte del codigo para explicarme mejor
Configuracion inicial y variables :
Código: [Seleccionar]
#include <16f876a.h>
#device *=16
#device adc=10
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT
#define LCD_ENABLE_PIN  PIN_B5                                    ////
#define LCD_RS_PIN      PIN_B6                                    ////
#define LCD_RW_PIN      PIN_B7                                    ////
#define LCD_DATA4       PIN_B4                                    ////
#define LCD_DATA5       PIN_B3                                    ////
#define LCD_DATA6       PIN_B2                                    ////
#define LCD_DATA7       PIN_B1 
#include <lcd.c>
#include <internal_eeprom.c>
#use fast_io(B)
#use fast_io(c)
#use fast_io(a)

float grados1,grados2,grados3;
float Tmin1=0,Tmax1=0,Tmin2=0,Tmax2=0,Tmin3=0,Tmax3=0;

Una de las funciones que me hace la falla :
Código: [Seleccionar]
void ajuste1_Tmax()
{
                lcd_gotoxy(1,1);                 
                printf(lcd_putc,"Ajuste Sensor N1\n Tmax   %01.1f         ",Tmax1);   
               if (input(pin_c5))    // Boton en C4
                {   
                     delay_ms(200);       // antirebote                 
                     Tmax1+=0.5;         // incremento
                }
               if (input(pin_c6))
                { 
                    delay_ms(200);
                    Tmax1-=0.5;
                }                       
               if (input(pin_c7))
                {  delay_ms(50);
                  while(input(pin_c7));           
                  write_float_eeprom(10,Tmax1);  // escribe en la memoria
                  delay_ms(15);
                  Tmax1=read_float_eeprom(10);
                  delay_ms(15);
               lcd_gotoxy(1,2);
               lcd_putc("Tmax1 Memorizado " ) ;
               delay_ms(2000);
               
             }
}

Les agradeceré alguna ayudita .
                                                 Saludos!!!!
PD en la simulacion en proteus funciona ,pero cuando lo grabo en el pic no
« Última modificación: 06 de Enero de 2016, 14:11:20 por arielmdq »
El tiempo es una ilusión ,solo existe el presente................

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re:sacar un valor float en lcd, programando en C
« Respuesta #7 en: 07 de Enero de 2016, 19:49:43 »
Hola ,bueno me respondo a mi mismo  :D .me sigue resultando curioso que no pueda modificar el valor de estas variables tipo float con los pulsadores ,pero hoy hice algo que si funcionó lo que no se es si es lo correcto: declare las variables con valores en vez de colocarlas en cero asi :
Código: [Seleccionar]
      float Tmin1=0.5,Tmax1=20.5,Tmin2=0.5,Tmax2=20.5,Tmin3=0.5,Tmax3=20.5;
Pero con esto solo no funcionó, asi que luego dentro del void main las grabé en la memoria ,asi:
Código: [Seleccionar]
void main()
{

   set_tris_a (0b00101111);
   output_a(0b00000000);
   set_tris_b (0b00000000);
   output_b(0b00000000);
   set_tris_c (0b11110000);
   output_c(0b00000000);
   
   setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF);
   setup_adc (ADC_CLOCK_INTERNAL);
   
    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
    setup_ccp1(CCP_COMPARE_RESET_TIMER);
    CCP_1 = 62500;
    set_timer1(0);
    enable_interrupts(INT_CCP1);
    enable_interrupts(GLOBAL);
   
 write_float_eeprom(10,Tmax1);
 write_float_eeprom(20,Tmin1);
 write_float_eeprom(30,Tmax2);
 write_float_eeprom(40,Tmin2);
 write_float_eeprom(50,Tmax3);
 write_float_eeprom(60,Tmin3);

    lcd_init(); //Inicializamos el display LCD

 
   while(true)
      {

Y de esta manera cuando entro a mi funcion donde decido cambiar este valor para luego volver a grabarlo ,ahora si funciona
Código: [Seleccionar]
void ajuste3_Tmin()
{
                lcd_gotoxy(1,1);                 
                printf(lcd_putc,"Ajuste Sensor N3\n Tmin3   %01.1f          ",Tmin3);     
               if (input(pin_c5))    // Boton en C4
                {   
                   delay_ms(200);       // antirebote
                   Tmin3+=0.5;         // incremento
                }
               if (input(pin_c6))
                { 
                   delay_ms(200);
                   Tmin3-=0.5;
                }                       
               if (input(pin_c7))
                {  delay_ms(50);
                  while(input(pin_c7));           
                  write_float_eeprom(60,Tmin3);  // escribe en la memoria
                  delay_ms(25);
                  Tmin3=read_float_eeprom(60);
                  delay_ms(25);
               lcd_gotoxy(1,2);
               lcd_putc("Tmin3 Memorizado " ) ;
               delay_ms(2000);
               
             }
Pero claro recien ahora me doy cuenta que no me sirve de nada volver a grabar el valor que yo quiero, por que esto era para el caso que se apague el equipo quedaran los valores registrados y de esta manera si se apaga el equipo cuando vuelva a iniciarse se volveran a grabar los valores iniciales , asi que a seguir pensando por que asi no es la cosa  :( :-) 
El tiempo es una ilusión ,solo existe el presente................


 

anything