Termometro grafico LCD nokia 3310

Graphic Thermometer with Nokia LCD


Navegando por la Web, uno se encuentra a veces cosas curiosas.
En esta ocasión me encontré con un montaje de un termómetro con un DS1820 ( 1-wire ) y una LCD gráfica de un teléfono nokia 3310.
El montaje era sencillo y funcional. Lo podeis ver en la pagina de Ivica Novakovic
Entonces, recordé que tenía alguno de estos LCDs y algún DS1820 y me dije, vamos a probar la LCD gráfica y el sensor de temperatura 1-wire con los mínimos componentes posibles ( como siempre ) y apurando al máximo la memoria del PIC.
Sometimes, surfing by the WEB i find cool gadgets.This time, i found a thermometer with a DS1820 (1-wire) and a graphical LCD from a nokia 3310 phone. The device was simple and functional. You can to see it at Ivica Novakovic Webpage.
Then, I remembered that it had some of these LCDs and some DS1820 and I said myself, we are going to test the graphical LCD and the sensor of temperature with less components that was possible (like always) and taking advantage of PIC's memory at maximun.

¿Como se podia mejorar el circuito ya de por sí muy simple?
Is possible to improve this simple circuit?

1- Eliminando un par de condensador antiparásitos, ya que va alimentado por una pila botón de 3v
2- Usar un PIC con más memoria para implementar algo novedoso, en este caso una gráfica en pantalla con muestras tomadas en intervalos programados. ( Gracias DeSIG por la sugerencia de la gráfica ).
1- Suppresing a pair of capacitors suppresors, because the circuit is powered by a 3v battery.
2- Using a PIC with more memory to implement a new feature, in this case a graph in screen with samples taken in programmed intervals (DeSIG Thx for the suggestion of the graph).

Vamos a ello:
Esto es lo que tenía por ahí ( bueno, la PCB no la tenía... hubo que hacerla :) )
Come on do it:

These are some used components that i had at home:



Si observamos el esquema, vemos que todo está reducido a la mínima expresión, un PIC12F683, un condensador ( necesario para la LCD ), un DS1820 y su resistencia de pull-up y la lcd de un viejo nokia 3310.

If we observed the schematic, we see that device is reduced to the minimum expression, a PIC12F683, a capacitor (needed for the LCD), a DS1820 with their resistance of pull-up and the LCD from an old nokia 3310 phone.






Así que todo depende del software.
Bien la idea es conseguir que la pantalla nos muestre algo así:

All in device depends of PIC software.
The purpose is that LCD seems as this:




Arriba tenemos la temperatura actual, en el centro una gráfica con la línea de 0º centígrados y subdividida en divisiones de 10º Centígrados y a la derecha un termómetro animado, que marca la temperatura hasta un máximo de +40ºC y un mínimo de -40ºC. La escala del termómetro se cambia automáticamente al pasar a valores negativos de temperatura.
La gráfica, va poniendo puntos a intervalos programados de tiempo, que van desde 1 seg. aproximadamente, hasta unos 65535 segundos con un máximo de 57 valores en pantalla.
Hay que pensar que esto no es un montaje profesional, por supuesto, y las divisiones en pantalla, no tienen resoluciones de 0,5º ni mucho menos.
Cada pixel ( en la escala vertical ) representa un intervalo de 2º de temperatura, con lo que el pixel que está justo encima del 0, se marcará cuando el valor de la temperatura esté comprendido entre 2ºC y 4ºC y así todos hacia arriba.
El indicador de temperatura ( los dígitos ) tiene una resolución real de 0.5ºC, que viene dada por el DS1820. Y la animación del termómetro... pues como uno de mercurio ¿acaso podemos saber el valor real en estos :)) ?.

El intervalo de tiempo entre muestra y muestra, se puede ajustar, pero como lo importante era reducir al máximo los componentes, este ajuste solo se puede hacer antes de grabar el código en el PIC, ya que se usan los valores contenidos en las posiciones 0x21FE y 0x21FF de la EEPROM de datos del PIC en segundos (1seg - 65535seg ).
Por ejemplo, si queremos capturar la temperatura en intervalos de 5 minutos, tenemos que 5 minutos = 5*60 segundos = 300segundos, que en hexadecimal es 0x012C así que en la dirección de memoria 0x21FE ponemos como valor 0x01 y en la 0x21FF ponemos como valor 0x2C. Programamos el pic, y la gráfica se actualizará cada 5 minutos... bueno, más o menos.

On top we have the temperature, in the center a graph with the line of 0ºC, subdivided in Centigrade divisions of 10º and to the right an animated thermometer, that marks to the temperature until a maximum of +40ºC and a minimum of -40ºC.
Termometer scale change automatic if temperature is under 0ºC.
The graphic, is made with dots at programed time intervals. (Between 1 - 65535 seconds)and 57 temp values on LCD ).
This is not a profesional device, of course!. Every pixel on vertical scale, represents 2ºC. Device's precision is 0.5ºC (precision of DS1820).
The interval (in seconds) between a pair of samples, is stored in PIC Data Eeprom and only can be modified in PIC code before to program it.
The value is stored as a pair of bytes, MSB byte at 0x21FE and LSB byte at 0x21FF, as you can see:


Un ejemplo gráfico:
A graphical example:



El diseño es muy simple, y he aprovechado para hacer dos placas, una con PIC en encapsulado SO8 y la otra en formato DIP.
Hay que fijarse a la hora de montar el circuito ( si alguien lo monta ) que el PIC en DIP, va por el lado contrario a las pistas de la PCB y el de encapsulado SO8, soldado sobre la cara de pistas.
El condensador y la resistencia son tipo SMD recuperados de una vieja placa base, así como el portapilas y el interruptor de ON/OFF.

Circuit is very simple.
I made two PCB types, one with PDIP package PIC and another with SO8 (SOIC) package.
Is important to see that DIP chip is soldered on opposite layer routed and the SO8 package need to be soldere on routed layer.
Capacitor (SMT), resistor (SMT), battery holder and interruptor was recovered from an old motherboard.



Esta es la disposicion de los componentes en la PCB de tipo DIP
Component mask over PCB PDIP style:



y su fotolito:
And the PCB artwork:


Y alternativamente sta es la disposicion de los componentes en la PCB de tipo SO8
Alternative component mask with SO8 package:



y su fotolito:
And the artwork:


Hacemos la PCB, taladramos, soldamos, conectamos y ....
Aqui la tenemos funcionando
We make the PCB, drill it and weld the components and...
Here is the result working:



Lo que hay debajo del LCD
Under the LCD...



Y por detrás
and the back



Como había pedido muestras del 12F683 a Microchip y no me han llegado, he usado el 16F684 que tiene las mismas caracteristicas de memoria que el 12F683 y se corresponde en patilla, aunque le sobre 6 patillas en el zócalo.
Así que el código disponible, de momento solo vale para el 16F684, pendiente de que me lleguen los 12F683 para modificarlo, que supongo que la dirección de la EEPROM donde guardo el intervalo de tiempo de captura me traerá un problema con la calibración del oscilador del 12F.

I was request a samples of 12F683 to Microchip and at the time of make this, i haven't it. I used a 16F684 that have the same amount of Flash an Eeprom and is lead compatible with 12F683 for to start the device.
The PIC code is only valid for the 16F684 ( by now ) until i receive the 12F683 samples.
Another time, sorry for my poor english, sad.



Los ficheros:
Files:

16 comentarios:

RaDiKalDeSIG dijo...

Immm Presionante....
Mu Profesional..
Gaficos claros y concisos...
¿programado con "C"?

Felicidades un proyecto RKDS

Unknown dijo...

Profesional, muy profesional.

Mundojadisa dijo...

Es una gran idea, el código para el pic 12f ¿lo tienes ya?, es que da una pena tener las patas "colgando".

Bye

Mundojadisa dijo...

Hola, acabo de realizar este kit-termometro, pero necesito ajustar el contraste, ya que practicamente no se ve, ¿como puedo hacerlo, que bit debo variar de la programación?

Gracias.

droky dijo...

Hola,JJavivi, no te he respondido antes porque se me pasó tu mensaje.
A ver si tengo tiempo esta semana y cuelgo el código para la serie 12F.
La dirección de modificación del valor del contraste del LCD es la 0x103, que tiene valor 0x30C8 que equivale a la instrucción MOVLW 0xC8 .
Modifica el valor C8 ( es para unos 7v ) y con eso varías el contraste.
Salu2

Mundojadisa dijo...

Hola gracias por tu contestación, decirte que al final no entiendo el porque pero el problema lo he solucionado del siguiente modo, C1 lo he puesto Dil (tamaño universal) si lo ponía smd no se veía nada, mirando en la red he visto que en la patilla "Vo" se controla el contraste entre "0-5v" , por eso me he ido al C1, el tema de la Eeprom en un principio para todos los que deseen hacer el montaje pues con el código para 12F es mas cómodo, yo como me llegaron de microchip y no contestabas, pues modifique un poco el pcb y puse una 16f smd, en mi caso ya no lo toco.
Por cierto tengo algún diseño que me gustaría que vierais y que tal vez pudiera publicarse, he intentado enviaros email, pero siempre son devueltos ¿como puedo contactar con vosotros?

Bye

droky dijo...

Hola, puedes contactarme en la direccion de e-mail que hay en mi perfil.
Salu2

Marce dijo...

hola majos, bueno va de muerte el aparatejo, pero, a las no se cuantas horas de funcionamiento marca 127,5 ºC pq?

droky dijo...

Hola Marce,
Pues no se a que puede ser debido, yo lo he tenido mas de 24 h seguidas y sin problemas tanto con tiempos de captura pequeños, como altos para registrar la curva de un dia completo con su noche ¿has revisado el estado de la bateria? .Lo dejo desde ya a ver que pasa... ¿cuantas horas lo has dejado? ¿Lo has expuesto a temperaturas muy bajas o muy altas?¿Has modificado los bits de configuracion del hex?¿Que version del DS1820 usas?
Salu2

Marce dijo...

Bueno droky pareces ser un maestro iba a dar una explicación, pero sobra, efectibamente era la bateria en aparente mal estado, marcaba 2,52V, ahora lleva funcionando alrededor de 24 horas a la perfección con una pila que marca 2,98V.
Curioso no?
Salu2

droky dijo...

Perfecto Marce, se me habia escapado, pero la tensión VDD del DS1820 es de +3.0v <-> +5.5v con lo que si te cae por debajo de los 2,96v es más que probable que no te de ningún valor de temperatura, excepto esos 127,5º, que son exactamente todos los bits del valor de la temperatura a 1 ( 7 bits para el 127 y otro bit para el 0.5 )con lo cual el PIC está leyendo nada del DS1820. Misterio resuelto!!!
Salu2

moruyero dijo...

Interesante proyecto, estoy buscando el asm porque no tengo ese lcd y quiero modificarlo para usar un lcd de un t200, debo experimentar porque no estoy segun del controlador y me es menos dificil experimental a partir de lo ya hecho, ademas debo usar pic12f, agradezco si me los puedes enviar a mi correo wlugom@gmail.com o colgarlo para bajarlo.

Gracias

Dario martinez dijo...

hola me parece muy interesante tu pagina y ni que hablar de tus proyectos me encataria saber si se puede conseguir el codigo fuente

Anónimo dijo...

Hello;

Can I get source code for this?

sojus12345@gmail.com

Many thanks

Anónimo dijo...

Hola que modificaciones tengo que hacer para utilizar el sensor DS18B20 en mi zona no consigo el DS1820.

Anónimo dijo...

Ayuda por favor no me funciona con el ds18b20 que modificaciones hay que hacerle al firmware.

 
RaDiKalDeSIG | Designed by Techtrends | © 2007-2008 All rights reserved