TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ramirez en 18 de Marzo de 2010, 18:17:42
-
Hola a todos, he realizado un pequeño programa, el cual lee dos entras analogicas y se muestran por un LCD, una lectura en la primera linea y la otra en la segunda. La lectura la realiza correctamente, pero quiero poner la unidad detras de la medida (W/m2), y lo hace bien cuando se aumenta la medida de 1 digito a 4, es decir por ejemplo muestra 3 W/m2, 56 W/m2, 456 W/m2 y 1234 W/m2, todo esto se visualiza correctamente, pero cuando empieza a descender desde un numero de 4 cifras hasta una cifra, ocurre lo seguiente: 1324 W/m2, 323 W/m22, 23 W/m222 y 4 W/m2222, es decir no borra el ultimo 2. ¿Como puedo solucionar el problema?
El programa es el siguiente:
#include "16f877a.h" // Pic a utilizar
#device adc=10 // Usa resolución de 10 bits
#use delay(clock=4000000) // Cristal a utilizar
#fuses xt,nowdt,nobrownout,nolvp,noprotect // Fusibles
#include "lcd.c"
void main (void)
{
float radi1,value;
float radi2,valor;
lcd_init();
lcd_putc(" Detector\n"); // Saca texto \n= cambio de linea
lcd_putc(" Radiacion");
delay_ms(300);
lcd_putc("\f"); // Limpia pantalla
while (1)
{
setup_adc (adc_clock_internal);
setup_adc_ports(RA0_RA1_analog_RA3_REF);
set_adc_channel (0); // Elige canal analogico a medir
delay_us (20); //espera 20 microseg
value=read_adc (); // Hace conversión A/D
radi1=value*(1.3227); // Pasar a W/m2
lcd_gotoxy(1,1); // Acomoda cursor LCD
printf(lcd_putc,"Radi1= %1.0f W/m2",radi1);
set_adc_channel (1); // Elige canal analogico a medir
delay_us (20); //espera 20 microseg
valor=read_adc (); // Hace conversión A/D
radi2=valor*(1.3227); // Pasar a W/m2
lcd_gotoxy(1,2);
printf(lcd_putc,"Radi2= %1.0f W/m2",radi2);
delay_ms (300);
}
}
Como siempre gracias de antamano por vuestra colaboracion. Otra cosa, si veis que puedo hacer alguna mejora, o veis algun error, agradeceria que lo cometarais.
-
Hola ramirez:
Mi recomendación es que hagas un flush de la pantalla y luego coloques lo que quieras...creo recordar que se hacía de la siguiente forma:
printf(lcd_putc,"\fRadi1= %1.0f W/m2",radi1);
Si te fijas se coloca un \f y se borra y pone el resto.
Ya nos contarás si te funcionó.
Un saludete.
-
printf(lcd_putc,"\fRadi1= %1.0f W/m2",radi1);
si le modificas ese numero para indicarle al compilador el numero de digitos a utilizar, funciona bien?
-
Gracias a los dos por las respuestas. En el primer caso si pongo:
printf(lcd_putc,"\fRadi1= %1.0f W/m2",radi1);
funciona correctamente, pero tiene el pequeño inconveniente, de que cada vez que se resfresca la pantalla, hace un pequeño parpadeo.
Lo que he hecho, ha sido poner:
printf(lcd_putc,"Radi1= %4.0f W/m2",radi1);
y de esta forma funciona correctamente, creo (no estoy del todo seguro) que lo que he hecho ha sido reservar 4 dígitos par el número, y a partir de aquí ya pone el resto del texto.
De nuevo os doy a todos las gracias por vuestra participacion.