El LM35 es un sensor de temperatura con una precisión calibrada de 1ºC. Puede medir temperaturas en el rango que abarca desde -55º a + 150ºC. La salida es muy lineal y cada grado centígrado equivale a 10 mV en la salida. Haremos un medidor de temperatura usando la conversion 10-bit del convertidor A/D del pic16f877a y Ra0 como entrada analogica para mostrar el resultado sobre un LCD de 2*16
; PROGRAMA DE TEMPERATURA
;Configuracion de pines del LCD hacia el PIC16f877a
Define LCD_DREG PORTB ;usamos puertoB como salida de datos
Define LCD_DBIT 4 ; solo usamos 4 bits altos (Rb4-RB7)
Define LCD_RSREG PORTB ;RS va conectado a puertoB
Define LCD_RSBIT 2 ; RS a Rb2
Define LCD_EREG PORTB ; E va conectado a puertoB
Define LCD_EBIT 3 ; E va a Rb3
;Definimos parametros del conversor A/D
Define ADC_BITS 10 ;Numero bits del resultado=10
Define ADC_CLOCK 3 ;fuente del Reloj 3 (3=rc)
Define ADC_SAMPLEUS 50 ;tiempo de muestreo del ADC en useg
Resultado var word ;Historia de la conversion
TRISA = %11111111 ; PORTA configurado como entradas
ADCON1 = %10000010 ; PORTA analog y justificacion del resultado
aux VAR BYTE ; Variable auxiliar para calcular temperatura
Pause 200 ;tiempo para el LCD
;Programa Principal
inicio:
ADCIN 0, Resultado ;lee Ra0 y guarda en resultado
aux = (4 * Resultado )/9
Lcdout $fe,1 ;Limpia la pantalla
Lcdout "temperatura:", # aux ;muestra el resultado en decimal
LCDOUT $fe,$C0,"grados C" ; pasa a la siguiente linea y escribe
Pause 2000 ;espera 1 seg
Goto inicio ;vamos a inicio
End
; PROGRAMA DE TEMPERATURA
;Configuracion de pines del LCD hacia el PIC16f877a
Define LCD_DREG PORTB ;usamos puertoB como salida de datos
Define LCD_DBIT 4 ; solo usamos 4 bits altos (Rb4-RB7)
Define LCD_RSREG PORTB ;RS va conectado a puertoB
Define LCD_RSBIT 2 ; RS a Rb2
Define LCD_EREG PORTB ; E va conectado a puertoB
Define LCD_EBIT 3 ; E va a Rb3
;Definimos parametros del conversor A/D
Define ADC_BITS 10 ;Numero bits del resultado=10
Define ADC_CLOCK 3 ;fuente del Reloj 3 (3=rc)
Define ADC_SAMPLEUS 50 ;tiempo de muestreo del ADC en useg
Resultado var word ;Historia de la conversion
TRISA = %11111111 ; PORTA configurado como entradas
ADCON1 = %10000010 ; PORTA analog y justificacion del resultado
aux VAR BYTE ; Variable auxiliar para calcular temperatura
Pause 200 ;tiempo para el LCD
;Programa Principal
inicio:
ADCIN 0, Resultado ;lee Ra0 y guarda en resultado
aux = (4 * Resultado )/9
Lcdout $fe,1 ;Limpia la pantalla
Lcdout "temperatura:", # aux ;muestra el resultado en decimal
LCDOUT $fe,$C0,"grados C" ; pasa a la siguiente linea y escribe
Pause 2000 ;espera 1 seg
Goto inicio ;vamos a inicio
End
Logico que al circuito hay que colocarle un cristal de 4 MHZ y conectar pines 11 y 32 a 5V. y pines 12 y 31 a Gnd. Aqui tienen el archivo HEX listo para grabarlo, lo pueden bajar del siguiente link:
http://www.4shared.com/file/91xuNvLJ/termometro_corregido.html
NOTA: Ya se corrigio el error gracias al amigo con su formula
excelente
ResponderEliminarhola, antes que nada te felicito por el proyecto, pero tengo una duda baje el archivo hex e hice el circuito en proteus y a la hora de probar todo en el LCD aparece el doble de la temperatura sensada, alguna idea de que est pasando? gracias
ResponderEliminarok, disculpa la demora, es sencillo las veces q he simulado en proteus siempre da errores, pero si lo simulas con el pic simulator IDE, corre bien, te lo puedes bajar de internet, me confirmas chau.
ResponderEliminarsi funciona bien, muchas gracias!!!
ResponderEliminarUn saludo, antes de todo gracias por publicar esta informacion que es muy usada por todos los estudiantes.
ResponderEliminarDebido a eso mismo, como estudiantes tenemos un par de dudas como por ejemplo ¿Puedo aplicar este circuito y programa para un PIC16F874A?
Si es asi ¿como puedo modificar el programa para poder pasarlo al PIC? estoy acostumbrado a utilizar la promacion en Assambler y desearia aplicar este circuito en un proyecto.
Muchas gracias nuevamente y exitos!
el programa corre en cualquier pic16f87X, basta que tenga el conversor analogico digital (adc)solo tenemos que cambiar o declarar que pic estamos usando al momento de hacer la compilacion del programa. En asembler muy pronto publicare un termometro en mi pagina http://www.proyectoselectronicos1.blogspot.com/
ResponderEliminarUn saludo! Ocupe el programa en el PIC16f874A y simulandolo en Proteus me dio perfecto con un Xtal de 4MHz, luego al simularlo con un Xtal de 14.7456MHz me da un error, lo probe con circuitera y el mismo error aparecia, mi pregunta es ¿Como podria implementar este programa para el Xtal de 14.7456MHz? Gracias de antemano!!
ResponderEliminarpara cambiar el xtal tambien cambiamos la configuracion en la declaracion Define ADC_CLOCK 3 ;fuente del Reloj 3 (3=rc)
ResponderEliminarpara no tener errores.
el ex esta en un lenguaje c o b
ResponderEliminargracias
El archivo Hex. esta en hecho en picbasic pro, pero al final el Hex. sirve igual para cualquier grabador de pics.
ResponderEliminarEl archivo Hex. proviene del picbasic pro, al fin de todo sirve para cualquier grabador de pics
ResponderEliminartengo una consulta como puedo utulizar este mismo proyecto pero para 3 lm35 y que habilite una valvula a 20ºC y corte a 60ºC
ResponderEliminarPara ese proyecto usamos multiplexacion en las entradas ADC de un pic16f877a,los 20 y 60 grados es una comparacion y se activa una salida del pic. MUy pronto volvere a seguir publicando proyectos.
ResponderEliminarBuenos dias quisiera preguntarle lo siguinte ¿como haria el programa para un brazo robotico conectado a la PC? espero su respuesta...
ResponderEliminarEsto todo muchas gracias ..
su Alumno Rember Mamani Condori
hola a todos podrian ayudarm con 1 proyecto que voy a realizar con el pic 16f877a un lcd 16x2. se trata de: debo visualizar en el lcd 2 entradas analogicas a la vez. necesito en assembler (en mplab)espero sus respuestas graziaz!!...
ResponderEliminarBueno hare ese proyecto con 2 entradas o mas pero en picbasic, porque se me hace mas facil y es mas entendible,estate atento.
ResponderEliminarSi se estan iniciando en los pics les recomiendo que aprendan el assembler, aunque cuenta al principio, pero aprenderan el funcionamiento interno, ya una vez dominado el mplab pueden pasarse sin dificultad a otro lenguaje de alto nivel, les recomiendo el HI-tehc que es C standart.
ResponderEliminarPero si quieren empezar ya rapido hacer sus proyectos, pueden empezar con basic, les recomiendo otro compilador de basic, el proton o MIKROBASIC que son mas potentes y aceptan el uso de flotantes.
Tener en cuenta que Basic genera mas codigo que el propio C o ensamblador, un programa hecho en basic te puede ocupar el doble de espacio que si tu lo hubieras hecho en ensamblador.
Es bueno dar a conocer a los interesados diferentes opiniones de compiladores y saber cual va ha ser el mejor en muchos aspectos de la programacion, personalmente creo que el Lenguaje C seria el que mejor se aprovecharia no solo para pics sino tambien para otras aplicaciones como en scadas (wincc), ahora compiladores hay bastantes en C, recomiendo el compilador PCW CCS.
ResponderEliminarque tal amigos yo aplique el circuito pero en display solo despliega cuadros negros alguna idea de cual es el error?
ResponderEliminarpuede q este haciendo falso contacto en tu protoboard el pic, o en ultimo caso este mal tu pic.
ResponderEliminarMira yo hice algo parecido y me aparecia una sifra muy distinta, de más del doble, entonces lo que hice fue el resultado de ADCIN 0,RESULTADO; TEMPERATURA = (RESULTADO/2) - 1 y listo ya me dio la temperatura correcta... Gracias espero funcione para ti.
ResponderEliminarcomo hago para que cuando el termometro pase cierta temperatura especifica alumbre un LED.
ResponderEliminartengo un problema al momento de compilarlo me da un error en DEFINE LCD_DREG PORTB
ResponderEliminarlo del indicador con led a cierta temperatura esta facil
ResponderEliminarme sacaste de un apuro gracias
ResponderEliminartienes algun curso interactivo de assembler para pic es que esmuy complicado entenderlo
ResponderEliminarMas facil de entender es el pic basic, pero igual puedo dar clases de asembler o pic basic, contacme por hotmail.com, gracias
ResponderEliminarLo e montado en protoboard tal cual como sale en el circuito. Conecte el pic a la fuente y lo grabe con el pickit 2. ademas le puse el Xtal en las pata 13 y 14 y nada. solo la pantalla despliega cuadros en blanco. No se que mas puedo hacer si tuvieras una solución o alguien que le allá pasado antes se los agradecería. Gracias
ResponderEliminaryo use el winpic800 para grabar el pic. te aconsejo que pruebes primero que tu lcd funcione con un mensaje simple, este ejemplo te cae a pelo MODULO LCD 2*16 con PIC16F628A
ResponderEliminary despues haces el termometro
hola, estimado muy buena pagina, disculpa una consulta, estoi usando mplab hace muy poco tiempo, no tengo muchos conocimientos, el codigo que tu das esta llegar e ingresarlo a mplab y luego grabar el pic 16f877a porque estoy tratando de hacerlo y se me resulta algo complicado, desde ya agradesco tu respuesta
ResponderEliminarEl mplab es para compilar lenguaje asembler, para estos programss de esta pagina se usa el code studio plus que lo puedes bajar de internet.
ResponderEliminarPara mplab tengo ejemplos en esta pagina http://proyectoselectronicos1.blogspot.com
muy buenos proyectos tienes algunos trabajos con el pic16f877a
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarNo tengo el codigo en mikroc.
ResponderEliminarmuy bueno pero hay un error en la fila 27 para la desmostracio esta muy bueno pero hay que corejirlo
ResponderEliminarPOdrias especificar exactamente el error para correjirlo,gracias(fila 27 esta en blanco)
ResponderEliminarque tal de ante mano muchas gracias por el programa,el pequeño error que tiene se puede modificar sin necesidad de amplificadores si no en el mismo progrma del pic, es decir,
ResponderEliminaren la linea:
ADCIN 0, Resultado
Lcdout $fe,1
se declara una nueva variable con cualquier nombre y le ponemos la siguiente instruccion: el nombre de la variable escojida=(5.0*Resultado*100)/1023 y listo el problema se a resuelto espero que le ayude...
pero con esta formula cuando llegues a mas de 64 grados la temperatura se baja a cero, por que?
EliminarQue lenguaje usastes es ensamblador???
ResponderEliminarMuchas gracias al lector anterior por su aporte para corregir el error de lectura, y el lenguaje usado es el picbasicpro.
ResponderEliminarcreo que el problema esta en que no se utiliza realmente el adc 10 bits sino que solo a 8 bits porque no veo que se considere adresh y adresl, ¿o me equivocado?
ResponderEliminaren la cabecera se define el numero de bits a usar: Define ADC_BITS 10 ;Numero bits del resultado=10, elpicbasic usa automaticamente los registros adresh y adresl.
ResponderEliminarA mi me tira error en la sintaxys no me deja copilarlo porque es?
ResponderEliminarMe podrian pasar el archivo .bas a mi correo flowmusic@hotmail.com
ResponderEliminarerror de syntaxis porque?= Define adc_bits 10
ResponderEliminaralguien podria poner esta programacion para pic simulator ide no quiero el hex. quiero el bas.
ResponderEliminarMuy buena la info., estoy new en esto de los pic, quisiera hacer algo similar con un sensor de temperatura lm35, un 18f4550 y un display lcd, yo estoy usando el compilador pcw, si alguien me puede ayudar estare muy agradecido
ResponderEliminaralguien q este vago y sin trabajo te podria ayudar.
ResponderEliminarEste programa se mejora usando c, para los que quieren exactitud y resultados con deçimales usen el CCS compiler.
EliminarEstube observando pero lo traslade a pic simulator ide y no lo compila tira un error con esta parte:
ResponderEliminarDefine ADC_BITS 10 ;Numero bits del resultado=10
Define ADC_CLOCK 3 ;fuente del Reloj 3 (3=rc)
Define ADC_SAMPLEUS 50 ;tiempo de muestreo del ADC en useg
Resultado var word ;Historia de la conversion
TRISA = %11111111 ; PORTA configurado como entradas
ADCON1 = %10000010 ; PORTA analog y justificacion del resultado
aux VAR BYTE ; Variable auxiliar para calcular temperatura
Pause 200 ;tiempo para el LCD
no entiendo por que
tienes que compilarlo en el picbasic que viene con el codestudioplus, en el pic simulator ide tiene errores por que no son iguales las instrucciones, son parecidas un poco de atencion y lo modificas el programa para compilarlo en picsimulatoride.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola me podrías pasar el programa si lo tienes, en pin c compiler y en Turbo C en bloc de notas gracias, este es mi correo: santos_halo@hotmail.com
ResponderEliminargracias :D y buena pagina
hola una pregunta el oscilador de 4 mhz va conectado a los pines 13 y 14 con capacitores de 220mf? por que en la imagen del diagrama no viene especificado.
ResponderEliminarMuchisimas gracias por el ejemplo, acabo de probarlo en proteus y luego en mi entrenadora y va fenomenal. Respondiendo al mensaje anterior, yo lo he montado con un cristal de 4MHz y los condensadores de 22p... pines 13 y catorce sip
ResponderEliminarSaludos
Exacto asi va conectado el cristal de 4 mhz y los condensadores de 22 pf, gracias al amigo anterior
ResponderEliminarpara gravar el pic es pickit2 usb
ResponderEliminarcualquier grabador se puede usar, por usb o puerto serial
ResponderEliminarHola, muy buena pagina, arme el proyecto y lo probe pero no se ve en el display nada en la primera linea y en la segunda solo se ven cuadros negros, podrias ayudarme? ya que lo probe con un 16f84a y funciona perfecto, pero en el 16f877a no, de antemano gracias
ResponderEliminaresta haciendo mal contacto tu LCD
EliminarHola como hago para que funcione como termostato? O sea, cuando llegue a determinada temperatura me encienda algunos led y mientras tanto me mantenga encendidos otros dos?
ResponderEliminarMuy bueno el proyecto! tengo un LCD de 1x16 puedo reemplarlo por el de 2x16. o modifico mucho el proyecto?
ResponderEliminarGracias
Este comentario ha sido eliminado por el autor.
ResponderEliminarBuen proyecto, me podrías pasar como fue exactamente tu codigo ensamblador? en el post pones parte pero faltan las librerias y que configuracion usar, te agradeceria tu respuesta, si quieres puedes enviarme el codigo a mi correo Hecnaru@gmail.com el archivo .asm por favor
ResponderEliminarlo probé el programa en el proteus y no me mide temperaturas bajo 0, porque???
ResponderEliminarlo probé en el programa proteus y no mide temperatura negativa, porque???
ResponderEliminarHola muy buena página, quisiera saber cómo podría ser el código para hacerlo en Block de notas en ensambler es que tenemos uno pero no nos da impares, muchas gracias
ResponderEliminarRespuesta a angelicatabares96@gmail.com