Tutorials - Elettronica

 
 

DS18B20


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: 

  1. Initializzazione

  2. Comando ROM (seguito da un qualsiasi scambio di dati dove richiesto)

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

  1. E' compito del master verificare se il CRC ricevuto è corretto e prendere le opportune decisioni

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

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 10/09/15.