Tinytherm, un cucciolo di termometro



Un progetto di termometro "riciclone". Stavolta a farne le spese è il display a cristalli liquidi smontato dal Nokia 3310 abbandonato in un cassetto e mai buttato. In rete ci sono diverse pagine sull'utilizzo di questo tipo di display con processori PIC o ATMEL. In effetti anche questo prende spunto dal progetto di Ivica Novakovic, dal quale ho preso lo schema elettrico e parte del firmware.


Naturalmente ho voluto metterci del mio, sia per la parte meccanica che nella programmazione. La mia versione prevede che il display sia connesso all'elettronica vera e propria mediante uno zoccolo e il corrispettivo connettore a pettine, in modo da poter facillmente utilizzare il display su più progetti. Ho quindi realizzato un circuito stampato, che si intravede in trasparenza dalla foto, delle stesse dimensioni del lcd e con le piste che, partendo dal connettore a pettine, convergono verso quello del display.


Lo si può realizzare anche con il solito pennarello con un piccolo stratagemma: si realizza un rettangolo pieno dal quale partono le otto piste a grandezza "umana", si lascia asciugare bene l'inchiostro, poi con un utensile a punta si graffia il rettangolo in modo da mettere a nudo il rame che verrà in seguito corroso nella soluzione di percloruro ferrico, formando le otto piazzole che appoggeranno sulle mollette del display. Con questo accorgimento i contatti sono portati al passo standard di 100 mils, dunque si può utilizzare la basetta al volo su bread board o mediante zoccolo nelle realizzazioni definitive. I contatti del display hanno piccole molle dorate, quindi è necessario, dopo aver verificato con cura l'allineamento, mantenere in qualche modo pressato il display alla basetta. Io ho utilizzato una costina in plastica utilizzata per rilegare i documenti, la soluzione è accettabile e meccanicamente robusta. L'elettronica, davvero minimale, necessaria al funzionamento del circuito è montata su una seconda basetta da accoppiare a sandwitch al display. Ho realizzato anche per questa un piccolo stampato, più che altro per utilizzare lo sfrido di piastra ramata rimasuglio di una precedente lavorazione. E si vede, dal momento che, vuoi per il percloruro "stanco", vuoi per la basetta graffiata, il risultato è inguardabile. Meno male che a circuito montato il lato rame è nascosto.

  

La prima accensione
Vista la semplicità del circuito un controllo triplo di ogni particolare non richiede troppo tempo, quindi ne vale la pena. Per la prima accensione ho caricato sul PIC il firmware originale ed il termometro ha funzionato da subito. Certo però...
Quando ho pronunciato queste parole ancora non sapevo in che impresa mi stavo cacciando! In altri progetti ho utilizzato la sonda ds1820 e avevo bell'e pronta la routine per aquisire la temperatura a 12 bit invece dei 9 standard, cosa che permette di visualizzare i decimi di grado. La precisione dichiarata è di +/- 5 decimi di grado, ma ormai avevo accettato la sfida.

Il firmware
Ivica ha rilasciato il sorgente del firmware, scritto in pic basic pro, che mi ha permesso di studiare le funzioni svolte dal programma. A dire il vero mi sono dovuto studiare un po' questo linguaggio, dal momento che in precedenza avevo più familiarità col CCS C. Fortunatamente le funzioni non sono poi molte quindo dopo un po' ho cominciato a ragionare sul codice. La lettura della sonda digitale e la trasformazione dei dati in formato numerico occupano poche righe, il lavoro più pesante è costituito dalle istruzioni necessarie a visualizzare i dati sul display. Nella configurazione utilizzata, occorre inviare 84 byte di 8 bit ciascuno (quante sono le colonne) per 6 righe (48 bit totali per ciascuna colonna). Per capire come funziona il firmware originale ed operare una sorta di "reverse engineering" mi sono costruito questo foglio di calcolo dove, inserendo i dati esadecimali presenti nel listato, vengono colorate le celle sottostanti a simulare i pixels accesi, così da fornire una rappresentazione grafica di cosa viene visualizzato. In una successiva cartella si opera il lavoro inverso, ovvero immettendo su una griglia le celle-pixels da accendere, vengono calcolati i valori esadecimali da immettere nel codice. La prima modifica che ho apportato è stata quella di sostituire il logo Ke con la scritta "2.0", e fin qui tutto bene. Poi ho implementato la routine per la lettura dei decimali, che ha funzionato al primo colpo. L'appetito viene mangiando, quindi perchè non personalizzare anche il font? L'idea era quella di "pulire" la schermata da qualche fronzolo e visualizzare la temperatura con un font più grande e meno stilizzato in cui ogni cifra doveva essere visualizzata su una matrice di 7 x 13 pixels. Ciò avrebbe comportato la scrittura di 14 bytes su due righe, un impegno che ho giudicato alla mia portata. A livello di codice significava approntare due matrici di datii, una per la metà superiore e una per la metà inferiore di ogni cifra, visualizzare la metà superiore di ciascuna, riposizionare il cursore alla riga inferiore, visualizzare la metà inferiore. Un po' cervellotico, ma abbordabile. Qualche ora dopo mi sono reso conto di quanto il firmware messo a punto da Ivica fosse ben ottimizzato: veniva infatti usata praticamente tutta la memoria di programma e quasi tutta la EEPROM, in poche parole non c'era verso di far entrare tutto il codice nel kilobyte a bordo del 12F675. Ho provato a rimuovere qualche elemento grafico senza risultati, e proprio non volevo rinunciare al "termometro a mercurio" di fianco alle cifre numeriche. Così ho investito un paio di euro in un PIC 12F683, che dispone del doppio di memoria di programma e 256 bytes di EEPROM. Una aggiustatina ai registri mi ha permesso di compilare il sorgente e caricarlo sul micro come eseguibile (.hex). La nuova veste grafica è visibile in foto. Non mi sono ancora inventato un logo, quindi per ora il termometro visualizza il "2.0" in alto a sinistra.


Schema elettrico
Lo schema elettrico, è assolutamente fedele al progetto originale, salvo per l'utilizzo del PIC 12F683. In fase di test ho riscontrato che, utilizzando un filo di qualche metro per collegare la sonda di temperatura al termometro, la comunicazione col PIC non funzionava a dovere. Per risolvere il problema ho abbassato il valore della resistenza di pull-up R1 a 3.3 Kohm. L'assorbimento di corrente del circuito aumenta un po', ma si mantiene comunque su 1 mA.


Disposizione componenti



Circuito stampato
Se proprio non sopportiamo le millefori, ecco la traccia del circuito stampato.



Elenco componenti

Tipo/valore Quantità Riferimento
10 Kohm 1 R1
0.1uF 1 C2
4,7uF 25V 2 C1, C3
DS 1820 1 P2
PIC 12F683 1 U1
LCD PCD 8544 1 P1

Lavoro ultimato!


Il contenitore utilizzato per racchiudere il termometro, in piena filosofia "riciclona", è la scatola di un orologio da polso in gomma. Contiene perfettamente il portapile e le due schede elettroniche, in più la trasparenza della plastica lascia intravedere l'interno. Insegnamento del giorno: la limatura di plastica si elettrizza elettrostaticamente in un modo tale che è impossibile sbarazzarsene, come si nota da questa foto.


Riferimenti utili
La pagina di Ivica Novakovic , autore del progetto originale;
L'articolo su elettronic.altervista.org , ovvero passo per passo il lavoro da far svolgere al micro per visualizzare ciò che desideriamo;
Il datasheet del controller Philips PCD8544 contenuto nel display del Nokia 3310.

praz2004 chiocciola libero punto it