TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: daniel_908 en 20 de Noviembre de 2015, 20:55:25
-
Buenas tardes estimados
quiero hacer un termómetro digital con lm35, pero no me marca la temperatura del entorno sus 24v a 27v, siempre me marca el máximo los 5V, 500º,50º y 0.05º cada ves que lo pruebo fisicamente , simulado en proteus va perfecto pero en la parte practica no me funciona :(, no logro hacer que marque la temperatura real del ambiente.
aquí dejo el código:
#include <16F877a.h>
#device adc=10 //Ponemos que se usen 10 bits para A/D
#fuses HS
#use delay(clock=20M) //Frecuencia de reloj de 8MHz
#include <LCD420.c>
void main()
{
int16 lectura;
float voltios;
setup_adc_ports(ALL_ANALOG); //puertos A como analogicos
setup_adc(ADC_CLOCK_INTERNAL); //Reloj interno para laconversion ADC
setup_comparator(NC_NC_NC_NC);
set_tris_a (0b11111111); //Configuramos todo el puerto A como entrada
lcd_init(); //Inicializamos el display LCD
while(true)
{
set_adc_channel(0); //PIN_A0 como canal analogico
delay_us(20);
lectura=read_adc(); //Leemos el nivel del PIN
voltios=500.0*lectura/1024.0; //
printf(lcd_putc,"\f"); //Limpiamos la LCD
delay_ms(1);
printf(lcd_putc,"Temperatura ");
printf(lcd_putc,"\n %01.2f C",voltios );
delay_ms(200);
}
}
a veces pienso que no toma en cuenta el lm35, es una posibilidad.
ruego su ayuda
saludos cordiales
Daniel Villavicencio
- Tienes que ingresar para ver archivos adjuntos -
-
quiero hacer un termómetro digital con lm35, pero no me marca la temperatura del entorno sus 24v a 27v,
24 a 27v ?????? , el PIC solo aguanta 5V.. Como no se entendio mucho lo que tenes. Podrias poner un esquema electrico de lo que tenes armado ?
-
quiero hacer un termómetro digital con lm35, pero no me marca la temperatura del entorno sus 24v a 27v,
24 a 27v ?????? , el PIC solo aguanta 5V.. Como no se entendio mucho lo que tenes. Podrias poner un esquema electrico de lo que tenes armado ?
mil disculpas quise decir 24º a 27º es que estoy muy nervioso :(, en la parte física conecté el cristal de 20Mhz y el master clear,
aquí va el conexionado, si te fijas simulado va de maravilla, pero en práctica me arroja los "5v", me arroja 500º, 50º, 5º, 0,05º (he ido jugando con las formulas "Voltios= 5.0*lectura/1024)pero en la parte práctica no varían los valores de la LCD, ni tampoco marca la temperatura ambiente que son 24º a 27º :(
- Tienes que ingresar para ver archivos adjuntos -
-
digamos que no tan bien la simulacion, ya que tenes 8º y tenes 8.30º del otro lado...
Deberias poder medir lo que sale del LM35 con un multimetro y fijarte si es el valor de tension correcto.
(Como para ir eliminando problemas)
Si eso esta bien.
Luego cambiale el mensaje en el LCD que te muestre el valor de:
voltios y lectura
Para determinar si el calculo es correcto, ( pone lectura donde dice temperatura )
-
Sustituye el LM35 por una pila de 1,5V. La pantalla te indicará alrededor de 307ºC
Saludos.
-
digamos que no tan bien la simulacion, ya que tenes 8º y tenes 8.30º del otro lado...
Deberias poder medir lo que sale del LM35 con un multimetro y fijarte si es el valor de tension correcto.
(Como para ir eliminando problemas)
Si eso esta bien.
Luego cambiale el mensaje en el LCD que te muestre el valor de:
voltios y lectura
Para determinar si el calculo es correcto, ( pone lectura donde dice temperatura )
al parecer no tengo los conocimientos suficientes, me costó un poco hacer que mostrara el valor ADC, pero lo logré, dejo el código primero y después una foto de simulación en proteus.
aquí va el código:
#include <16F877a.h>
#device adc=10 //Ponemos que se usen 10 bits para A/D
#fuses HS
#use delay(clock=20M) //Frecuencia de reloj de 8MHz
#include <LCD420.c>
void main()
{
int16 lectura;
float voltios;
setup_adc_ports(ALL_ANALOG); //puertos A como analogicos
setup_adc(ADC_CLOCK_INTERNAL); //Reloj interno para laconversion ADC
setup_comparator(NC_NC_NC_NC);
set_tris_a (0b11111111); //Configuramos todo el puerto A como entrada
lcd_init(); //Inicializamos el display LCD
while(true)
{
set_adc_channel(0); //PIN_A0 como canal analogico
delay_us(20);
lectura=read_adc(); //Leemos el nivel del PIN
voltios=5.0*lectura/1024.0; //
printf(lcd_putc,"\f"); //Limpiamos la LCD
delay_ms(1);
lcd_gotoxy(1,1);
printf(lcd_putc,"ADC READ = %ld",lectura);
lcd_gotoxy(1,2);
printf(lcd_putc,"\n %01.2f C",voltios );
delay_ms(200);
}
}
lo he echo en proteus y quedó así; el cálculo está bien 5.0 * 23 / 1024.0 = 0.1123
simulado va perfect pero en practica... no me rendiré, algo está pasando :o
- Tienes que ingresar para ver archivos adjuntos -
-
Sustituye el LM35 por una pila de 1,5V. La pantalla te indicará alrededor de 307ºC
Saludos.
te lo agradesco mucho, lo probaré! :o
-
Chiquillos, saqué una foto en práctico y me lee 1024 en ADC y da 4.9v a la salida, incluso medí con el tester y el lm35 da 5v también :o. estoy conectando el lm35 directo porciacaso al pic16f877a, no se me ocurre cómo solucionarlo, me echan una mano?
aquí una foto:
- Tienes que ingresar para ver archivos adjuntos -
-
El lm35 deberia dar como máximo 1.5v, has probado como dice el compañero a mirar la tension de salida con un multimetro?? Puede que sea problema de hardware y no software
-
El lm35 deberia dar como máximo 1.5v, has probado como dice el compañero a mirar la tension de salida con un multimetro?? Puede que sea problema de hardware y no software
puede que sea problema de hardware, por que simulado va perfecto,medi con el multimetro y da los 5v, conoces una forma de acondicionar la señal del lm35?, por que tampoco varía la temperatura :(
-
mas que acondicionar algo lo destruyo, o esta funcinando mal ese LM35. O esta mal conectado.. Algun problema hay, y no es el micro sino solo el LM35