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.

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.
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:

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:

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. Si en lloc de fer la divisió per 256, ho fem per 128 tindrem el doble de la temperatura i podrem tenir en compte aquest mig grau.
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 un unsigned int (dos bytes). Per tant, podrem fer tots els càlculs amb unsigned int.
A l'exemple MT hi ha un programa que llegeix aquest sensor i mostra la temperatura a una pantalla sèrie. A continuació n'hem posat algunes línies.
La variable Lectura és on guardem la lectura que la formem a partir d'ADRESH i ADRESL. També tindrem una variable binària que ens recordarà si el valor era positiu o negatiu per mostrar o no el signe menys a la pantalla. El vector Digits guardarà els quatre dígits de la lectura amb el decimal a la posició 0 i les centenes a la 3.
Hem evitat fer la resta de forma general ja que si el resultat pot ser positiu o negatiu no ens cabria en un unsigned int i ens caldria un short long. Segons quin dels dos elements de la resta és més gros fem la resta en un sentit o un altre i activem o no el bit Negatiu. El resultat de la resta (que és el valor absolut del numerador) el dividim per 128 i ja tenim el doble de la temperatura. Comparant aquest valor amb el doble de la seva meitat veiem si quan dividim es perden decimals o no. Com la diferència és de només un bit, si es perden decimals considerem mig grau més (Digits[0] = 5) que si no es perden.
Finalment passem a BCD (separem els dígits) i els convertim a ASCII per poder-los mostrar a la pantalla.
unsigned int Lectura; // Valor llegit char Digits[4]; // Variable amb el número dígit a dígit // Digits[0] és el decimal bit Negatiu; // Guarda si el valor és negatiu o positiu
...
Lectura = ADRESH;
Lectura = Lectura << 8;
Lectura = Lectura | ADRESL; // Valor llegit
// T = (125 * Lectura - 12800) / 256
Lectura = 125 * Lectura; // Primer pas del càlcul
if (Lectura >= 12800) { // És positiu?
Negatiu = 0; // Sí
Lectura = Lectura - 12800; // Segon pas del càlcul
} else {
Negatiu = 1; // És negatiu
Lectura = 12800 - Lectura; // Segon pas del càlcul
}
Lectura = Lectura / 128; // Lectura té el doble de la temperatura
// En valor absolut
if (Lectura == 2 * (Lectura / 2)) { // Mirem si el decimal és 0 o 5
Digits[0] = 0;
} else {
Digits[0] = 5;
}
// Separem els dígits
Lectura = Lectura / 2; // Lectura té la temperatura en valor absolut
Digits[1] = Lectura % 10; // Unitats
Lectura = Lectura / 10;
Digits[2] = Lectura % 10; // Desenes
Digits[3] = Lectura / 10; // Centenes
...

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