hola le estoy dando vueltas al tema de conversión adc con lm35
lo que quiero saber es como hace para convertir los 10mv por grado centígrado al enviarlo al pic 16f873a y como es que logra mostrar el mismo valor en lcd como es el proceso de conversión tanto adc y binario o como hace el pic para mostrar el mismo resultado que da el lm35 en pantalla lcd
temper=medicion*(0.48875); //Pasa binario a °C
el "0.48875" sale de dividir 5/1023 y el resultado de eso multiplicarlo por 100
el 5 sale de los 5 voltios aplicado a el voltaje de referencia, los 1023 salen
de los 10 bit de revolución del conversor analógico digital que seleccionamos.
Si utilizáramos la resolucion de 8 bist del conversor analógico digital, la
formula fuera (5/255)*100 ya que con 8 bits el numero máximo posible es de 0-255
ese es el proceso que hace el ejemplo con el pic 16f873a quiero saber como lo convierte a binario o como hace el calculo para que en pantalla lcd se vea el resultado de 35grados
ejemplo
sila salida es de 35grados en milivoltios seria 350mv según el ejemplo lo multiplica por 0.47588
350mv*0.48875=0.1710625
0.1710625 a partir de este resultado como lo convierte en 35grados y lo muestra por el lcd
#include <16f873a.h>
#device adc=10 //Usa resolución de 10 bits
#use delay(clock=4000000)
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#define LCD_ENABLE_PIN PIN_C2
#define LCD_RS_PIN PIN_C0
#define LCD_RW_PIN PIN_C1
#define LCD_TYPE 2
#include <lcd.c>
#use standard_io (D)
void main (void)
{
float temper,medicion;
lcd_init(); //Inicia LCD
lcd_putc(" Termometro\n"); //Saca texto
lcd_putc(" con LM35"); //Saca texto
delay_ms(2000);
lcd_putc("\f"); //Limpia pantalla
lcd_putc("Temperatura\n"); //Saca texto
lcd_putc("actual"); //Saca texto
delay_ms(1000);
lcd_gotoxy(14,2); //Acomoda cursor LCD
lcd_putc("oC");
while (1)
{
lcd_gotoxy(8,2); //Acomoda cursor LCD
lcd_putc(" "); //Limpia ese sector de pantalla
lcd_gotoxy(8,2); //Acomoda cursor LCD
setup_adc (adc_clock_internal);
setup_adc_ports (all_analog);
set_adc_channel (0); //Elige canal a medir RA0
delay_us (20);
medicion=read_adc (); //Hace conversión AD
setup_adc (adc_off); //Apaga ADC
temper=medicion*(0.48875); //Pasa binario a °C
//////////////////////////////////////////////////////////////////////////////////
// el "0.48875" sale de dividir 5/1023 y el resultado de eso multiplicarlo por 100
// el 5 sale de los 5 voltios aplicado a el voltage de referencia, los 1023 salen
// de los 10 bit de resolucion del conversor analogico digital que seleccionamos.
// Si utlizaramos la resolucion de 8 bist del conversor analogico digital, la
// formula fuera (5/255)*100 ya que con 8 bits el numero maximo posible es de 0-255
//////////////////////////////////////////////////////////////////////////////////
printf(lcd_putc,"%02.1f",temper); //xxx.x °C
delay_ms (1000);
}
}