TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: gfp en 21 de Junio de 2004, 12:23:00

Título: Visualizar numero decimales en LCD
Publicado por: gfp en 21 de Junio de 2004, 12:23:00
Saludos a todos los colaboradores.
Programo en C para PIC bajo HI-TECH y CCS y tengo un problema:
Tengo una variable con el siguiente valor K=20.48864 y necesito visualizarlo en un LCD, existe alguna forma en lenguaje C para realizar este proceso de visualizacion? Recordemos que se debe enviar el correspondiente ASCII al LCD para que se ve a en pantalla. Bueno, ustedes saben el resto...! Graias de antemano.


Título: RE: Visualizar numero decimales en LCD
Publicado por: pocher en 21 de Junio de 2004, 12:58:00
Con C de CCS:

float K;

K=20.48864;

printf(lcd_putc,"K=%2.5f",K);

Espero te sirva. Un saludo

Título: RE: Visualizar numero decimales en LCD
Publicado por: gfp en 21 de Junio de 2004, 16:51:00
Estimado señor, gracias por responder tan oportunmente, pero se me olvidaba decirte que hasta ahora estoy empezando en la programacion de C. Al momento de compilar me sale el siguiente aviso:
*** Error 112 "D:Mis documentosmicrosLenguaje CTemperatura   empe.c" Line 219(0,1): Function used but not defined:  lcd_putc

Hombre has uso de tu buena paciencia y me explicas por favor.
Cual es la funcion que debo declarar?

Gracias nuevamente,

Gherson
Título: RE: Visualizar numero decimales en LCD
Publicado por: Abago en 21 de Junio de 2004, 17:01:00
Creo que para que pocher te pueda ayudar, deberías poner tu código fuente...

Así seguro que encontramos el error...

Título: RE: Visualizar numero decimales en LCD
Publicado por: gfp en 21 de Junio de 2004, 17:29:00
Este es el archivo fuente, por favor, por favor...
Gracias sabios:
#include <16F877A.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NOBROWNOUT
#id 0x0604
#use delay (clock=4000000)
#define   RS      pin_b0
#define   ENABLE   pin_b1

/*-----------DECLARACION DE VARIABLES----------*/
   int      dato;
   int16      i;
   int16   value;
   const   char temp[] = "TEMP: ";
/*----------INICIALIZACION DE VARIABLES Y REGISTROS----------*/
void STARTUP()
   {
      SET_TRIS_A(0b00111111);
      SET_TRIS_B(0b11111100);
      SET_TRIS_C(0b00000000);
      Setup_adc_ports(AN0_AN1_VSS_VREF);
   }
void LCD_control()
   {
   output_low(RS);
   output_high(ENABLE);
   output_c(dato);
   delay_ms(3);
   output_low(ENABLE);
   output_c(0);
   }
void LCD_Inicializa()
   {
   dato=0x02;      /*CURSOR A CASA SIN BORRAR LA RAM*/
   LCD_control();
   dato=0x38;      /*DISPLAY A 8 BITS Y 2 LINEAS*/
   LCD_control();
   dato=0x0C;      /*ACTIVA DISPLAY*/
   LCD_control();
   dato=0x06;      /*ACTIVA DISPLAY*/
   LCD_control();
   dato=0x01;      /*CURSOR A CASA*/
   LCD_control();
   }
void LCD_dato()
   {
   output_high(RS);
   output_high(ENABLE);
   output_c(dato);
   delay_ms(3);
   output_low(ENABLE);
   output_c(0);
   }
void LCD_barrido()
   {
   dato=0x02;
   LCD_control();

   for(i=0;i<=20;i++)
      {
      dato=0XFF;
      LCD_dato();
      delay_ms(50);
      }
   dato=0x02;
   LCD_control();
   for(i=0;i<=20;i++)
      {
      dato=0xFE;
      LCD_dato();
      delay_ms(50);
      }
   }
void main()
{
   STARTUP();
   LCD_Inicializa();
   LCD_barrido();
   delay_ms(1000);
   dato=0x01;
   LCD_control();
   for(i=0;i<=5;i++)
      {
   dato=temp;
   LCD_dato();
      }
while(1)
   {
   setup_adc(ADC_CLOCK_INTERNAL );
   set_adc_channel(0);
   value = read_adc();
   setup_adc(ADC_OFF);
   dato=value;



/*En este punto surge la inquietud.
Resulta que deseo realizar un escalado de unidades, es decir convertirlas a grados Centigrados y para ello
e debe realizar el escalado con la siguiente formula:
Valor con escala = (valor resultado ADC x régimen) + offset
donde:
Regimen=0,2443
Offset=0.15

SUPONGAMOS QUE EL VALOR DEL ADC ES: 120 (decimal), aplicando la formula tendremos
Valor con escala=29,166
La formula muchas veces arrojará un valor decimal como el anmterior, la inquietud nuevamente se presenta:
COMO HAGO PARA VISUALIZAR EL NUMERO 29.166 EN EL LCD.
Gracias POCHER y a todos los expertos en el tema que me puedan  ayudar.
*/
   }
}
Título: RE: Visualizar numero decimales en LCD
Publicado por: pocher en 21 de Junio de 2004, 23:51:00
Yo lo haría así:

Codigo:
#include <16F877A.h>

#device adc=10

#fuses XT, NOPROTECT, PUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT

#use delay (clock=4000000)

#include <LCD.c> //Fichero que pertenece a CCS, viene en la instalación

void main( void )
{
long valor;
float const resoluc= 5.0/1024.0;
float valorconescala,regimen=0.2443,offset=0.15;

setup_adc_ports ( ALL_ANALOG );
setup_adc ( ADC_CLOCK_INTERNAL );
set_adc_channel ( 0 );

lcd_init();

while ( 1 )
{
valor = read_adc();

lcd_gotoxy(1,1);

valorconescala= valor * regimen + offset;

printf ( lcd_putc, "valor=%lu", valor);

lcd_gotoxy(1,2);

printf ( lcd_putc, "escala=%2.5f", valorconescala );

delay_ms(200);
}
}



¡Comprobado y funcionando!

Un saludo
Título: RE: Visualizar numero decimales en LCD
Publicado por: gfp en 22 de Junio de 2004, 23:55:00
Mr. Pocher, No se si eres un humano, una máquina o que seas, pero de cualquier forma llego a la misma conclusión, me dejaste impresionado con la ayuda que me diste. Ya terminé el proyecto gracias a usted y a su desinteresada ayuda, como bien sabemos esta persona nos ayuda a solucionar nuestras dudas con el lenguaje C dedicado a los Microcontroladores sin algo a cambio, ese gesto es de admirar por que pocos hacen eso.
No entiendo como llegaste a este punto de dominar este arte a tan nivel.
Finalmente quiero desearte lo mejor y QUE DIOS TE BENDIGA!.
Y si de algo te soy útil no dudes en pedirmelo que para eso estamos.

Gherson
Título: RE: Visualizar numero decimales en LCD
Publicado por: pocher en 23 de Junio de 2004, 00:14:00
Gracias, contento por haberte ayudado.