Ciao a tutti, ho un sensore di temperatura (DS 1631) che mi fornisce una temperatura a 12 bit, organizzata in due byte in questa maniera:
1 byte: Segno 2^6 2^5 2^4 2^3 2^2 2^1 2^0 2 byte: 2^-1 2^-2 2^-3 2^-4 0 0 0 0Ora, devo gestire la visualizzazione della temperatura su un LCD, e ho pensato di convertire il numero in BCD, utilizzando la routine presente nelle Application Notes di Microchip. Non ho problemi nella conversione di un numero positivo: S è 0, e quindi prendo il primo byte (che praticamente mi da la parte intera) e la converto in BCD. Per la parte in virgola fissa (il 2° byte quindi) ho implementato una specie di LUT, look up table, e va benone, visto che ci sono solo16 casi possibili (solo 4 byte infatti determinano la parte decimale della temperatura, ad ogni modo accetto suggerimenti).
Il problema nasce quando devo visualizzare dei numeri negativi, codificati in complemento a 2, in cui il complemento a 2 è gestito solo sui 12 bit significativi (i quattro zeri del secondo byte sono fissi, non cambiano mai). Cioè ad esempio -25.0625 è: 1110 0110 1111 0000 Ora, io ho pensato di controllare il bit di segno, e se è negativo visualizzo il - sullo schermo, dopodichè converto il dato di 12 bit nella codifica senza segno, e da qui visualizzo nuovamente il numero positivo, come già implementato. Cioè, inverto i 12 bit del negativo e sommo 1. -25.0625 diventerebbe: 0001
1001 0000 + 1 --> 0001 1001 0001 Cosa ne pensate? C'è senza dubbio un metodo migliore per visualizzare sull'LCD la temperatura...Ad ogni modo, usando questo metodo ho un problemino: come sommo 1 ad un numero di 12 bit? Devo fare uno shift a destra di 4 bit dei due registri in cui memorizzo i 16 bit, in modo da portare gli 8 bit meno significativi in un unico byte di memoria, e gli altri 4 nell'altro? Come gestisco il riporto fra i due "pezzi"? Il riporto verso gli altri 4 bit mi salta fuori solo se i primi 8 sono tutti 1 giusto? Una volta eseguita la somma dovrei, naturalmente, shifttare di 4 posti a sinistra, per riportarmi alla situazione "standard" del mio progetto.... Funziona ?
Non c'è un metodo più elegante? Grazie a tutti! Nick