DS18B20 è un noto sensore di temperatura di Dallas/Maxim. Vediamo
qui una traduzione commentata del foglio dati di questo componente.
Per le differenze con i similari DS1820 e DS18S20, trovate qui
alcune pagine.
Generalità
|
DS18B20 è è un termometro con uscita
digitale programmabile da 9 a 12 bit.
Contiene anche una funzione di
allarme, pure programmabile, i cui dati sono conservati in una area di memoria non
volatile (EEPROM).
Tra il microcontroller e il sensore la comunicazione avviene su un bus
1-Wire, dal quale può derivare la sua alimentazione (parasitic
power).
Ha una temperatura operativa tra -55 e +125°C, con una precisione
di ±0.5°C tra -10 e +85°C.
Ogni DS18B20 contiene un codice seriale univoco a 64 bit che
permette il funzionamento di più dispositivi sullo stesso bus.
E' disponibile in un comune package TO-92 a tre pin, oppure SO e
uSO a 8 pin per montaggio superficiale |
E' alimentabile tra 3 e 5.5V con una corrente di standby minore di 3uA.
La conversione della temperatura a 12bit viene effettuata in 750ms, mentre
quella a 9 bit in meno di 94ms.
Struttura interna.
La figura seguente mostra uno schema a blocchi del DS18B20.
Un sensore genera una tensione proporzionale alla temperatura,
che viene convertita in digitale e memorizzata in due bytes della memoria scratchpad. Inoltre,
l'area RAM dello scratchpad consente l'accesso ai registri a 1 byte di allarme
sotto e sovra temperatura programmabili (TH e TL) e al registro di configurazione.
Quest'ultimo consente all' utente di impostare la risoluzione della conversione
digitale a 9, 10, 11 o 12 bit. Questi tre registri sono copiati in memoria non
volatile (EEPROM) e conservano i dati impostati in mancanza di tensione. Il
dispositivo contiene anche un CRC generator per permettere al master di
verificare la correttezza dei dati trasmessi.
La ROM a 64 bit contiene il codice seriale univoco del dispositivo.
DS18B20 utilizza il bus 1-Wire di Maxim che implementa la comunicazione
utilizzando un solo segnale (più la massa). La linea del bus è open-drain e richiede un resistore
di pull-up, poiché tutti i dispositivi sono collegati al bus tramite un three state o
un open-drain. Il microprocessore (master) individua e i dispositivi sul bus con
il codice univoco di ciascun dispositivo; dato che questo codice è a 64 bit ed
ogni dispositivo 1-Wire ha un codice proprio, il numero teorico di dispositivi
collegabili al bus è molto elevato.
L'alimentazione diretta dal bus (parasite power) è realizzata
derivando attraverso un diodo la tensione a livello alto del bus (stato di
inattività) e caricando un condensatore interno Cpp che fornisce energia
durante i momenti in cui il bus è a livello basso. La funzione si attiva collegando il pin Vdd al gnd.
Misura della temperatura.
La funzionalità di base del DS18B20 è il suo sensore di temperatura
con uscita direttamente in digitale. La risoluzione del sensore di temperatura è configurabile dall'utente a 9, 10, 11 o 12 bit, corrispondenti a incrementi di 0,5 ° C, 0.25 ° C, 0.125 ° C, e 0,0625 °
C per bit, rispettivamente.
La risoluzione predefinita all'accensione è di 12 bit e il DS18B20 è
posto in uno stato di basso consumo.
Per avviare una misura di temperatura e la conversione AD, il master deve emettere un comando
Convert T [44h].
Dopo la conversione, il dato risultante viene memorizzato in due bytes del registro
scratchpad e il DS18B20 ritorna allo stato inattivo. Il master dovrà
richiedere una copia dello scratchpad per leggere la temperatura.
Se il DS18B20 è alimentato con una tensione esterna al bus, il master può emettere
un "read time slot", funzione descritta più avanti, dopo il comando Convert T e il DS18B20 risponderà trasmettendo 0 mentre la conversione della temperatura è in corso e 1 quando la conversione è
conclusa.
Se il DS18B20 è alimentato dal bus, questa tecnica di notifica non può essere
utilizzata poiché il bus deve essere tirato alto da uno strong pull-up durante tutta la conversione della
temperatura in modo da fornire una sufficiente corrente di alimentazione.
I requisiti di bus per l'alimentazione parassita sono spiegate in dettaglio
più avanti.
La temperatura è calibrata in gradi Celsius; per le applicazioni
in cui sono richiesti dati in Fahrenheit è necessario utilizzare una lookup table o una routine di conversione con i relativi calcoli matematici.
Il dato di temperatura è memorizzato come numero con segno, complemento a due nel registro di temperatura.
I bit del segno (S) indicano se la temperatura è positiva o negativa: per i numeri positivi S = 0 e per i numeri negativi S = 1.
Se il DS18B20 è configurato per la risoluzione a 12 bit, tutti i bit nel registro della temperatura conterranno dati validi . Per la risoluzione a 11 bit, il bit 0 è indefinito. Per la risoluzione a 10 bit, i bit 1 e 0 sono indefiniti, e per il 9 bit risoluzione bit 2, 1, 0 e non sono definiti. La tabella
seguente fornisce esempi di dati di uscita digitale e la corrispondente temperatura di lettura per le conversioni risoluzione a 12 bit.
Al power up il registro contiene il valore per +85°C.
Segnale di allarme.
Al termine della conversione AD, il valore di temperatura viene confrontato con due valori di attivazione dell'allarme
definiti dall'utente memorizzati nei registri ad l 1 byte TH e TL.
Il bit del segno (S) indica se il valore è positivo o negativo: per i numeri positivi S = 0 e per i numeri negativi S = 1. I registri TH e TL sono
in memoria non volatile (EEPROM) in modo da conservare i dati quando il dispositivo è spento .
A TH e TL si può accedere attraverso i byte 2 e 3 della memoria scratchpad.
Solo gli 8 bit da 11 a 4 del registro temperatura sono utilizzati nel confronto TH e TL
(che sono registri a 8 bit). Se la temperatura misurata è inferiore o uguale a TL o superiore o uguale a
TH, un flag di allarme è impostato all'interno del DS18B20. Questo flag viene aggiornato dopo ogni misura della temperatura;
pertanto, se la condizione di allarme cessa, il flag sarà spento dopo la prossima conversione della temperatura.
Il dispositivo master può controllare lo stato della segnalazione di allarme di
tutti i DS18B20 sul bus inviando un comando di ricerca allarme [ECh]. Eventuali
DS18B20 con una flag di allarme impostato risponderanno al comando. Se una condizione di allarme e le impostazioni TH o TL sono cambiate, un'altra conversione temperatura deve essere
fatta per convalidare la condizione di allarme.
Alimentare il DS18B20.
Il DS18B20 può essere alimentato da un alimentatore esterno sul
pin VDD
oppure può operare in modalità "parassita", che gli permette
di funzionare senza alimentazione esterna locale.
Questa modalità è molto utile per le applicazioni che richiedono un rilevamento della temperatura remoto o
in uno spazio molto limitato. Quando il DS18B20 è usato in modalità di alimentazione parassita, il
pin VDD deve essere collegato a massa.
Però, per poter usufruire delle complete prestazioni del dispositivo, occorre inserire
un MOSFET di strong pull-up, che viene mandato in conduzione durante la fase di
conversione in modo da fornire una sufficiente corrente di alimentazione. Questo richiede un bit addizionale dell'I/O del
microcontroller, anche considerando che lo strong pull-up deve essere
disabilitato durante le fasi in cui uno slave o il master accedono al bus
(altrimenti si verificherebbe un corto circuito tra la Vdd e il GND attraverso i
driver dei dispositivi che accedono al bus portandolo a livello basso).
ID a 64 bit.
Ogni DS18B20 contiene un codice a 64 bit univoco memorizzato nella ROM.
Gli 8 bit meno significativi del codice ROM contengono il
codice famiglia del DS18B20, che è 28h.
Va osservato che quello di 1820 e 18S20 è 10h.
I successivi 48 bit contengono il numero di serie unico. Questo
è inciso in fase di costruzione del chip ed è diverso da un componente
all'altro, ovvero ogni slave del bus 1-Wire dispone di un identificatore proprio
e diverso da qualsiasi altro. Questa soluzione permette di avere più slave sul
bus, anche dello stesso genere a cui il master potrà accedere richiamando i
relativi ID.
Gli 8 bit più significativi contengono un controllo di ridondanza ciclica (CRC) calcolata dai primi 56 bit del codice ROM.
Memoria.
La memoria interna del DS18B20 è organizzato come
nell'immagine seguente:
La memoria è costituita da una SRAM a cui si aggiunge una memoria EEPROM non volatile per i registri alti e bassi di attivazione dell'allarme (TH e TL) e registro di configurazione.
Si noti che se non si utilizza la funzione di allarme, i registri TH e TL possono servire come memoria
general-purpose non volatile (in questo caso non si dovrà tenere conto del flag
di allarme).
Tutti i comandi di memoria sono descritti in dettaglio nella sezione Comandi.
In dettagli, i registri:
-
Byte 0 e byte 1 dello scratchpad contengono LSB e MSB del registro di temperatura, rispettivamente. Questi byte sono di sola lettura.
-
Byte 2 e 3 forniscono l'accesso a TH e TL registri.
-
Byte 4 contiene i dati del registro di
configurazione.
-
Byte 5, 6, e 7 sono riservati per uso interno e non possono essere
sovrascritti.
-
Byte 8 è di sola lettura e contiene il codice CRC per i byte da 0 a 7 dello
scratchpad.
I dati vengono scritti nei byte 2, 3, e 4 utilizzando il comando
Write [4Eh]; i dati devono essere trasmessi al DS18B20 iniziando con il bit meno significativo del byte
2.
Per verificare l'integrità dei
dati si può rileggere lo scratchpad con il comando Leggi Scratchpad [BEh]. Durante la lettura, i dati vengono trasferiti sul bus 1-Wire a partire
dal il bit meno significativo del byte 0.
Per trasferire il TH, TL e i dati di configurazione dallo scratchpad alla
EEPROM, il master deve inviare i comando Copy Scratchpad [48h] .
I dati nella EEPROM sono mantenuti quando il dispositivo è spento;
all'accensione,
i dati in EEPROM sono caricati nelle rispettive posizioni scratchpad.
I dati possono anche essere ricaricate dalla EEPROM
allo scratchpad in qualsiasi momento, utilizzando il comando Recall E2 [B8h].
Dato che l'operazione richiede un certo tempo, il master può emettere a intervalli di tempo
una richiesta di lettura e il DS18B20 indicherà lo stato
trasmettendo 0 mentre il richiamo è in corso e 1 quando il richiamo è
eseguito.
Il registro di configurazione.
Il byte 4 della memoria scratchpad contiene il registro di configurazione, che è organizzato come
segue:
L'utente può impostare la risoluzione di conversione utilizzando i bit R0 e R1 in questo
registro.
Il bit 7 e i bit da 0 a 4 nel registro di configurazione sono riservati per uso interno da parte del dispositivo.
|
Si noti che la risoluzione è correlata al tempo di
conversione: maggiore è la risoluzione, maggiore sarà il tempo
necessario a completare la conversione. |
Il default all'accensione di questi bit è R0 = 1 e R1 = 1 (risoluzione a 12-bit).
Va notato che, rispetto a DS1820 e DS18S20 la conversione, a
parità di risoluzione, richiede un tempo molto minore.
Questi sono i tempi necessari per una conversione a 9 bit
DS1820 |
DS18S20 |
DS18B20 |
500ms |
750ms |
93.7ms |
Utilizzando comunque il tempo massimo di 750ms, DS18B20 effettuerà
una conversione a 12 bit.
CRC.
Il codice ROM CRC viene calcolato dai primi 56 bit del codice ROM ed è contenuto nel byte più significativo della ROM.
Il CRC Scratchpad viene calcolato in base ai dati memorizzati nello scratchpad, e di conseguenza, cambia quando i
cambiano dati
nello scratchpad.
I CRC forniscono al master un metodo di convalida quando
vengono letti i dati inviati dal DS18B20. Per verificare la correttezza della
ricezione, il master
deve ricalcolare il CRC dei dati ricevuti e quindi confrontare questo valore o
col codice ROM CRC (per lettura della ROM) o col CRC dello scratchpad (per la
lettura di questo). Se il CRC calcolato corrisponde a quello ricevuto, i dati sono
arrivati senza errori. Il confronto dei valori CRC e la decisione di proseguire con una operazione sono determinati interamente dal
master. Non vi è un circuito all'interno della DS18B20 che impedisce una sequenza di comandi
se il CRC non corrisponde al valore calcolato dal master.
La funzione polinomiale equivalente del CRC è:
CRC = X8 + X5 + X4 + 1
Schematicamente:
Si tratta di un registro di scorrimento e tre porte XOR; i bit
del registro di scorrimento vengono inizializzati a 0. Si avvia con il bit meno
significativo del codice ROM o il bit meno significativo del byte 0 nello scratchpad,
quindi un bit alla volta viene spostato nel registro a scorrimento. Dopo lo
spostamento nel bit 56 della ROM o il bit più significativo del byte 7 dello
scratchpad si avrà il CRC calcolato.
Bus 1-Wire. Hardware.
Il bus 1-Wire ha per definizione una sola linea dati. Ogni dispositivo (master o slave)
interfaccia la linea dati tramite un open-drain o la porta a 3 stati. Questo permette ad ogni dispositivo di
rilasciare il bus quando non trasmette i dati in modo che collegamento sia disponibile per l'uso da
parte di un altro dispositivo. La porta 1-Wire del DS18B20 è open-drain con un circuito interno equivalente a quello mostrato
nella figura seguente:
Nella forma più semplice, il bus 1-Wire richiede un I/O del
microcnotroller, impostabile come uscita o ingresso e una resistenza
pull-up esterno di circa 5kΩ; in tal modo, lo stato di inattività è a livello
alto. Se il bus viene tenuto basso per più di 480μs, tutti i componenti sul bus saranno
resettati.
Il dispositivo, senza l'impeigo di uno strong pull-up, va alimentato con una
tensione propria.
Lo strong pull-up richiede un ulteriore pin del microcontroller per comandare
il MOSFET ed una aggiunta di istruzioni al programma di gestione. In
particolare, occorrerà certificare che lo strong pull-up sia disabilitato
durante le fasi di comunicazione, per evitare un corto circuito tra Vpu e GND
attraverso i semiconduttori del DS18B20 o del microcontroller che portano il bus
a livello basso.
L'accesso al DS18B20.
La sequenza per l'accesso è la seguente:
-
Initializzazione
-
Comando ROM (seguito da un qualsiasi scambio di dati dove richiesto)
-
Comando Funzione (seguito da un qualsiasi scambio di dati
dove richiesto)
E' molto importante seguire questa sequenza ogni caso,
dato che il DS18B20 non risponde se un passo della sequenza manca.
Le eccezioni a questa regola sono i comandi Ricerca ROM [F0h] e Cerca Allarme [ECh]. Dopo l'emissione di uno di questi comandi, il master deve tornare al punto 1 nella sequenza.
Inizializzazione.
Tutte le transazioni sul bus 1-Wire iniziano con una sequenza di inizializzazione. La sequenza di inizializzazione è costituita di un impulso di reset trasmesso dal master bus
seguito dagli impulsi presenza trasmessi dagli slave. L'impulso presenza permette al master
di sapere che dispositivi slave sono sul bus e sono pronti ad operare.
Comandi ROM.
Dopo che il master ha rilevato un impulso presenza, può
inviare un comando ROM. Questi comandi consentono di individuare un dispositivo specifico
(nel caso che ne siano presenti più di uno sul bus) determinando anche quanti e quali tipi di dispositivi sono
collegati o se un dispositivo ha registrato una condizione di allarme.
Ci sono cinque comandi ROM, e ogni comando è lungo 8 bit. Il master deve
inviare un comando appropriato ROM prima di un comando funzione. Un diagramma di flusso per il funzionamento dei comandi ROM è mostrato
nell' allegato A.
I Comandi ROM sono i seguenti:
Comando ROM |
Codice
hex |
Funzione |
Ricerca ROM |
F0h |
Viene utilizzato per l'identificazione degli slave presenti sul bus |
Leggi ROM |
33h |
Permette di leggere il codice ROM quando vi è un solo dispositivo sul
bus |
Match ROM |
55h |
Permette al master di colloquiare con un solo dispositivo slave alla
volta |
Skip ROM |
CCh |
Permette al master di inviare un messaggio a tutti gli slave sul bus.
E' utilizzato quando vi è un solo slave. |
Ricerca allarmi |
ECh |
Permette al master di identificare se una periferica ha una
segnalazione di allarme attiva. |
Vediamo i dettagli.
Ricerca ROM [F0h]
Quando un sistema viene inizialmente acceso, il master deve identificare i codici ROM di tutti i dispositivi slave sul bus,
per determinare il numero di slave e i tipi di dispositivi. Il master apprende i codici ROM attraverso un processo di eliminazione che richiede
un ciclo di ricerca ROM (cioè, del comando Ricerca ROM seguito da uno scambio di dati) il numero di volte necessario per identificare tutti i dispositivi slave.
Se è presente un solo slave sul bus, il comando Read ROM semplice può essere utilizzato al posto del processo di ricerca ROM.
Una spiegazione dettagliata della procedura di ricerca ROM è contenuta nel
documento iButton® of Standards in www.maxim-ic.com/ibuttonbook.
Dopo ogni ciclo di ricerca ROM, il master deve tornare al punto 1 (inizializzazione) nella sequenza della transazione.
Leggi ROM [33h]
Questo comando può essere utilizzato solo quando vi è uno slave sul bus. Permette il master del bus di leggere il codice ROM a 64 bit dello
slave senza utilizzare la procedura di ricerca ROM. Se questo comando viene utilizzato quando è presente più di uno slave presente sul bus, una collisione di dati si verifica quando tutti gli slave tentano di rispondere allo stesso tempo.
Match ROM [55h]
Il comando seguito da una sequenza di 64 bit del codice ROM permette al master di
comunicare solamente con un dispositivo slave specifico quando si abbia un bus multidrop
o single-drop. Solo lo slave che corrisponde esattamente alla sequenza
trasmessa risponderà al comando funzione emesso dal master; tutti gli altri slave sul bus attenderanno
un impulso di reset.
Skip ROM [CCh]
Il master può usare questo comando per affrontare tutti i dispositivi sul bus contemporaneamente senza inviare alcuna informazione codice ROM. Ad esempio, il master può fare tutti DS18B20s sul bus eseguire conversioni di temperatura simultanee inviando un comando ROM Skip seguito da un T comando Converti [44h].
Si noti che il comando Read Scratchpad [BEh] può seguire il comando Skip ROM solo se vi è un unico dispositivo slave sul bus. In questo caso, si risparmia tempo permettendo al maestro di leggere dallo slave senza inviare codice ROM a 64 bit del dispositivo. Un comando Skip ROM seguito da un comando di lettura
scratchpad causerà una collisione di dati sul bus se c'è più di uno slave dal più dispositivi tentano di trasmettere dati contemporaneamente.
Ricerca Allarmi [ECh]
Il funzionamento di questo comando è identico al funzionamento del comando di
Ricerca ROM salvo il fatto che risponderanno solo gli slave con un flag di allarme
attivato. Questo comando consente al dispositivo master per stabilire gli eventuali
DS18B20 che hanno da segnalare una condizione di allarme a seguito della conversione
di temperatura più recente. Dopo ogni ciclo di Ricerca Allarmi, il master deve tornare al punto 1 (inizializzazione) nella sequenza della transazione.
Comandi Funzione.
Dopo il master del bus ha utilizzato un comando ROM per affrontare il DS18B20 con cui vuole comunicare, il master può emettere uno dei comandi funzione DS18B20. Questi comandi permettono il master per scrivere e leggere dalla memoria scratchpad del DS18B20, avviare conversioni di temperatura e determinare la modalità di alimentazione. I comandi funzione DS18b20, descritte di seguito, sono riassunti nella Tabella 3 ed illustra il diagramma di flusso in Figura 12.
Comando
Funzione |
Codice
hex |
Funzione |
Convert T |
44h |
Avvia la conversione AD della temperatura |
Read Scratchpad |
BEh |
Legge l'intero scratchpad compreso il CRC |
Write Scratchpad |
4Eh |
Scrive nei byte 2,3 e 4 dello scratchpad (TH, TL e
registro di configurazione). |
Copy Scratchpad |
48h |
Copia TH, TL e registro di configurazione dallo scratchpad
alla EEPROM |
Recall E2 |
B8h |
Copia TH, TL e registro di configurazione dalla EEPROM
allo scratchpad |
Read Power Supply |
B4h |
Comunica al master la modalità di alimentazione dello
slave |
Convert T [44h]
Questo comando avvia una singola conversione di temperatura. Dopo la conversione, il
dato risultante viene memorizzato nel registro temperatura della memoria scratchpad e il DS18B20 ritorna al suo stato di inattività a basso consumo.
Occorre considerare il problema dell' alimentazione:
-
Se il dispositivo viene utilizzato in modalità di alimentazione del parassita, entro 10μs (max) dopo
l'emissione di questo comando viene emesso, il master deve attivare uno
strong pull-up sul bus 1-Wire per la durata della conversione (tCONV).
-
Se il DS18B20 è alimentato da un alimentatore esterno, il master può emettere
a intervalli di tempo impulsi di lettura dopo il comando Converti T e il DS18B20 risponderà trasmettendo uno
0 se la conversione della temperatura è in corso e un 1 quando la conversione è
conclusa. In modalità di alimentazione parassita questa tecnica notifica non può essere
utilizzata in quanto il bus è collegato alla Vcc attraverso lo strong pull-up durante la conversione.
Write Scratchpad [4Eh]
Questo comando permette al master di scrivere 3 byte di dati nello scratchpad del DS18B20.
Il primo byte dei dati viene scritto nel registro TH (byte 2 del Scratchpad), il secondo byte viene scritto nel registro TL (byte 3), e il terzo byte viene scritto nel registro di configurazione (byte 4).
I dati devono essere trasmessi iniziando dal bit meno significativo.
La scrittura di tutti e tre i byte deve essere completata prima di un reset del
bus o i dati potrebbero essere danneggiati.
Read Scratchpad [BEh]
Questo comando permette al master di leggere il contenuto delo
scratchpad. Il trasferimento di dati inizia con il bit meno significativo del byte 0 e continua
fino al 9 byte (8 byte - CRC). Il master può emettere un reset per interrompere la lettura in qualsiasi momento, se
è richiesta solo parte dei dati.
Copy Scratchpad [48h]
Questo comando copia il contenuto dey bytes TH, TL e registro di configurazione (byte 2, 3 e 4)
dallo scratchpad alla EEPROM. Se il dispositivo viene utilizzato in modalità di alimentazione
parassita, entro 10μs (max) dopo l'emissione di questo comando viene emesso, il master deve
attivare uno strong pull-up sul bus 1-Wire per almeno 10 ms.
Recall E2 [B8h]
Questo comando richiama i valori di allarme trigger (TH e TL) e dati di configurazione dala
EEPROM allo scratchpad. Il dispositivo master può emettere a intervalli di tempo
richieste di lettura e il DS18B20 indica lo stato trasmettendo 0 mentre il richiamo è in corso e 1 quando il richiamo è
concluso. L'operazione di richiamo avviene automaticamente all'accensione, quindi i dati validi è disponibile in
scratchpad non appena viene alimentato al dispositivo.
Read Power Supply [B4H]
Questo comando permette al master di sapere se un qualsiasi DS18B20s sul bus
utilizza energia parassita. Durante l'intervallo di tempo di lettura, i DS18B20 parassiti
porteranno basso il bus, mentre quelli con alimentazione separata lasceranno il bus
a livello alto.
Questo serve ad individuare dove sia necessario attivare lo strong pull-up.
Esempi di comunicazione tra master e
DS18B20
Questa è la procedura nel caso esistano più DS18B20 sullo
stesso bus.
Master |
Dato |
Funzione |
Tx |
Reset |
Il master invia l'impulso di reset |
Rx |
Presenza |
DS18B20 risponde con l'impulso di presenza |
Tx |
55h |
Il master invia il comando Match ROM |
Tx |
64 bit ROM code |
Il master invia il ROM code della periferica richiesta |
Tx |
44h |
Il master invia il comando Convert T |
Tx |
DQ alto |
E' richiesto lo strong pull-up se ci sono dispostivi con alimentazione
parassita |
Tx |
Reset |
Il master invia l'impulso di reset |
Rx |
Presenza |
DS18B20 risponde con l'impulso di presenza |
Tx |
55h |
Il master invia il comando Match ROM |
Tx |
64 bit ROM code |
Il master invia il ROM code della periferica richiesta |
Tx |
BEh |
Il master invia il comando Read Scratchpad |
Rx |
9 data bytes |
Lo slave invia il contenuto dello scratchpad, compreso il CRC |
E' compito del master verificare se il CRC ricevuto è corretto.
Se c'è un solo 18B20 sul bus ed è richiesto il settaggio dei
registri interni:
Master |
Dato |
Funzione |
Tx |
Reset |
Il master invia l'impulso di reset |
Rx |
Presenza |
DS18B20 risponde con l'impulso di presenza |
Tx |
CCh |
Il master invia il comando Skip ROM |
Tx |
4Eh |
Il master invia il comando Write Scratchpad |
Tx |
3 bytes |
Il master invia i 3 bytes per lo scartchpad |
Tx |
Reset |
Il master invia l'impulso di reset |
Rx |
Presenza |
DS18B20 risponde con l'impulso di presenza |
Tx |
CCh |
Il master invia il comando Skip ROM |
Tx |
BEh |
Il master invia il comando Read Scratchpad |
Rx |
9 data bytes |
Lo slave invia il contenuto dello scratchpad, compreso il CRC |
Tx |
Reset |
Il master invia l'impulso di reset |
Rx |
Presenza |
DS18B20 risponde con l'impulso di presenza |
Tx |
CCh |
Il master invia il comando Skip ROM |
Tx |
48h |
Il master invia il comando Copy Scratchpad |
Tx |
DQ alto |
E' richiesto lo strong pull-up se il DS18B20 ha alimentazione
parassita |
Note:
-
E' compito del master verificare se il CRC ricevuto è
corretto e prendere le opportune decisioni
-
Durante il settaggio dei registri interni, a seguito del
comando Write Scratchpad occorre trasmettere sempre tutti e tre i bytes,
anche se, ad esempio, gli allarmi non sono necessari all' applicazione
Se c'è un solo 18B20 sul bus ed è richiesta la lettura della
temperatura:
Master |
Dato |
Funzione |
Tx |
Reset |
Il master invia l'impulso di reset |
Rx |
Presenza |
DS18B20 risponde con l'impulso di presenza |
Tx |
CCh |
Il master invia il comando Skip ROM |
Tx |
44h |
Il master invia il comando Convert T |
Tx |
DQ alto |
E' richiesto lo strong pull-up se il DS18B20 ha alimentazione
parassita.
Occorre attendere il tempo di conversione che diponde dalla risoluzione
impostata |
Tx |
3 bytes |
Il master invia i 3 bytes per lo scartchpad |
Tx |
Reset |
Il master invia l'impulso di reset |
Rx |
Presenza |
DS18B20 risponde con l'impulso di presenza |
Tx |
CCh |
Il master invia il comando Skip ROM |
Tx |
BEh |
Il master invia il comando Read Scratchpad |
Rx |
9 data bytes |
Lo slave invia il contenuto dello scratchpad, compreso il CRC |
Tx |
Reset |
Il master invia l'impulso di reset |
Il master può emettere un reset per interrompere la lettura in qualsiasi momento, se
è richiesta solo parte dei dati, per cui, se è richiesta la lettura della sola
temperatura, si può interrompere la comunicazione dopo i primi due bytes. Da
considerare che la mancanza del controllo CRC riduce la sicurezza del dato
ricevuto nel caso in cui la linea di comunicazione possa essere interessata da
disturbi.
1-Wire bus.
Il DS18B20 utilizza un rigoroso protocollo di comunicazione 1-Wire per garantire l'integrità dei dati. Diversi tipi di segnale sono definiti da questo protocollo: reset
, impulsi presenza,
scrittura di 0 e 1, lettura di 0 e 1. Il bus master avvia tutti questi segnali, con l'eccezione
dell'impulso di presenza che è fornito dallo slave in risposta al reset.
Reset e Impulso di Presenza.
Tutte le comunicazioni con il DS18B20 iniziano con una sequenza di
reset che consiste di un impulso inviato dal master e seguito da un impulso di presenza
del DS18B20.
Quando il DS18B20 invia l'impulso presenza in risposta al reset, indica al master che è sul bus e pronto per funzionare.
L'impulso di ripristino reset manda il bus basso per un minimo di 480μs. Il bus master rilascia quindi
il bus e va in modalità di ricezione (RX). Quando il bus viene rilasciato, la resistenza
pull-up tira alto il bus. Quando il DS18B20 rileva questo fronte di salita, attende
da 15μs a 60μs e poi trasmette un impulso presenza tirando il bus basso per un
tempo tra 60μs e 240μs.
Se sono presenti più DS18B20, tutti risponderanno con l'impulso di presenza.
Sarà compito del master analizzare il bus ed identificare le periferiche
collegate.
Write time slots
Ci sono due tipi di scrittura: "Write 1" e "Write 0"
.
Il master bus utilizza un diverso intervallo di tempo per scrivere 1 o 0.
Tutti i time slots di scrittura devono essere di un minimo di 60μs di durata con un minimo di un tempo di recupero 1μs tra
gli slots. Entrambi i tipi di intervalli di tempo di scrittura vengono avviati dal
master tirando il bus basso.
Per generare un intervallo di tempo di scrittura 1, dopo aver tirato il bus basso, il master
lo deve rilasciare entro 15μs. Quando il bus viene rilasciato, il resistore
pull-up tirerà alto il bus. Per generare un intervallo di tempo di scrittura 0, dopo aver
portato basso il bus 1-Wire, il master deve continuare a tenere il basso bus per la durata dell'intervallo di tempo (almeno 60μs).
Il DS18B20 campiona il bus durante una finestra che dura da 15μs a 60μs. Se il bus è alto durante la finestra di campionamento, un 1 viene scritto nel DS18B20. Se la linea è bassa, viene scritto
uno 0.
Read Time Slots
Il master può generare a intervalli di tempo degli
impulsi di lettura subito dopo l'emissione di un comando Read Scratchpad [BEh] o
Read Power [B4H], in modo che il DS18B20 sia in grado di fornire i dati richiesti. Inoltre, il master può generare intervalli di tempo di lettura dopo aver emesso
Convert T [44h] o Recall E2 [B8h] per conoscere lo stato dell'operazione.
Tutte i time slots devono essere lunghi un minimo di 60μs, con un minimo di un tempo
di 1μs di recupero tra gli slot. Un intervallo di tempo di lettura viene avviato
dal master tirando il bus basso 1-Wire per un minimo di 1μs e poi rilasciando il bus.
Dopo che il master ha avviato il time slot di lettura, il DS18B20 inizierà a trasmettere un 1 o
uno 0 sul bus: un 1 è ottenuto lasciando il bus al pull-up e uno 0 tirandolo basso.
Quando si trasmette uno 0, il DS18B20 rilascerà il bus per la fine dell'intervallo di
tempo; il livello del bus sarà portato alto dal pull-up.
I dati inviati dal DS18B20 sono validi per 15μs dopo il fronte di discesa che ha avviato l'intervallo di tempo di lettura. Pertanto, il master deve rilasciare il bus e quindi
campionarne lo stato all'interno dei 15μs dall'inizio dello slot.
La figura seguente mostra che la somma di TINIT, TRC e TSAMPLE deve essere inferiore a 15μs per un intervallo di tempo di lettura.
La figura seguente mostra che il margine di temporizzazione del sistema è
massimizzato mantenendo TINIT e TRC più brevi possibile e posizionando il tempo di campionamento
del master durante gli intervalli di tempo di lettura verso la fine del periodo di 15μs.
Allegato A
ROM Command Flowchart
Allegato B
Function Command Flowchart.
Documentazione.
Molte altre informazioni e Application Notes sul sito di MAXIM,
tra cui: Application Note
27: Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products
Application Note 122: Using Dallas' 1-Wire ICs in 1-Cell Li-Ion Battery Packs with Low-Side N-Channel Safety FETs Master
Application Note 126: 1-Wire Communication Through Software
Application Note 162: Interfacing the DS18x20/DS1822 1-Wire Temperature Sensor in a Microcontroller Environment
Application Note 208: Curve Fitting the Error of a Bandgap-Based Digital Temperature Sensor
Application Note 2420: 1-Wire Communication with a Microchip PICmicro Microcontroller
Application Note 3754: Single-Wire Serial Bus Carries Isolated Power and Data
Application Note 74: Reading and Writing iButtons via Serial Interfaces
|