AMIGOS

Hacemos toda clase de trabajos con microcontroladores PIC, comunicarse a proyectoselectronicos_@hotmail.com.

Vendo grabadores de PIC puerto serial con zocalo ZIF a 35 soles, este precio no incluye el envio a todo el Peru.

jueves, 31 de marzo de 2011

TERMOMETRO: pic16f877a y Lm35

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


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


68 comentarios:

  1. hola, 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

    ResponderEliminar
  2. ok, 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.

    ResponderEliminar
  3. si funciona bien, muchas gracias!!!

    ResponderEliminar
  4. Un saludo, antes de todo gracias por publicar esta informacion que es muy usada por todos los estudiantes.

    Debido 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!

    ResponderEliminar
  5. 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/

    ResponderEliminar
  6. Un 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!!

    ResponderEliminar
  7. para cambiar el xtal tambien cambiamos la configuracion en la declaracion Define ADC_CLOCK 3 ;fuente del Reloj 3 (3=rc)
    para no tener errores.

    ResponderEliminar
  8. el ex esta en un lenguaje c o b
    gracias

    ResponderEliminar
  9. El archivo Hex. esta en hecho en picbasic pro, pero al final el Hex. sirve igual para cualquier grabador de pics.

    ResponderEliminar
  10. El archivo Hex. proviene del picbasic pro, al fin de todo sirve para cualquier grabador de pics

    ResponderEliminar
  11. tengo 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

    ResponderEliminar
  12. Para 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.

    ResponderEliminar
  13. Buenos dias quisiera preguntarle lo siguinte ¿como haria el programa para un brazo robotico conectado a la PC? espero su respuesta...

    Esto todo muchas gracias ..
    su Alumno Rember Mamani Condori

    ResponderEliminar
  14. 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!!...

    ResponderEliminar
  15. Bueno hare ese proyecto con 2 entradas o mas pero en picbasic, porque se me hace mas facil y es mas entendible,estate atento.

    ResponderEliminar
  16. Si 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.
    Pero 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.

    ResponderEliminar
  17. 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.

    ResponderEliminar
  18. que tal amigos yo aplique el circuito pero en display solo despliega cuadros negros alguna idea de cual es el error?

    ResponderEliminar
  19. puede q este haciendo falso contacto en tu protoboard el pic, o en ultimo caso este mal tu pic.

    ResponderEliminar
  20. Mira 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.

    ResponderEliminar
  21. como hago para que cuando el termometro pase cierta temperatura especifica alumbre un LED.

    ResponderEliminar
  22. tengo un problema al momento de compilarlo me da un error en DEFINE LCD_DREG PORTB

    ResponderEliminar
  23. lo del indicador con led a cierta temperatura esta facil

    ResponderEliminar
  24. me sacaste de un apuro gracias

    ResponderEliminar
  25. tienes algun curso interactivo de assembler para pic es que esmuy complicado entenderlo

    ResponderEliminar
  26. Mas facil de entender es el pic basic, pero igual puedo dar clases de asembler o pic basic, contacme por hotmail.com, gracias

    ResponderEliminar
  27. Lo 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

    ResponderEliminar
  28. yo 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
    y despues haces el termometro

    ResponderEliminar
  29. 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

    ResponderEliminar
  30. El mplab es para compilar lenguaje asembler, para estos programss de esta pagina se usa el code studio plus que lo puedes bajar de internet.
    Para mplab tengo ejemplos en esta pagina http://proyectoselectronicos1.blogspot.com

    ResponderEliminar
  31. muy buenos proyectos tienes algunos trabajos con el pic16f877a

    ResponderEliminar
  32. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  33. muy bueno pero hay un error en la fila 27 para la desmostracio esta muy bueno pero hay que corejirlo

    ResponderEliminar
  34. POdrias especificar exactamente el error para correjirlo,gracias(fila 27 esta en blanco)

    ResponderEliminar
  35. que 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,
    en 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...

    ResponderEliminar
    Respuestas
    1. pero con esta formula cuando llegues a mas de 64 grados la temperatura se baja a cero, por que?

      Eliminar
  36. Que lenguaje usastes es ensamblador???

    ResponderEliminar
  37. Muchas gracias al lector anterior por su aporte para corregir el error de lectura, y el lenguaje usado es el picbasicpro.

    ResponderEliminar
  38. creo 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?

    ResponderEliminar
  39. en 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.

    ResponderEliminar
  40. A mi me tira error en la sintaxys no me deja copilarlo porque es?

    ResponderEliminar
  41. Me podrian pasar el archivo .bas a mi correo flowmusic@hotmail.com

    ResponderEliminar
  42. error de syntaxis porque?= Define adc_bits 10

    ResponderEliminar
  43. alguien podria poner esta programacion para pic simulator ide no quiero el hex. quiero el bas.

    ResponderEliminar
  44. Muy 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

    ResponderEliminar
  45. alguien q este vago y sin trabajo te podria ayudar.

    ResponderEliminar
    Respuestas
    1. Este programa se mejora usando c, para los que quieren exactitud y resultados con deçimales usen el CCS compiler.

      Eliminar
  46. Estube observando pero lo traslade a pic simulator ide y no lo compila tira un error con esta parte:
    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


    no entiendo por que

    ResponderEliminar
  47. 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.

    ResponderEliminar
  48. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  49. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  50. Hola 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
    gracias :D y buena pagina

    ResponderEliminar
  51. 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.

    ResponderEliminar
  52. Muchisimas 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
    Saludos

    ResponderEliminar
  53. Exacto asi va conectado el cristal de 4 mhz y los condensadores de 22 pf, gracias al amigo anterior

    ResponderEliminar
  54. para gravar el pic es pickit2 usb

    ResponderEliminar
  55. cualquier grabador se puede usar, por usb o puerto serial

    ResponderEliminar
  56. Hola, 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

    ResponderEliminar
  57. Hola 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?

    ResponderEliminar
  58. Muy bueno el proyecto! tengo un LCD de 1x16 puedo reemplarlo por el de 2x16. o modifico mucho el proyecto?
    Gracias

    ResponderEliminar
  59. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  60. Buen 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

    ResponderEliminar
  61. lo probé el programa en el proteus y no me mide temperaturas bajo 0, porque???

    ResponderEliminar
  62. lo probé en el programa proteus y no mide temperatura negativa, porque???

    ResponderEliminar
  63. Hola 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
    Respuesta a angelicatabares96@gmail.com

    ResponderEliminar