Autor Tema: Borrar un caracter del LCD, segun lectura de ADC  (Leído 4221 veces)

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

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Borrar un caracter del LCD, segun lectura de ADC
« 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:

Código: [Seleccionar]
#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.


Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Borrar un caracter del LCD, segun lectura de ADC
« Respuesta #1 en: 18 de Marzo de 2010, 18:27:08 »
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.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Borrar un caracter del LCD, segun lectura de ADC
« Respuesta #2 en: 18 de Marzo de 2010, 20:14:55 »
Citar
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?
                                       
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Borrar un caracter del LCD, segun lectura de ADC
« Respuesta #3 en: 19 de Marzo de 2010, 09:38:30 »
Gracias a los dos por las respuestas. En el primer caso si pongo:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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.


 

anything