TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: sistemasorp en 12 de Enero de 2009, 19:56:13
-
Hola a todos
Quería compartir con vosotros un proyecto que he hecho recientemente. Se trata de un reloj-termómetro realizado con un PIC 16F628A, un sensor de temperatura i2c DS1624, un reloj en tiempo real i2c DS1307 y un LCD 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:
(http://www.sistemasorp.es/relojtermometro/relojtermometro.png)
Y desde aquí os podeis bajar el .hex y el código fuente (CCS C)
proyecto (http://www.sistemasorp.es/relojtermometro/relojtermometro.zip)
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. Si teneis alguna pregunta no dudeis en consultarme.
-
Felicidades por tu proyecto y gracias por compartirlo
-
Enhorabuena por el proyecto y gracias por la contribución!
un saludo :)
-
asi es, ggracias sistemasorp :-/
-
Muy bueno, felicitaciones y gracias por compartirlo!
Estuve viendo el codigo y note q para llevar la cuenta de los segundos haces un delay_ms(1000). Seguro q es lo suficientemente preciso? Porq el programa ejecuta muchas instrucciones y cada una lleva su tiempo, por lo tanto demora un poco mas de un segundo en incrementar, y a medida q pasa el tiempo, ese error se propaga. Podrias usar la interrupcion de timer asi te independizas del resto del codigo.
saludos!
-
que lindo proyecto. saludos!!
-
Hola. Gracias a todos. Me alegro que os haya gustado.
Estuve viendo el codigo y note q para llevar la cuenta de los segundos haces un delay_ms(1000). Seguro q es lo suficientemente preciso? Porq el programa ejecuta muchas instrucciones y cada una lleva su tiempo, por lo tanto demora un poco mas de un segundo en incrementar, y a medida q pasa el tiempo, ese error se propaga. Podrias usar la interrupcion de timer asi te independizas del resto del codigo.
Hola gera.
Es cierto que no es preciso, pero ese delay sólo sirve para tener un contador de tiempo para el cambio de modo y la configuración. No es un problema que entre el modo de fecha/hora y el modo de temperatura pasen 9,80 segundos o 10,20. Por suerte la precisión de la fecha y hora la lleva en exclusiva en DS1307. Otro handicap que tengo es que al haber ocupado el 98% de la memoria del micro tengo poco espacio para añadir más código como el temporizador que comentas, aunque esto último no lo he probado. Gracias por tu idea.
-
muy buen trabajo felicidades y gracias pro compartirlo
:-/ :-/
-
Hola sistemasorp, no se si estaras por aqui para leer este mensaje, pero quiero decirte que he simulado este proyecto con proteus tal y como lo tienes en el esquema, cargando el archivo hex y no funciona. No sale nada en la pantalla.
Quizas te falte algo por añadir o no se cual puede ser el problema.
Ojala puedas ayudarme, pues quiero realizarlo y montarlo sobre circuito impreso.
Un saludo.
-
Comentaros que cometi un error en el diseño y despues de corregirlo es cierto que funciona.
Me lo estoy haciendo, pero tengo un grave problema, no encuentro el DS1621, en su lugar he conseguido el DS1620.
Me encantaria que alguien me pudiera informar donde poder conseguir este componente aqui en España, pues lo busco y solo lo encuentro en paginas fuera de este pais, concretamente en america.
Gracias a todos.
-
Aquí lo tienes
http://es.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&R=5405264
-
Hola, enhorabuena por el proyecto y gracias por compartirlo,
He estado viendo el codigo fuente y falta ds1624.c, no?
Una pregunta, si utilizo un PIC que tenga interfaz serie SPI/I2C se puede utilizar para comunicarse con el termometro DA1624? es que realmente no pone en ninguna parte que sea bus I2C, mas bien parece que tiene su propio protocolo serie. Tu has utilizado pines I/O de proposito general no?
Saludos
-
Me encantaria que alguien me pudiera informar donde poder conseguir este componente aqui en España, pues lo busco y solo lo encuentro en paginas fuera de este pais, concretamente en america.
Si no lo encuentras puedes usar un DS1621, más barato pero con menos precisión en la lectura de la temperatura.
He estado viendo el codigo fuente y falta ds1624.c, no?
Ese fichero ya viene incluido en el CCS en la ruta <archivos de prgrama>\PICC\Drivers
Eso si, la función read_temp() debes sustituirla por esta otra (si no la tenías ya) para que te devuelva los valores el grados centígrados:
int16 read_temp()
{
int datah,datal;
i2c_start();
i2c_write(0x90);
i2c_write(0xaa);
i2c_start();
i2c_write(0x91);
datah=i2c_read();
datal=i2c_read(0);
i2c_stop();
return((int16)datah << 8 + datal);
}
Una pregunta, si utilizo un PIC que tenga interfaz serie SPI/I2C se puede utilizar para comunicarse con el termometro DA1624? es que realmente no pone en ninguna parte que sea bus I2C, mas bien parece que tiene su propio protocolo serie. Tu has utilizado pines I/O de proposito general no?
Saludos
Si, el DS1624 es I2C y puedes usar los pines del PIC destinados a ello.
-
Buenas!
Acabo de ver tu proyecto y tiene muy buena pinta la verdad, de echo yo tengo uno casi igual, lo unico que yo en vez de LCD tengo conectado un SAA1064 con el que controlo 4 displays de tamaño mediano que es donde muestro todo :D
Un saludo!
-
Me encanta tu proyecto!!!
Soy un total novato en electronica y me gustaría armarlo para colocarlo en la moto. Me sería últil.
Pero ahora que lo acabo de simular en la pc, veo que si hay una temperatura negativa, se guarda en el historial de máxima, cosa que debería ir en la mínima...
a ver si me explico. si un día hace -2° de minima y 7 de máxima, y al otro día hace 3°de mínima y 35° de máxima, en el historial me muestra: Max: -2° ; Min: 3°
Ya que no publicaste el código fuente, lo podría modificar??
Disculpá las molestias y muchas gracias por compartirlo con la comunidad.
-
Ya que no publicaste el código fuente, lo podría modificar??
Me imagino que te refieres a que lo publiqué (el enlace está debajo del esquema), y claro que puedes modificarlo, para eso está. Prueba a cambiar int16 max = 0;
int16 min = 0x6400;
por
signed int16 max = 0xF000;
signed int16 min = 0x6400;
-
Me imagino que te refieres a que lo publiqué (el enlace está debajo del esquema), y claro que puedes modificarlo, para eso está.
Perdón! ahí vi que tenés publicado el código y todo perfectamente comentado!
Eso me pasa por ser tan apurado/atolondrado.
Gracias otra vez por tu proyecto y por compartirlo con todos nosotros.
Me merezco una palmada de "tonto" en la cabeza :P
Cuando lo termine, te paso las fotos :D
Saludos!
-
aparte de en RS tambien puedes comprarlo en Farnell, mira aquí Http://www.farnell.com
Muy bueno el proyecto, enhorabuena!!! :)