Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/06/2016 #1


No puedo desplegar una variable float en display LCD
Hola Buen día compañeros del foro, les comento la situación de no poder mostrar una variable float en un display LCD con el compilador CCS 5.015 y de plano ya no se que hacer.


El hardward funciona bien puesto que puedo desplegar el texto que guste y inclusive el valor de lectura del ADC. sin embargo la variable float que se llama "voltaje" no puedo lograr que se despliegue de manera adecuada; Solo se muestra correctamente la parte entera, pero los decimales siempre marcan ceros y ya llevo toda la noche tratando de hacerlo sin éxito.

Dejo anexado el codigo:

Código:
#include <18LF4550.h>

#device ADC=12

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=48MHz,crystal=20MHz)

#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#define LCD_EXTENDED_NEWLINE 
 
#define LED PIN_B3

//#include <lcd.c>
#include <lcd420ap.c>
#build (reset=0x1000, interrupt=0x1008) //lineas obligadas para usar bootloader microchip
#org 0x000, 0xFFF                       //lineas obligadas para usar bootloader microchip
void loader(void) {}                    //lineas obligadas para usar bootloader microchip
void main()
{
   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   
   set_adc_channel (0);
  
   int16 potenciometro;
   float voltaje;
   
   lcd_init();

   lcd_gotoxy(1,1);
   lcd_putc("\Prueba de Lectura\n");
   lcd_gotoxy(1,2);
   lcd_putc("\Entrada AN0\n");
  

   while(TRUE)
   {
   potenciometro=read_adc ();
                   
          lcd_gotoxy(1,3);
   printf(lcd_putc,"\ADC=%4lu",potenciometro);
          lcd_gotoxy(1,4);
          voltaje=(5*potenciometro/1023);
   printf(lcd_putc,"\Voltaje=%1.2f",voltaje);       
            
  
   }

}

Ya probé con dos LCD´s diferentes y sus respectivas librerías y el resultado es exactamente lo mismo, como podrán apreciar en el programa solo se pretende mostrar el voltaje que entrega el divisor de voltaje formado por un simple potenciometro conectado a una entrada analógica y hacer la simple conversión a voltaje.

Alguna sugerencia o este compilador requiere de algo que simplemente no conozco, ademas les comparto que es la primera vez que utilizo este compilador.

Mucho les agradeceré que me den una mano.

Saludos
22/06/2016 #2

Avatar de chclau

No se si es LA solucion, pero yo separaria la division en parte entera y parte fraccionaria y enviaria esos dos numeros enteros (formateados con ',' entre ellos) al LCD.
22/06/2016 #3

Avatar de roberttorres

miborbolla dijo: Ver Mensaje
Hola Buen día compañeros del foro, les comento la situación de no poder mostrar una variable float en un display LCD con el compilador CCS 5.015 y de plano ya no se que hacer.


El hardward funciona bien puesto que puedo desplegar el texto que guste y inclusive el valor de lectura del ADC. sin embargo la variable float que se llama "voltaje" no puedo lograr que se despliegue de manera adecuada; Solo se muestra correctamente la parte entera, pero los decimales siempre marcan ceros y ya llevo toda la noche tratando de hacerlo sin éxito.

Dejo anexado el codigo:

Código:
   while(TRUE)
   {
   potenciometro=read_adc ();
                   
          lcd_gotoxy(1,3);
   printf(lcd_putc,"\ADC=%4lu",potenciometro);
          lcd_gotoxy(1,4);
          voltaje=(5*potenciometro/1023);
   printf(lcd_putc,"\Voltaje=%1.2f",voltaje);       
            
  
   }

}

Ya probé con dos LCD´s diferentes y sus respectivas librerías y el resultado es exactamente lo mismo, como podrán apreciar en el programa solo se pretende mostrar el voltaje que entrega el divisor de voltaje formado por un simple potenciometro conectado a una entrada analógica y hacer la simple conversión a voltaje.

Alguna sugerencia o este compilador requiere de algo que simplemente no conozco, ademas les comparto que es la primera vez que utilizo este compilador.

Mucho les agradeceré que me den una mano.

Saludos
Buenas.
Para poder usar tu variable Float con el lcd tienes que modificar tu código en la convercion de voltaje dentro de tu while, seria asi:
Código:
 voltaje=(5.0*potenciometro/1023.0);
22/06/2016 #4


roberttorres dijo: Ver Mensaje
Buenas.
Para poder usar tu variable Float con el lcd tienes que modificar tu código en la convercion de voltaje dentro de tu while, seria asi:
Código:
 voltaje=(5.0*potenciometro/1023.0);
Muchas gracias, por tu rápida y certera explicación, no tengo manera de agradecerte; todo a funcionado perfectamente...

... y yo toda la noche sin saber por que sucedía.

Un saludo a todo el grupo.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.