Programació en mpasm del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Sensor de temperatura

Hem triat el sensor de temperatura TMP36 que és molt freqüent per a mesures de precisió moderada. Té una sensibilitat de 10 mV/°C i un error màxim de 2 °C sobre un rang entre -40 i +125 °C.

Sensor de temperatura

El connexionat del sensor és molt senzill. Tal com es veu a la imatge (amb les lletres davant) la pota de l'esquerra es connecta al positiu (VDD), la de la dreta a massa (negatiu, VSS) i la del centre a una entrada analògica; en el nostre exemple serà AN2 (RA2).

En el full de característiques veiem que la sortida és de 0,5 V a 0 °C i d'1 V a 50 °C. A partir d'aquestes dades, podem escriure la següent expressió que relaciona la temperatura en graus Celsius amb la tensió de sortida del sensor.

Equació

El valor que llegirà el microcontrolador serà de 1024 quan la tensió que li arriba sigui de 5 V. Substituïnt a l'expressió anterior, tenim:

Equació

A la següent taula tenim uns quants casos, entre ells els corresponents als valors extrems:

Temperatura (°C) Tensió (V) Valor llegit (ADRES)
-40 0,1 21
-25 0,25 51
0 0,5 102
24 0,74 152
25 0,75 154
50 1 205
75 1,25 256
100 1,5 307
125 1,75 358

Substituïnt obtenim la següent expressió en la que, atès que els tres nombres són múltiples de quatre, podem simplificar:

Equació

La lectura que podrem fer amb el conversor analògic-digital del microcontrolador seran nombres enters. Per tal que la temperatura ens sigui fàcil de tractar també ens convindrà que siguin nombres enters. Si ens fixem en la taula, veiem que un canvi d'un grau Celsius dona lloc a una veriació aproximada de dues unitats en el valor llegit. Si volem la temperatura amb una resolució d'un grau aquesta expressió ja ens va bé. Si, en canvi, volem aprofitar la possibilitat de veure els mitjos graus, caldrà evitar perdre-ho. Aquest detall el tindrem en compte abans de dividir.

Si ens fixem, el valor més gran que podem llegir són 125 °C i correspon a una lectura de 358. Quan ho multipliquem per 125 tindrem 44750 que encara cap sobradament en dos bytes. Per tant, podrem fer tots els càlculs amb nombres de 16 bits (dos bytes).

A l'hora de fer els càlculs, podem tenir present que dividir per 256 equival a prescindir dels vuit bits de la dreta; o sigui del byte de menys pes.

D'altra banda, multiplicar per 128 equival a fer rodar set posiccions cap a l'esquerra. A l'hora de multiplicar per 125, podríem estar temptats de sumar el valor 125 vegades però hi ha una opció més senzilla i ràpida. Si agafem una còpia del valor i li fem rodar els bits set cops a l'esquerra tindrem el valor multiplicat per 128. Si, per un altre costat, agafem el valor i el sumem tres cops tindrem el seu triple. La resta d'aquests dos resultats ens donarà el valor multiplicat per 125. Sobre aquest darrer resultat podem restar 12800 i ja tenim el numerador.

Rotació de bits

En lloc de fer rodar els bits set cops a l'esquerra (figura anterior), hi ha una manera més ràpida, que es mostra a la figura següent. Es tracta de posar el byte menys significatiu com si fos el més significatiu i rodar un cop cap a la dreta. Amb això tindríem el resultat desitjat excepte el bit més significatiu. Per tant, només cal tenir la precaució d'agafar aquest bit quan fem la rotació.

Rotació de bits

A l'hora de presentar el resultat, per exemple en una pantalla, podem agafar byte de més pes d'aquest resultat com a part entera de la temperatura. Si el bit de més a l'esquerra del byte de menys pes és 1 voldrà dir que hem d'afegir mig grau al resultat (o sigui, escriure ",5" a la dreta) i si aquest bit és zero no (per tant escriure ",0").

Per a temperatures negatives (valor llegit més petit que 102) podem fer la resta en ordre contrari (restar de 12800) i afegir el signe menys a l'hora de visualitzar-ho.

A l'exemple MT hi ha un programa que llegeix aquest sensor i mostra la temperatura a una pantalla sèrie.

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.