Hola, mi nombre es Imnos, aunque llevo registrado en el foro desde hace un tiempo, la verda es que practicamente no he escrito nada.
Desde hace poco intento aprender programacion en C por hobby y, mas o menos he ido leyendo el foro con ejemplos expuestos aquí, en diversos temas etc para poder aprender, ahora bien:
Desde hace un par de semanas intento montar en la protoboard un termometro con un LM35DZ que tengo por aqui suelto, el problema es que a la hora de correr el pic, en la pantalla del LCD que tengo puesta me marca valores un tanto extraños (unos 18.5 ºC), digo extraños porque tengo un termometro convencional comprado el cual arroja por su LCD unos 20.5 ºC.
Espero que podais ayudarme o al menos intentarlo
Os dejo el programa realizado en C por el compilador CCS:
#include "16f876.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 "flex_lcd.c"
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_C0
#define LCD_RW PIN_C1
#define LCD_E PIN_C2 // Libreria para utilizar LCD
void main (void)
{
float tempx,value;
lcd_init(); // Inicia LCD
lcd_putc(" Termometro\n"); // Saca texto \n= cambio de linea
lcd_putc(" Digital"); // Saca texto
delay_ms(800);
lcd_putc("\f"); // Limpia pantalla
lcd_putc("Temp actual\n"); // Saca texto
delay_ms(1000);
lcd_gotoxy(14,2); // Acomoda cursor LCD
lcd_putc("oC");
while (1)
{
lcd_gotoxy(7,2); // Acomoda cursor LCD
lcd_putc(" "); // Limpia ese sector de pantalla
lcd_gotoxy(7,2); // Acomoda cursor LCD
setup_adc (adc_clock_internal); // selecciona el moodo para la configuracion del modulo conversor A/D
//correspondientes a los bits7:6 del ADCON0
setup_adc_ports (all_analog); //DEFINICION DE LAS ENTRADAS ANALOGICAS CORRESPONDIENTE A LOS BITS 3-0 DEL ADCON1
set_adc_channel (0); // Elige canal analogico a medir
delay_us (20); //espera 20 microseg
value=read_adc (); // Hace conversión A/D
// Apaga ADC
tempx=value*(0.48875); // Pasar a ºC
printf(lcd_putc,"%02.1f",tempx);
delay_ms (2000);
}
}
Gracias de antemano.
PD: Una ultima pregunta: lo subrayado en Rojo alquien me puede explicar de donde viene esa cifra?