INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

19
INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire Premessa I sensori di temperatura 1-wire non sono certo una novità. In rete sono reperibile molti documenti, esempi di programmazione e progetti che li utilizzano. Nonostante questo ho voluto comunque scrivere un breve tutorial per mettere in evidenza alcune caratteristiche che mi sono parse poco chiare trovandomi a doverli utilizzare. Spero che possa essere utile a qualcuno, in particolare a chi non i ha mai usati. Come sempre sono graditi commenti, suggerimenti e critiche. Introduzione I sensori di temperatura della famiglia DS18XX sono componenti prodotti dalla Dallas/Maxim Semiconductor. Rispetto a molti altri sensori (LM35, AD590 ecc) hanno la particolarità di non fornire, al variare della temperatura, una risposta analogica, ma interamente digitale, un flusso seriale di dati. Se da una parte questo obbliga l’utilizzo di un microcontrollore per gestirli, dall’altra permette di eliminare tutti gli stadi analogici, amplificatori, tarature e convertitori ADC e quindi tutte le problematiche che sono alla base del condizionamento e dell’imprecisione di un segnale discreto. Il microcontrollore e i sensori dialogano mediante un protocollo proprietario, l’ 1-WIRE, su cui è necessario spendere due parole. sìSviluppato dalla Dallas Semiconductor (ora Maxim), ha la peculiarità di avere 1 solo filo di connessione (oltre la massa, il positivo è opzionale) per un numero elevatissimo di device, anche di tipo differente fra loro. Và sottolineato infatti che i dispositivi che utilizzano l’ 1-wire come protocollo non sono solo sensori di temperatura, ma molti anche di altre tipologie. Si passa dai sensori di temperatura, alle EEPROM, ai tag identificatii, alle interfacce.Il più famoso e direi particolare nel panorama dell’elettronica che implementa il protocollo 1-wire è l’ì-Button, un dispositivo “stand alone” proprietario, della forma e delle dimensioni di una pila a bottone. Al suo interno contiene un chip che, a seconda del modello, può lavorare come semplice chiave elettronica piuttosto che un avanzato datalogger di umidità e temperatura. Figura 1 Panoramica dispositivi interfacciabili 1-wire

Transcript of INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Page 1: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire Premessa I sensori di temperatura 1-wire non sono certo una novità. In rete sono reperibile molti documenti, esempi di programmazione e progetti che li utilizzano. Nonostante questo ho voluto comunque scrivere un breve tutorial per mettere in evidenza alcune caratteristiche che mi sono parse poco chiare trovandomi a doverli utilizzare. Spero che possa essere utile a qualcuno, in particolare a chi non i ha mai usati. Come sempre sono graditi commenti, suggerimenti e critiche. Introduzione I sensori di temperatura della famiglia DS18XX sono componenti prodotti dalla Dallas/Maxim Semiconductor. Rispetto a molti altri sensori (LM35, AD590 ecc) hanno la particolarità di non fornire, al variare della temperatura, una risposta analogica, ma interamente digitale, un flusso seriale di dati. Se da una parte questo obbliga l’utilizzo di un microcontrollore per gestirli, dall’altra permette di eliminare tutti gli stadi analogici, amplificatori, tarature e convertitori ADC e quindi tutte le problematiche che sono alla base del condizionamento e dell’imprecisione di un segnale discreto. Il microcontrollore e i sensori dialogano mediante un protocollo proprietario, l’ 1-WIRE, su cui è necessario spendere due parole. sìSviluppato dalla Dallas Semiconductor (ora Maxim), ha la peculiarità di avere 1 solo filo di connessione (oltre la massa, il positivo è opzionale) per un numero elevatissimo di device, anche di tipo differente fra loro. Và sottolineato infatti che i dispositivi che utilizzano l’ 1-wire come protocollo non sono solo sensori di temperatura, ma molti anche di altre tipologie. Si passa dai sensori di temperatura, alle EEPROM, ai tag identificatii, alle interfacce.Il più famoso e direi particolare nel panorama dell’elettronica che implementa il protocollo 1-wire è l’ì-Button, un dispositivo “stand alone” proprietario, della forma e delle dimensioni di una pila a bottone. Al suo interno contiene un chip che, a seconda del modello, può lavorare come semplice chiave elettronica piuttosto che un avanzato datalogger di umidità e temperatura.

Figura 1 Panoramica dispositivi interfacciabili 1-wire

Page 2: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Tornando ai nostri sensori di temperatura bisogna dire che è opzionale, ma non trascurabile, la possibilità di alimentare separatamente ogni singolo device con un positivo comune. Si distinguono quindi due casi di possibile alimentazione e di possibile rete Microlan:

- DIRETTA ,dove ogni device ha un positivo e negativo, oltre che il cavo dati

- PARASSITA, dove il cavo dati trasporta anche l’alimentazione. La differenza sostanziale tra le due modalità di alimentazione, oltre al cavo in più necessario per l’alimentazione DIRETTA, riguarda la velocità del BUS, che , nel caso di alimentazione PARASSITA, è sensibilmente più lento.

Figura 2 generica rete Microlan con differenti tipologie di device alimentati dal bus (parassita)

Figura 3 generica rete Microlan con device alimentati da alimentazione diretta

Page 3: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Un semplice sguardo nel sito del produttore evidenzia l’elevato numero e la differente tipologia di dispositivi 1-wire.

Il vantaggio che appare subito evidente è che, compreso il protocollo con il quale dialogano, si posso gestire in ugual modo dispositivi diversi con funzioni diverse, sullo stesso bus. Inoltre in caso di obsolescenza, un prodotto può essere rimpiazzato da un altro senza modifiche hardware e (quasi) software. Scendendo più nel dettaglio una rete di dispositivi1-Wire (prende il nome di MicroLAN) è un insieme di device organizzati da un'architettura multi-punto, in cui un singolo master (un PC o un uC) dialoga tramite un solo filo con “n” slave. Il sistema permette un rigido controllo della comunicazione, perchè nessun nodo è autorizzato a parlare senza esplicita richiesta del master, e nessuna comunicazione è permessa tra gli slaves se non tramite il master. Sia il master che gli slaves sono configurati come transceiver, permettendo un flusso di dati in entrambe le direzioni.

A livello fisico R di PULLUP mantiene la linea normalmente “alta”, a 3 o 5 volt. Ogni dispositivo per potersi interfacciare al bus deve poter disporre di una uscita open-collector (o open-drain). Esistono quindi due possibilità: - uscita posta a 0 logico –> Il bus viene portato a 0 Volt - uscita posta a 1 logico –> Il dispositivo è di fatto scollegato e il bus rimane a Vpup tramite la resistenza da 4.7K Ogni slave ha l’obbligo di lasciare sempre libero il bus e di occuparlo solamente quando viene interrogato dal master.

Page 4: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Da un punto di vista hardware ogni dispositivo 1-wire, indipendentemente dalla funzione, ha elementi caratteristici comuni: le memorie ROM, RAM ed EEPROM. La prima è una memoria ROM di sola lettura, contenente un codice identificativo a 48 bit unico e irripetibile di OGNI SINGOLO componete: l’ IDCODE. C’è anche una RAM dove vengono immagazzinati i dati acquisiti. In maniera molto sintetica, che sarà ripresa in seguito, si può dire che il master riesce ad interrogare singolarmente ogni singolo device, dopo averne ricavato di ciascuno l’univoco codice identificativo (IDCODE). Quando il sensore acquisisce un dato non lo trasmette immediatamente, ma lo memorizza internamente all’interno della propria RAM, e lo trasmette solo su richiesta del master. Insomma, per fare in modo che la tipologia di rete fosse molto semplice si è dovuto aumentare di molto la complessità dei device. Nonostante questo i costi sono comunque molto accessibili, nell’ordine di due o 3 euro a seconda del tipo di componente. Famiglia DS18XX Terminata la doverosa introduzione al bus 1-wire, introduciamo i sensori di temperatura della famiglia DS18XX. I principali sono il capostipite DS1820, il DS18S20 e il DS18B20. Oltre questi ricordo anche il il DS1822 e l’ormai fuori produzione DS1821. Nonostante la sigla sia simile tra questi dispositivi esistono elementi comuni ma anche differenze sostanziali. Come sempre è bene fare sempre riferimento al datasheet specifico. Il DS1820 Anche se è disponibile in diversi package, quello più diffuso in cui trovare il DS1820 è sicuramente il TO-92. Sembra identico ad un piccolo transistor plastico BC337. In realtà esiste anche una versione in contenitore PR-35, ovvero una versione “allungata” del TO-92, ma credo che sia rara e non l’ho mai incontrata. In quanto dispositivo 1-wire, proprio come un semplice transistor dispone solo di 3 terminali: VCC, DQ e GND. La tensione di alimentazione è compresa tra i 3 e i 6V e , supportando il collegamento PARASSITE POWER sarebbe possibile utilizzarne solo due, CORTOCIRCUITANDO i piedini VCC e GND. .

Page 5: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Il sensore acquisisce una temperatura in un campo di misura che và da -55°C a 125°C con una risoluzione di 9 bit (0,5°C). L’accuratezza è dai -10°C ai +85C° di +/- 0,5C° su tutta l’escursione. Lo schema a blocchi mostra gli elementi caratteristici già accennati prima: una memoria ROM a 64bit e la una memoria RAM, che da qui prende il nome di SCRATCHPAD.

La ROM è una memoria di sola lettura organizzata nel seguente modo:

I primi 8 BIT sono riservati al CRC CODE, il check di ridondanza ciclica, un numero che viene sfruttato nelle operazioni di validazione e controllo errori di flusso dati della rete, per ora lo trascuriamo. I secondi 48BIT rappresentano l’IDCODE, ovvero un numero seriale caratteristico di QUEL singolo dispositivo, unico ed irripetibile Infine gli ultimi 8BIT contengono il FAMILYCODE, ovvero un codice caratteristico del tipo (il MODELLO) di device. Lo SCRATCHPAD è un’altra memoria RAM (in realtà E2RAM), che, a differenza della ROM, è riscrivibile. In questa memoria vengono memorizzati i DATI di temperatura che il sensore acquisisce. Questa memoria è grande 9 byte, organizzati come da schema. Da notare che alcuni BYTE vengono salvati in contemporanea su una memori EEPROM non VOLATIVE. Allo spegnimento e alla successiva riaccensione alcuni dati possono essere RICHIAMATI da questa memoria. Le sonde DS18XX infatti non svolgono esclusivamente funzione di sensore, ma hanno anche la possibilità di salvare in memoria non volatile delle soglie reimpostabili a nostro piacere che, una volta superate, lo fanno andare in ALLARME, facendogli emettere una stringa caratteristica. Per ora tralasciamo anche questo aspetto più avanzato, ricordando solo che i valori di soglia possono essere scritti

Page 6: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

nei registri BYTE1 e 2 ovvero le soglie TH e TL (temperature High e Low) e memorizzati in maniera permanete in registri speculari ma EEPROM.

I primi 2 BYTE (0 e 1) contengono il DATO di temperatura. Il terzo e quarto (2 e 3) contengono delle impostazioni relativi ad eventuali allarmi che vogliamo settare (funzionamento TERMOSTATO), e non sono quindi necessari se utilizziamo la sonda come semplice termometro. I BYTE 4 e 5 sono riservati. Rimangono infine il BYTE6 e 7 che contengono un valore “aggiuntivo” della misura, utile se, tramite un algoritmo, decidessimo di elevare la risoluzione del sensore come si vedrà in seguito.. L’organizzazione dei primi 2 BYTE che contengono il DATO è fondamentale, in quanto il sensore ha solo 9 bit di risoluzione, ma i 2 BYTE, insieme, danno 16 bit. Il datasheet riporta:

Ovvero le 16 caselline dei due BYTE sono occupati dalla cifra meno significativa dal bit che rappresenta 0,5° poi dall’,1°,2°,4,°8°,16°,32°,64° che sarebbero i risultanti di 2 elevato alla n, partendo da n = -1. Infatti 2 elevato alla meno 1 dà 0,5.La somma di

Page 7: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

questi addendi darà la temperatura finale. Il BIT8 , il più significativo, definisce il SEGNO della temperatura: 0 se superiore allo zero, 1 se inferiore. Diventa così comprensibile la tabella di esempio, sempre riportata dal datasheet:

Ad esempio, il “+25” deriva da 2 elevato allo 0 BIT1 ( ovvero 1) + 2 alla terza BIT4 (8) + 2 alla quarta BIT5 (16) = 1+8+16 = 25 essendo che il BIT9 è 0 allora = +25°C. Estesa diventa: Questo vale per i numeri POSITIVI, mentre per i numeri NEGATIVI, ovvero le temperature SOTTOZERO il discorso è un po’ più complesso. Per questi numeri che, essendo NEGATIVI hanno il BIT8 pari a 1, per ricavare la temperatura è necessario fare il COMPLEMENTO a 2 dei BIT da 0 a 8. Il complemento a 2 si può ricavare invertendo i bit e sommando a questo un 1. Facendo così otteniamo:

BYTE 1 BYTE 0

BIT

15

BIT

14

BIT

13

BIT

12

BIT

11

BIT

10

BIT

9

BIT

8

BIT

7

BIT

6

BIT

5

BIT

4

BIT

3

BIT

2

BIT

1

BIT

0

1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 CIFRA

0 0 1 1 0 0 0 1 COMPL. A"1"

1 SOMMA

1 1 0 0 1 0 COMPL. A "2"

BYTE 1 BYTE 0

BIT

15

BIT

14

BIT

13

BIT

12

BIT

11

BIT

10

BIT

9

BIT

8

BIT

7

BIT

6

BIT

5

BIT

4

BIT

3

BIT

2

BIT

1

BIT

0

0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0

BASE 2 2 2 2 2 2 2 2

ESPONENTE 6 5 4 3 2 1 0 -1

PESO 64 32 16 8 4 2 1 1

Page 8: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

BASE 2 2 2 2 2 2 2 2

ESPONENTE 6 5 4 3 2 1 0 -1

PESO 64 32 16 8 4 2 1 1

Partendo quindi dalla cifra residente nel BYTE0, visto che nel BIT8 c’è un 1, la cifra è NEGATIVA. Invertito il BYTE0 e sommato 1, si ottiene in binario 110010, che, sommando i pesi dei bit partendo dall’ esponente -1, dà la cifra -25. Questo modo di organizzare i dati non è caratteristico solo del DS1820, ma è analogo per tutti i sensori 1-wire. In tutti i casi la risoluzione della sonda è limitata a 0,5°C. Utilizzando i valori contenuti nei registri COUNT_REMANING e COUNT_PER_C (ovvero i BYTE6 e 7) all’interno della formula:

Dove TEMP_READ equivale alla temperatura senza il decimali (ovvero i BIT da 7 a 1, escludendo l’ LSB). Tramite questa formula si può dimostrare che la risoluzione teorica arriva a 0,0625°C. La spiegazione di questo deriva dall’analisi del circuito di acquisizione. Detto in due parole si vanno a cercare i “resti” della conversione e si implementano con la parte intera, e credo che di più non sia necessario approfondire.

Page 9: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

DS18S20 La versione “S” costituisce un ulteriore passo avanti. Fisicamente uguale al DS1820 ha l’identico criterio di archiviazione dati su 9 BIT, ma al posto di essere realizzato con CONTATORI, viene realizzato con un convertitore ADC direttamente a 12BIT. I primi 9 vengono salvati nei BYTE 0 e 1, mentre i rimanenti 3 vengono allocati all’interno dei registri COUNT_REMAIN. In pratica è equivalente al vecchio DS1820 e pensato per essergli totalmente compatibile. Unica nota il tempo di conversione, che è più lungo (circa 800 ms a dispetto dei 600). DS18B20 La versione “B” è quella definitiva, il massimo in termini di prestazioni. Pur avendo la stessa forma dei suo i predecessori ha diverse caratteristiche aggiuntive. Non è un diretto sostituto del DS1820 e DS18S20. Il “B” infatti ha una risoluzione SETTABILE, da 9 a 12 bit, ovvero una risoluzione da 0,5 a 0,0625 C°. La memoria ROM e SCRATCHPAD hanno la stessa dimensione e il dato di temperatura viene salvato sempre nei BYTE0 e 1 dello SCRACTHPAD. A differenza della versioni di prima però il BIT0 del BYTE0 non “vale” più 0,5°C ma bensì 0,0625°C. In pratica i 9BIT di prima sono diventati 12, e il BIT MENO SIGNIFICATIVO non vale più 0,5 ma 0,0625.

Questo significa che il BIT0 vale 2 elevato alla meno 4, il BIT1 vale 2 elevato alla meno 3 e così via..fino al BIT10 che vale 2 elevato alla sesta ovvero 64. Il BIT11 esprime sempre il SEGNO della temperatura, quindi tutto come prima, tranne il fatto che ora si occupano semplicemente più BIT dei due BYTE. Diventano ora più comprensibili gli esempi di temperatura riportati sul datasheet:

Page 10: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Le considerazioni sono identiche a quelle fatte precedentemente. La differenza è solo nel “posto” occupato dai bit partendo da un “peso” più basso. A questo punto non c’è più bisogno di utilizzare formule aggiuntive per il “recupero” dei resti e salire di risoluzione e spariscono quindi i BYTE COUNT REMAIN e COUNT_PER_C. Il nuovo scracthpad del Ds18B20 ha questa forma

Stessi BYTE0 e 1, stessi registri TH e TL e relativo salvataggio in EEPROM. Troviamo però un nuovo BYTE4, il CONFIGURATION REGISTER. In questo BYTE (che viene salvato anche paro paro in una memoria EEPROM) troviamo il setting della RISOLUZIONE che deve avere il nostro DS18B20. Abbiamo detto che il sensore ha 12BIT di risoluzione, ma per fare questa conversione impiega 750 millisecondi, troppi a seconda delle applicazioni. E’ possibile quindi RIDURRE la risoluzione (anche perché non serve sempre avere salti di 0,0625°) per avere più velocità di acquisizione. Il CONFIGURATION REGISTER e relative velocità di acquisizione:

L’errore più comune è pensare che un DS18B20 impostato con risoluzione 9BIT sia compatibile con un DS18S20. Non è così. Il posto dei BIT occupati rimane sempre diverso, ovvero il BIT con peso 0,5 sarà, nella serie “S”, il meno significativo, mentre nella serie “B” rimane il il BIT3. Il BIT2,1 e 0 non vengono semplicemente scritti.

Page 11: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Proprio per questo motivo il DS18B20 ha un FAMILY CODE (ricordate?) , differente rispetto al 18/18S(28h al posto di 10h) . Il familycode è quel numeretto esadecimale che indica la famiglia di appartenenza del dispositivo 1-wire.

DS1822 Il DS1822 è la versione economica del DS18B20. E’ pienamente compatibile e haun’identica organizzazione di memorie registri ecc. Semplicemente ha un’accuratezza di +/- 2°C rispetto alla versione B20 che è di +/-0,5°C. In realtà consultando i cataloghi ho notato che il 1822 è PIU’ CARO rispetto al 18B20 di qualche euro (9 eur contro i 5 circa), ma tralascerei questi aspetti commerciali.

Page 12: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

I comandi dell’ 1-wire bus system nel DS18X20 Terminata la descrizione dell’organizzazione delle memorie interne è necessario descrivere i COMANDI con il quale il MASTER dialoga con questi sensori. Senza sapere che istruzioni inviare per interrogare il sensore non sarebbe possibile utilizzarli. Come già detto l’ 1-wire ha una rete che ha un singolo master e uno o più slave. Stabilito come sono organizzati i sensori immagazzinano i dati e trattandosi tutti di dispositivi SLAVE, sarà necessario che il MASTER invii comandi di acquisizione (il sensore li salva dentro la propria memoria) e successivamente sempre il master và a leggere i dati precedentemente acquisiti dal sensore. Si può dire quindi che i BYTE 0 e 1 fanno da tampone per l’ ouput seriale. In generale tutto il protocollo 1-wire, (per quello che riguarda le sonde della serie DS18) utilizzano pochi comandi che permettono la completa gestione dei dispositivi: Si dividono in:

- Comandi di inizializzazione Tutte le omunicazioni sul bus 1-Wire iniziano con una sequenza di inizializzazione Questa consiste in un impulso di reset trasmesso dal master seguito da un impulso di presenza trasmessa dalla slave.L'impulso presenza permette al master di capire che il DS1820 sul bus ed è pronto per funzionare.

- Comandi di gestione ROM Una volta che il master ha rilevato una presenza sul bus, può emettere un comando di gestione ROM, che sono tutti lunghi 8 bit (quindi due cifre esadecimali). Questi comandi, che sono descritti chiaramente nel datasheet, vengono elencati come

- READ ROM [33h] ‘ leggi ROM

- MACHROM [55h] ‘ ricerca una specifica ROM

- SKIPROM [CCh] ‘leggi tutto tralasciando la ROM

- SEARCHROM[F0h] ‘acquisisci tutte le ROM sl bus

- ALARM SEARCH[ECh] ‘ricerca sensori allarmati

Entrare nel dettaglio di ogni singolo comando impiegherebbe molto tempo. Diciamo che permettono al master di “navigare” all’interno della ROM del DS1820.

- Comandi di gestione SCRATCHPAD

Questi comandi, permettono di operare all’interno della memoria RAM, quindi di andare a leggere ad esempio, il BYTE0 e 1, dove è contenuto il DATO di temperatura. L’unico comando funzionale è il CONVERT T [44h], che obbliga il sensore a aggiornare il dato (ovvero il sensore acquisisce e salva). Di seguito una tabella riassuntiva:

Page 13: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Per leggere la temperatura, quindi, bisogna fare le seguenti negoziazioni: .

1) Il master invia un impulso di reset sul bus (da lato a basso)

2) I vari slave rispondono con il “Presence Pulse” (da alto a basso)

3) Il master invia un comando “Mach ROM” [55h] (oppure, se cè un solo device,

SERACHROM)

4) Il master invia la ROM del sensore che vuole leggere

5) Il master invia il comando [44h] per la conversione di temperatura

6) Il master invia un nuovo impulso di reset

7) Gli slave rispondono con il “Presence Pulse”

8) Il master invia un comando “Mach ROM” [55h]

9) Il master invia la ROM uguale al asensore che buol leggere

10) Il master invia un comando [Beh] per leggere la memoria RAM del sensore

11) Il master acquisisce i 9 bytes della memoria e lo slave li invia sequenzialmente.

Una cosa importante che ho trascurato è dire a cosa serve l’ IDCODE e perché questo debba essere unico per ogni sensore. Abbiamo detto che i sensori sono connessi tutti in parallelo. Quando il master invia un comando lo invia a tutti, e tutti trasmetterebbero il dato che conservano in memoria, contemporaneamente, su un solo filo..un pasticcio. Il master in realtà riesce ad interrogare ciascun sensore separatamente conoscendo il loro proprio IDCODE, al quale solo quel sensore risponde. Ma come fa il master a conoscerlo, quando lo và a cercare? I metodi usati per la funzione di apprendimento dell’ IDCODE sono essenzialmente 2. Il primo, più grezzo ma più usato, prevede il che il master sia stato programmato per cercare quel determinato IDCODE di quel determinato sensore, ricavato da una ricerca singola precedentemente fatta. In caso di guasto e sostituzione del sensore, il sistema non funziona più, perché cerca l’ IDCODE del sensore guasto e non

Page 14: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

riconosce quello del sensore nuovo. Bisogna quindi programmare il master per una ricerca con l’ IDCODE del sensore nuovo. Una bella rottura. Il secondo prevede che il master acquisisca in maniera automatica tutti gli IDCODE dei device presenti sulla rete. Questo chiama in ballo un algoritmo, che permette di discriminare la presenza di ogni singolo device presente sul bus facendo una serie di letture consecutive e elaborando di volta in volta i dati. La cosa in realtà è meno complessa di quanto possa sembrare, ma sarebbe davvero lunga spiegare il come e il perché. Anche perché bisognerebbe parlare del CRC (controllo di ridondanza) una specie di prova del 9. In due parole per essere sicuri che l’algoritmo abbai dato risultati validi è necessario eseguire un calcolo che deve dare come risultato il CRC del componente. Una sorta di CHECKSUM della rete, insomma. Un altro aspetto che ho volutamente trascurato è quello del TIMING, ovvero delle tempistiche che i segnali devono rispettare, sulle quali sorvolo. Interfacce PC/1-WIRE La MAXIM mette a disposizione ben quattro interfacce per la connessione diretta tra PC e dispositivi 1-wire. Le prime due sono seriali (la DS9097U-S09 e 9097U-009) una usb, la DS9490R, più una quarta dedicata agli i-button, la DS9490B.

Anche se le seriali sono ancora in vendita, ovviamente sono obsolete, sostituite dai modelli con interfaccia USB. Il costo di queste interfacce si aggira tra i 30 e i 50 euro (tra l’altro sono più costose le vecchie). Internamente tutte hanno un apposito integrato di interfaccia che permette la gestione del protocollo in maniera ottimale, la gestione OVERDRIVE (ad alta velocità) del bus e diverse funzioni aggiuntive. Uno sguardo al datasheet e allo schema elettrico non lascia dubbi sulla maggiore complessità di questa interfaccia e di come sia antieconomico provare a replicarne una.

Page 15: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

E’ poi possibile trovare su baia anche dispositivi analoghi “cloni” dalle identiche funzioni ma dal costo che varia dalla metà ad un terzo, immagino con circuiteria interna analoga.

Personalmente consiglio a chi si voglia cimentare in lavori sull’ 1-wire di acquistare sempre prodotti originali garantiti e supportati dal produttore, visto anche che la differenza di costo è dell’ordine di poco più di 15 euro.

Page 16: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

La “mia” interfaccia 1-wire/RS232 Dopo tutto questo pappone di teoria, vediamo una semplicissima esperienza pratica. Il circuito proposto è una semplice interfaccia seriale RS232-1WIRE che, collega una rete di uno o più sensori, permette ad un pc di visualizzare tutti i dati possibili. Quanti non hanno un pc con la seriale, possono, come ho fatto io, utilizzare un comune adattatore RS232-USB senza alcun problema. Lo schema elettrico è preso paro-paro da internet visto su moltissimi siti, è sempre lo stesso. Io l’ho montato direttamente sul connettore della seriale con montaggio in aria.

Dal momento che non disponevo dei diodi SCHOTTY (molti indicano BAT85 o1N5818 ecc) io ho usato come D1 e D2 comuni diodi 1N4148 e posso dire che funziona comunque. Addirittura non disponendo di uno zener da 3,9V ne ho utilizzato uno da 3,3V con un serie (anodo con anodo) un altro 1N4148 e anche provando a variare il valore della R posso dire che questo circuito non è assolutamente critico. Và anche detto che esistono altre interfacce molto semplici, realizzate con un transistor NPN o PNP (tipicamente BC337 o BC556) e anche mosfet 2N7002. Pur avendole realizzate non sono mai riuscito a farle funzionare bene per cui consiglio lo schema con 4 diodi e una resistenza riportato sopra e sotto quello che ho fatto io.

Page 17: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Elenco Componenti: R1=1500 ohm D2=D3=D7=1n4148 D6= zener 3,3V D4=zener 6,2V U1…U5=DS1820 U6=DS18B20 Montaggio su breadboard

Un sensore è il DS18B20 in confezione “waterproof”. Non è un prodotto Maxim ma rielaborato da terze parti. E’ molto comune su Baia ad un costo intorno ai 3 euro.

Il software Fondamentale è il sw OnewireViewer che è disponibile gratuitamente dal sito Maxim. Lanciato e settata la COM, impiega qualchesecondo a riconoscere tutti i sensori, i IDCODE, FAMILYCODE ecc naturalmente alle temperature da loro acquisite. E’ presente anche una finestra grafica che mostra la variazione di temperatura con un tempo configurabile.

Page 18: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

In rete è possibile reperire diversi altri sw gratuiti funzionanti con la stessa interfaccia. Il più comune è LOGTEMP, che permette una gestione molto più flessibile dei dati e anche funzioni di caricamento su FTP.

Page 19: INTERFACCIA 1-WIRE e DS18XX Sensori di temperatura 1-wire

Oltre questo esistono diversi altri sw che, a vario livello, svolgono tutti le stesse funzioni di acquisizione e visualizzazione dei dati. Tested software: Digitemp Owfs DTGraph OneWireViewer LogTemp Conclusioni Come sempre consiglio a chine vuole sapere di più di consultare il sito del Produttore che è davvero ricco di documentazione. Spero, nonostante la lunghezza, di essere stato utile a chi si vuole cimentare nell’uso di questi sensori e, in generale, di tutti i dispositivi 1-wire.