Reloj termómetro con PIC 16F628

Recientemente he creado un reloj-termómetro hecho con un PIC 16F628A, un sensor de temperatura i2c DS1624, un reloj en tiempo real i2c DS1307 y un LCD de 16×2 compatible con Hitachi HD44780.

El sistema, una vez encendido, muestra la fecha y hora, la temperatura junto con los valores máximo y mínimo que alcanza y finalmente un mensaje personalizado. Aquí hay un video que he grabado del mismo:

El esquema del circuito es el siguiente:

Y desde aquí os podeis bajar el .hex y el código fuente (CCS C)

proyecto

La fecha y hora se configuran con sólo un botón pulsador que está conectado a RB0 y que funciona por temporización e indexación. Es decir, si tu pulsas la primera vez el botón, se mostrará en el LCD la fecha y hora y el indice 0, que indica que vas a modificar el día, entónces si pulsas dentro de los dos segundos siguientes el botón, el día se incrementará, si no lo pulsas, el indice se incrementará a 1 y se podrán modificar los meses de igual manera. Así hasta llegar al indice 5 que son los segundos y después mostrará la fecha y hora actualizadas renovandose cada segundo.

A los diez segundos de mostrar la fecha y hora se muestra la temperatura actual junto con los valores máximo (M) y minimo (m) que se han alcanzado. Si son los 30 primeros segundos de medianoche se resetearán esos valores.

A los diez segundos de mostrar la temperatura, se mostrará un mensaje personalizado que se ha guardado en la EEPROM al programar el PIC. Pasados cinco segundos vuelve a mostrar la fecha y hora.

El PIC usa el oscilador interno de 4Mhz. El programa ocupa un 98% de su memoria de código. Aunque en el video vereis que hay un interruptor de encendido/apagado, un led indicador de encendido/apagado y unas resistencias variables para el LCD, con lo que hay en el esquema es suficiente para funcionar. Vcc son 5 voltios conseguidos a través de un 7805.

76 comentarios en “Reloj termómetro con PIC 16F628

  1. Jonhy

    Buenas, me gusta tu página, suelo entrar bastante, desde que la conocí, cuando publicaste el artículo de domótica a bajo coste, en el que encendías una lámpara. Curioso, estuvimos probándolo un colega y yo, y al final nos funcionó. Tengo algunas dudas:
    – ¿donde puedo comprar los materiales?
    – No tengo ni idea de circuitería, bueno, lo básico que dan en la universidad (técnico informático de sistemas), pero me gustaría aprender, ya que me relaja y no me importaría hacer cosas de estas en mi tiempo libre. ¿Qué conocimientos debo tener para comenzar, o para poder hacer el circuito que montas aquí en el artículo?

    Gracias, saludos.

    Responder
  2. admin Autor

    En la carrera se da poco de electrónica (2 asignaturas) por lo que te recomiendo que seas autotidacta.

    El proyecto de domótica fue un circuito que me compré ya hecho basado en optoacopladores que se enchufan al puerto paralelo y manejan relés.

    Yo empecé con los pocos conocimientos que tenía con el libro de «Microcontrolador PIC16F84. Desarrollo de proyectos» http://www.pic16f84a.org/ y la verdad es que como base está muy bien.

    Luego en páginas web como http://todopic.com.ar o http://picmania.garcia-cuervo.net/ se aprende mucho.

    Los componentes o bien los compras en tiendas de electrónica que haya en tu localidad o en páginas web como http://es.rs-online.com/web/

    Responder
  3. Artejose

    Gostei muito do circuito, mas infelizmente o arquivo não pode ser mais baixado, gostaria de ter os arquivos. Grato.

    Responder
  4. Javier

    Hola amigo.

    Felicidades por tu circuito del reloj y temperatura, me voy a poner con el para hacermelo.
    la unica duda es que he descargado el proyecto y en el zip falta la libreria del sensor de temperatura
    #include
    y me da error al compilar, haber si me lo podias enviar, gracias y felicidades.

    Responder
  5. Lars

    admin :
    Fecha: 30 Junio 2009 @ 23:50

    Hola Javier. Ese fichero es propiedad de CCS y por eso no puedo difundirlo.

    Jaaa… y vos seguro que pagaste por esa libreria.
    javier, podes colocar un sensor de temperatura de cualquier tipo, por ejemplo el LM35 que es muy economico y te da una salida de 10mV por cada Cº, por lo que si conectas la salida a cualquier entrada analogica, podes leer la temperatura directamente del conversor AD del PIC, este proyecto es para BabyProgramadores, cualquier Gil puede hacerlo, y este se da aire de Importancia.
    Por cualquier consulta, escribilas aqui

    Responder
  6. admin Autor

    Lars

    Pues si, he pagado por el compilador CCS.

    No puedo ni imaginar lo Gil que debes ser sabiendo que el pic con el que se ha desarrollado el proyecto no tiene conversor analógico/digital.

    Vamos, que te quieres dar aires de sabiondo diciendo lo del LM35 y ni siquiera sabes el microcontrolador con el que se está haciendo. Lamer

    Responder
  7. carlomagno

    asi es percyman este circuito no funciona esta incompleto le falta las librerias del sensor de temperatura, el administrador deberia de borrar este tipo de proyectos que no funcionan o esta incompletos.

    Responder
  8. admin Autor

    carlomagno y carloncho. Eres lo que se denomina un troll. Eres la misma persona, y de paso pones comentarios ofensivos (ya borrados por supuesto). Debe ser que no tienes amigos y como te aburres en casa prefieres tocar las pelotas al personal. Por cierto, ¿que tal funciona tu router zyxel de telefónica en Lima/Perú?…

    Responder
  9. Javier

    Hola

    Ya monte el circuito y funciona lo de la temperatura, pero ahora tengo otra duda, como lo pongo en hora, ya que pone hora de inicio del ds1307, gracias admin.
    Si me contestas, saludos

    Responder
    1. admin Autor

      Sólo tienes que pulsar el botón. Durante los dos primeros segundos te saldrá un 0 en el display, que significa que pulsando de nuevo el botón varias veces puedes cambiar el día. Si no lo pulsas durante esos dos segundos, te saldrá en el display un 1, que indica que puedes cambiar el mes si pulsas el botón antes de dos segundos y así para el resto de opciones. Esta es la relación de indices:
      0: Cambiar el día
      1: Cambiar el mes
      2: Cambiar el año
      3: Cambiar la hora
      4: Cambiar los minutos
      5: Cambiar los segundos

      Responder
  10. camilo_0515

    Muy buena página y excelentes proyectos; aunque veo que hay quienes se dedican a molestarte porque según ellos no están completos; falso, quieren todo gratis y sin esfuerzo para agenciárcelos con las manos en la cintura.
    No comprenden que hay que poner de nuestra parte y agradecer que haya personas que sacrificando tiempo dinero y esfuerzo (aún en éstos dias) publiquen trabajos que nos den ideas apartir de las cuales desarrollemos y ampliemos las nuestras.
    Gracias por tu aporte, soy autodidacta y buscaba un proyecto como éste.
    Saludos desde Tabasco México.

    Responder
    1. admin Autor

      Hola Camilo

      Muchas gracias por tu apoyo. Es cierto que hay gente que hace esas cosas y no le veo ningún sentido excepto el de fastidiar por que si, sin embargo no me afectan y seguiré compartiendo los proyectos que vaya haciendo.

      Responder
  11. second_2

    hola buen dia, descargue el reloj termometro y trabaja muy bien, lo quisiera modificar para ir aprendiendo un poco de micros pero tal y como esta el programa en C me marca un error al compilar: dice que esta fuera de ROM que una linea es muy larga «leecadenaeeprom» intente en la ayuda de picc aplicando #inline y #separate pero sigue sin compilar, me podrias dar algun tip, gracias.

    Responder
  12. second_2

    el pic16f628A, la simulacion en proteus es perfecta con los archivos que descargue, pero el problema que tengo es la ROM.en el bloc de notas no entiendo:
    #ROM 0x2100={«\f hola TODOPIC»}, LO COMPILO EN PICC, ¿LA LIBRERIA #include «main.h» ME INDICA EL TIPO DE PIC? O TENGO QUE DECLARAR LA LIBRERIA DEL PIC16F628A?

    Responder
    1. admin Autor

      En el main.h tiene un #include <16F628A.h> que obtiene los valores necesarios para compilar. Si quieres puedes enviarme todos los ficheros de tu proyecto en un .zip a oscarrp@gmail.com para que mire que puede estar pasando.

      Responder
      1. Mariano Aranda

        Hola Oscar.

        Encontré tu correo en una página web.

        Quería pedirte un favor.

        Mira que monté el termómetro-reloj que muestra las temperaturas máximas y mínimas (y la actual) con el pic 16f628a y funciona perféctamente si cargo directamente el archivo. main.hex.

        Pero si abro el main.c e intento compilarlo no me deja. El error es que el programa es demasiado largo para el pic 16f628a. Lo compilo con el 16f648a (que es exáctamente igual pero con más capacidad) y lo compila bien, pero no funciona, a pesar de haber cambiado el main.h para nombrar ese pic. El caso es que sí funciona pero me lee 00.00 en la temperatura, no lee la temperatura real. Lo demás (fecha, hora y mensaje) funciona bien.

        Podrías ayudarme? Ya he intentado todo lo que sé y no lo consigo.

        Gracias por tu ayuda.

        Atte:
        Mariano Aranda

        Responder
  13. Paul Molina

    Execelente proyecto me gusto mucho! solo quisiera saber en que program esta realizado el código fuente por que yo uso microcode studio plus!

    Responder
  14. Gustavo

    Amigo muy bueno tu proyecto lo e montado en proteus y funciona de 10, solo me asalta una duda, cuando lo apagas, y lo prendes tienes que volver a actualizar hora y fecha o es automatico, de antemano muchas gracias sigue asi 🙂

    Responder
    1. admin Autor

      La pila de botón esta para eso precisamente, para seguir actualizando los valores de fecha y hora cuando está apagado. El mensaje lo puedes modificar en el fichero main.h.

      Responder
  15. Gustavo

    A se me olvida no se mucho de programacion de microcontroladores ya que recien estoy comenzando y me gustaria saber como modificar el mensaje que dice «todotopic»
    gracias

    Responder
  16. oli

    Hola, tengo una duda… en tu descripción hablas del DS1624 y en el esquema aparece el «1621». Yo encargue este último (15€urazos) pero me da a mi que lo de la función memoria es del «1624» no¿? ¿tengo que cambiarlo?
    un saludo, gracias.

    Responder
    1. admin Autor

      El esquema tiene ese valor porque en su momento no encontré para el eagle la librería para el 1624. El 1624 tiene más precisión en la medida (0,01ºC) en cambio el 1621 tiene sólo 0,5º.

      Responder
  17. oli

    Hola de nuevo, como te dije he montado tu circuito pero con el 1621 en vez del 1624 y temgo problemas… me sale todo como en el video, incluso puedo a través del pulsador cambiar fecha y hora(del 0 al 5) pero pasado los segundos(indice 5) no se memoriza se pone todo a céro otra vez. igual me pasa con la temperatura, todo se queda a céro, al final si sale «Hola Todopic». ¿no crees q puede ser del 1621? como estuve viendo en internet y te comente el 1621 no tiene función memoria… es termometro-termostato, mientras que el 1624 es termometro con memoria… o eso entendi según lo que leí.
    Gracias por todo, un saludo!

    Responder
    1. admin Autor

      Eso es que no se comunican por I2C con el PIC, ¿has puesto las resistencias correctamente y el clock y data también estan bien conectados entre todos?

      Responder
  18. oli

    siiii… tenias razón, ahora si puedo ponerlo en hora y se queda grabado. Y la temperatura marca valores normales y con dos décimas (28.55º marcaba).
    Bueno pues con tu circuito, una fuente de alimentación para que vaya enchufado a la red y un reloj- calendario (proyecto de la 2º evaluación) completo el proyecto integrado de final de curso y termino con el grado superior con muy buen expediente. Gracias por todo de nuevo y si sabes de algún trabajo que necesiten a un técnico superior ruego me pongas en contacto que estoy impaciente por empezar a trabajar en esto de la electrónica. Un abrazo!

    Responder
  19. juan karl lixcanno

    hola, soy nuevo en esto de los pic logre hacer un programa para termometro con pic pero solo aparecen en display caracteres en codigo ascii mi pregunta es como convierto ese dato a numeros reales que coincidan con una temperatura ambiente real???

    Responder
  20. Adrián

    Hola!! Empiezo diciendo que gracias por tu aportacion, magnifico proyecto.
    He montado tu proyecto, pero sólamente me funciona el termometro el reloj no funciona, sin embargo al simularlo con el proteus todo funciona a la perfección. Quería preguntarte si tienes alguna idea de que podría ser lo que ocurre y si es así como podría solucionarlo. Por otra parte, también quería preguntarte como podría cambiar el mensaje de «Hola TODOPIC».
    MUCHAS GRACIAS

    Responder
    1. admin Autor

      ¿Has puesto la pila y el cristal de cuarzo que van conectados al DS1307?

      En cuanto al mensaje tienes dos opciones, o lo modificas y lo recompilas con el CCS; o abres el fichero main.hex con un editor de texto y modificas los bytes directamente ¿qué mensaje le quieres poner?

      Responder
  21. Adrián

    Si le he puesto la pila y el cristal y he comprobado si habia alguna pista cortada, y no encontré nada; por lo que no se muy bien que puede estar pasando.
    En cuanto lo que dices del editor de texto, cuales serían los bytes que tendría que cambiar?
    El mensaje que me gustaría poner sería mi nombre, «ADRIAN RODRIGUEZ».

    Responder
    1. admin Autor

      Ok, te voy a poner una tarea, ponme en una línea todos los caracteres en hexadecimal de la cadena que pides (incluido el espacio entre medias), una vez que hayas hecho eso te digo que hay que modificar en el fichero .hex específicamente.

      Responder
  22. Adrián

    No estoy del todo seguro, pero creo que sería asi ADRIAN RODRIGUEZ:

    41445249414e20524f4452494755455a

    En cuanto al otro error que tenía no se te ocurre que podría ser no??

    Responder
    1. admin Autor

      Edita el fichero main.hex y sustituye estas tres lineas que están casi al final:

      :104200000C002000200048006F006C0061002000BE
      :1042100054004F0044004F0050004900430020006C
      :04422000200000007A

      Por estas otras:

      :104200000C00410044005200490041004E002000D3
      :1042100052004F004400520049004700550045003D
      :044220005A00000040

      Y así debería salirte el mensaje. Por otro lado lo anterior te lo puedes ahorrar si con tu programador de PIC puedes editar la EEPROM del micro ya que es ahí donde está almacenada la cadena.

      Finalmente no se qué más puede estar fallándote en el chip de la hora, ¿seguro que es un DS1307 y no otro modelo? ¿está bien conectado al bus I2C? ¿Tienes otro chip para probar?

      Responder
  23. Adrián

    Otra cosa que te quería decir es que el lcd se ve bastante oscuro y no se lee con total claridad, se me ocurrio sustituir una de las resistencias por un potenciometro para regular el contraste, pero no se cual de ellas debería ser y de que valor tendría que se el potenciometro; sabrías decirme una solución??

    Responder
  24. Adrián

    Si el integrado es un DS1307, y conectado creo que si lo tengo bien, compraré otro integrado esta tarde para ver si es problema de que esté mal.
    Muchas gracias por la ayuda, te comentaré si fui capaz a arreglarlo todo.

    Responder
  25. Adrián

    Hola te escribo para decirte que con tu ayuda he conseguido hacer que todo funcionara a la perfección. Decirte que el problema del reloj era que el ds1307 estaba defectuoso.
    Muchas gracias por tu ayuda

    Responder
  26. 3000gre

    Me has hecho recordar a alguién que había muerto, ¿según esta arquitectura puedes agregar funciones según desees?. ¿el micro se encarga de el bus serial?¿tienes un enlace en donde pueda encontrar información sobre otras funciones a agregar?. Mi mamá tiene un acuario y me desespera el consumo de energía excesivo. Pretendo controlar los dispositivos conectados según horario. Ahhh no me tomes a mal pero la idea de desconfigurar enrutadores está para cuando uno está en comienzos. Son solo unos niños, dejalos que jueguen

    Responder
    1. admin Autor

      Puedes agregarle cualquier funcion, el código fuente esta ahí para modificarlo. No se si te refieres al bus serie rs232 pero en este proyecto se usa bus i2c.

      Responder
  27. Diamond

    Hola, felicitaciones por tu pagina web descargue el proyecto funciona muy bien la simulacion pero cuando intento hacer la compilacion me sale un error mas o menos asi:
    ***Error 71 «main.c» Line 227(0,1): Out of ROM, A segment or the program is too large convertirDecimales
    a por cierto el compilador que estoy usando es el PIC CCS version 4.11
    tiene idea que podria ser? revise y no logre ver cual es el problema
    tal vez se me escapo algo, por lo demas exelente proyecto y sigue adelante

    Responder
  28. William Ayrton

    Hola un super proyecto pero donde ubiko el mplab para poder kompilar todo el proyecto..???? y kmo el mensaje final puedo cambiarlo a otro kmo por ejemplo mi nombre
    Muchas Gracias

    Responder
  29. leon

    estoy desarrollando el mismo proyecto pero al compilar tengo un mensaje de error sobre que esta fuera de ROM, podría por favor ayudarme?, gracias

    Responder
  30. Emmanuel Conde

    Hola que tal primero que nada felicidades por tu proyecto esta genial, solo me gustaria preguntarte que tengo un problema con el reloj del simulado en proteus no se por q no me marca bien la hora y abusando de tu ayuda se podria cambiar el mensaje que muestra a UPIICSA gracias por tu ayuda y espero tu respuesta. Saludos

    Responder
  31. Emmanuel Conde

    si de hecho ya lo baje y lo simule en proteus creo q por eso me di cuenta del mensaje que tiene no lo crees…??? en un comentario anterior comentas como cambiar las lineas y q muestre el nombre de una persona pero como lo cambias q modificas de esas lineas.???

    Responder
    1. admin Autor

      Entonces no entiendo por qué preguntas en qué línea, ya que sólo tienes que editar el fichero main.h para saber donde está. Lo del comentario que mencionas es para una persona que no tenía el compilador CCS y como no lo indicas no se si ese es tu caso o no. Si ese es tu caso entonces tendrás que traducir el mensaje que quieres a hexadecimal antes, tal y como se lo pido a la otra persona.

      Responder
  32. Emmanuel Conde

    Es que yo no tengo el compilador que tu manejas tengo MPlab y no eh encontrado las lineas en donde se cambie el codigo o las palabras por ende acudi a ti a tu ayuda….

    Responder
    1. admin Autor

      De acuerdo, entonces yo te digo qué parte modificar del .hex para que salga el mensaje que quieres, pero no quiero ser yo quien haga todo el trabajo, por tanto tienes que decirme el código en hexadecimal del mensaje que quieres poner.

      Responder
  33. Emmanuel Conde

    Lo siento amigo no se como hacerlo apenas estoy comenzando a hacer estos proyectos y apenas se lo basico de electronica perdon no se de que hables o como le hare ….

    Responder
  34. Rodolfo

    Hola, amigo te felicito por tu web, se un poco de electrónica básica, me gustaría desarrollar tu proyecto pero no se muchas cosas y quiero aprender, se que me toca comprar el programador de pic para realizar este proyecto y lo voy a hacer, quiero desarrollarlo para que monitorear la temperatura del cuarto de mi bb recién nacida, estuve mirando en mercado libre y se consiguen por menos de 10 dolares, pero como me apasiona la electrónica quiero desarrollarlo yo mismo si tu me ayudas, necesitaría una especie de tutorial paso a paso porque no se programar el pic ni cual quemador comprar y esas cosas si puedes ayudarme o alguien de la comunidad le estaría muy agradecido me poses escribir a mi correo electrónico. muchas gracias.

    Responder

Responder a admin Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *