InSight

Scienza e Tecnologia nella vita di tutti i giorni

Sonda di temperatura DS18B20

Il protocollo di comunicazione

Prima di esaminare nel dettaglio il codice sorgente, vediamo in cosa consiste il già menzionato protocollo one-wired utilizzando i diagrammi temporali estratti dal datasheet della sonda.
Fra tutti i dispositivi che utilizzano la linea di comunicazione. è previsto che esista un solo master e che tutti gli altri dispositivi si comportino come slave. Chi comanda la comunicazione, cioè decide quanto deve iniziare una trasmissione, è il master, cioè il PIC.

[cml_media_alt id='2025']reset_pulse[/cml_media_alt].Quando il PIC vuole dialogare deve inviare sulla linea un “impulso di reset“. Esso consiste nel mettere la linea a 0 e mantenerla per un tempo compreso fra i 480 e i 960μs come mostrato in figura nella parte sinistra (Cliccare per ingrandire). Dopo l’impulso di reset il PIC si mette in ascolto. La sonda che ha visto l’impulso di reset risponde con un impulso di “presence“. Un impulso di presence consiste nel mettere la linea a 0 a partire da 15-60μs dall’impulso di reset e per un tempo compreso fra i 60 e i 240μs ed è schematizzato nella figura nella parte di destra.

Se dopo 60μs il PIC non ha visto uno zero sulla linea saprà che non vi è nessuna sonda collegata. Altrimenti potrà iniziale la comunicazione vera e propria.

Supponiamo ovviamente che almeno una sonda ci sia. Dobbiamo distinguere due situazioni: sul bus è presente una sola sonda oppure ve ne sono più d’una.
Come già detto, ci occuperemo solo del caso in cui sia presente una sola sonda. Quindi subito dopo l’inizializzazione il bus master invia alla sonda un comando che si chiama skip ROM (corrispondente al codice esadecimale CCH).
Il comando skip ROM dice alla sonda di “saltare” l’invio del codice univoco da 64 bit.
Quando la sonda riceve questo comando sa che subito dopo deve attendersi un comando diretto che riguarda le sue funzioni di “sonda”.

[cml_media_alt id='2031']read_write[/cml_media_alt]Dobbiamo innanzitutto sapere che la sonda legge il valore logico sul filo 15 microsecondi dopo che questo è stato tirato giù dal bus-master. In altre parole se la sonda vede la linea, che è normalmente a 1, andare a 0 saprà che il bus-master le sta per comunicare un bit e quindi aspetterà 15μs e poi leggerà lo stato della linea interpretando il valore come un bit di dato.
Quello che deve fare il PIC è quindi, se vuole trasmettere uno 0, abbassare la linea e continuare a tenerla bassa fino a oltre i 15μs per almeno 75μs. Questo perché la sonda potrà leggere il valore della linea in un intervallo compreso fra 15 e 75μs da quando il bus-master l’ha abbassata.
Viceversa, se il PIC vuole trasmettere un 1, deve rilasciare la linea entro i 15μs e lasciarla invariata per almeno 75μs.
Ovviamente anche nel caso della trasmissione di un 1 la linea deve essere dapprima abbassata dal PIC che, per dare il tempo alla sonda di accorgersi della variazione sulla linea, la deve mantenere a 0 per almeno 1μs prima di poterla rilasciare entro il limite dei 15μs.
Il diagramma a sinistra illustra quanto appena spiegato (cliccare per ingrandire) e fa vedere la temporizzazione di lettura e scrittura di uno 0 o di un 1 sia da parte del master che da parte dello slave.

2 commenti

  1. Diego Bincoletto

    2 Febbraio 2020 at 10:40

    Hai anche una versione del codice in C?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

© 2024 InSight

Based upon a Anders Noren themeSu ↑