Autor Tema: Visualizar numero decimales en LCD  (Leído 7898 veces)

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

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
Visualizar numero decimales en LCD
« 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.



Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Visualizar numero decimales en LCD
« Respuesta #1 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


Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Visualizar numero decimales en LCD
« Respuesta #2 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

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Visualizar numero decimales en LCD
« Respuesta #3 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...


Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Visualizar numero decimales en LCD
« Respuesta #4 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.
*/
   }
}

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Visualizar numero decimales en LCD
« Respuesta #5 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

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Visualizar numero decimales en LCD
« Respuesta #6 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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Visualizar numero decimales en LCD
« Respuesta #7 en: 23 de Junio de 2004, 00:14:00 »
Gracias, contento por haberte ayudado.