Buon giorno.
Mi sono imbattuto in un problema inizialmente banale, ma che non riesco a risolvere, chiedo aiuto...
Sto utilizzando una sonda di temperatura DS18B20 con un codice che mi restituisce il valore della temepratura letta.
Funziona tutto, ma la risoluzione è di 0,5 °C; ho cambiato sonda (avevo quella incapsulata) con un DS18B20 aperto, in contenitore TO22 e la risoluzione è di 0,1°C.
Ho letto un po' in giro, e si dice che normalmente la risoluzione della sonda è 0,1; quindi vuol dire che alla sonda incapsulata è stata cambiata la risoluzione.
Non uso la libreria DallasTemperature nel mio progetto, ma solo la OneWire, solo che non riesco a cambiare la configurazione.
Scrivo questo:
byte addr_2[8]; // b3 b2 b1
int t_precision = 2; // 1 1 0 precisione 11 bit=0,125
ds.select(addr_2);
ds.write(0x4E);
// azzero il registro degli allarmi
ds.write(0);
ds.write(0);
ds.write(t_precision << 5);
// salvo in EEPROM
ds.write(0x48);
Ma continua a scrivermi la temperatura come se ci fosse precisione 0,5
Dove sbaglio?
Qualche consiglio??
Grazie.
Di default l'ADC della sonda è impostato a 12bit quindi se non fai niente dovresti apprezzare variazioni di grado di 0.0625°C (che non rappresenta la precisione.)
A prescindere dalla risoluzione dell'ADC però tieni conto che il sensore ha un'accuratezza di +- 0.5°C quindi se hai bisogno di letture così puntuali dovresti prevedere la possibilità di calibrazione.
Inoltre, stando a quel che dice il datasheet, il byte di configurazione per impostare 11bit di risoluzione dovrebbe essere 0b01011111 mentre tu scrivi 0b01000000
Beh leggendo bene il datasheet dice che da b0 a b4 e b7 non vengono affetti da scrittura; questo dovrebbe significare che anche se li scrivi non modifichi il loro contenuto.
Sull'acuratezza non discuto, ma sulla risoluzione quella la posso variare, e in teoria settando il DS in modalità 11 bit dovrebbe restituirmi variazioni di 0,1°C.....invece mi continua a dare variazioni di 0,5°C.
Come posso risolvere?
L'ho letto un po' superficialmente a dire il vero. Se è così allora dovrebbe andare.
Hai provato a fare un po' di reverse engeenering di qualche libreria funzionante?
Cotestatnt, non sono bravo a fare reverse engeenering, ho aperto la libreria Dallas e li ho visto che c'è una funzione che setta i bit per la risoluzione...
Ho provato di farlo ma non ci sono riuscito.
Allora ho aggirato l'ostacolo, ho aperto un esempio della libreria e ho settato la risoluzione che volevo; visto che poi lo salva in EEPROM, ho poi rimesso la sonda con la nuova configurazione nel mio rpogetto e funziona....
Però non ho capito come farlo fare senza uso della libreria...