Jste zde

Popis sériové komunikační linky digitálního teploměru DS 1821

Digitální teploměr DS 1821 od společnosti DALLAS Semiconductor používá pro svou komunikaci s okolím

jednovodičovou sériovou linku. Komunikační protokol této linky patří mezi jednoduché systémy, nemá zabezpečovací

bloky a je zpracovatelný běžnými procesorovými systémy.

Před vlastním popisem protokolu si připomeňme některé datové údaje obvodu DS 1821. Komunikačním pinem je výstup označený DQ. Tento výstup je softwarově nastavitelný jako bistabilní výstup nebo jako komunikační linka. Výstup je svým charakterem s otevřeným kolektorem. Pro správnou funkci komunikační linky je nutno mezi výstup DQ a napájecí napětí VDD připojit odpor o hodnotě 4,7kΩ . Princip funkce obvodu pochopíme při popisu bitového přenosu.

Popis registrů

První registr v postupu popisu je Konfigurační registr. Z hlediska funkční obsluhy je registrem nejdůležitějším. Je složen z 8 bitů, z toho nejnižších 5 bitů je charakteru EEPROM. Nutnost tohoto rozložení pochopíme z výkladu funkce jednotlivých bitů. Tyto bity nesou toto označení:
 

bit7bit6bit5bit4bit3bit2bit1bit0
DONE
1
NVB
THF
THL
T/R
POL
1SHOT

Podle nastavení bitů je řízena funkce obvodu. Význam bitů a funkční nastavení pochopíme z následující tabulky:

Označení bituNázev bituCharakter bituPopis funkce
DONE
Ukončení konverze teploty
Pouze čtení
DONE=0 Probíhá konverze teploty
DONE=1 Konverze teploty ukončena
NVB
Zápis do EEPROM
Pouze čtení
NVB=0 Zápis do EEPROM ukončen
NVB=1 Probíhá zápis do EEPROM
THF
Návěští horní teploty
Čtení/Psaní
THF=0 Změřená teplota je nižší než nastavená v registru TH
THF=1 Změřená teplota je vyšší než nastavená v registru TH
THL
Návěští dolní teploty
Čtení/Psaní
TLF=0 Změřená teplota je vyšší než nastavená v registru TL
TLF=1 Změřená teplota je nižší než nastavená v registru TL
T/R
Výkonový mód
Čtení/Psaní
T/R=0 Jednovodičová komunikace
T/R=1 Termostat mód
POL
Polarita výstupu
Čtení/Psaní
POL=0 Výstup DQ aktivní v „0“
POL=1 Výstup DQ aktivní v „1“
1SHOT
Mód konverze
Čtení/Psaní
1SHOT=0 Opakovaná konverze teploty. Zahajuje se povelem START a ukončuje povelem STOP
1SHOT=1 Jedna konverze teploty.Zahajuje se povelem START a po konverzi přejde obvod do úsporného režimu

Registry datových údajů jsou Teplotní registr, Registr horní nastavené úrovně a Registr nastavené dolní úrovně. Všechny tři registry mají stejnou strukturu. Rozložení bitů je zřejmé z následujícího:

bit7bit6bit5bit4bit3bit2bit1bit0
S
26
25
24
23
22
21
20

Ještě jeden registr je dostupný a tím je čítač, který je u tohoto typu obvodu 9bitový. Jeho údaj se použije při kalkulaci teploty pro vyšší rozlišení než je 1°C.

Instrukční soubor

Projděme si instrukční soubor ovládacích povelů. Soubor je omezen na čtení a zápis do registrů, zahájení a zastavení konverze teploty. Tedy základní údaje potřebné pro ovládnutí všech funkcí. Význam je patrný z tabulky:
 

InstrukceKód (HEX)Popis
Čtení instrukce
AA
Čtení posledně provedené konverze teploty z teplotního registru DS1821
Start konverze
EE
Zahájení měření teploty
Stop konverze
22
Zastavení teplotní konverze
Zápis TH
01
Zápis dat do registru TH
Zápis TL
02
Zápis dat do registru TL
Čtení TH
A1
Čtení dat z registru TH
Čtení TL
A2
Čtení dat z registru TL
Zápis status
0C
Zápis dat do konfiguračního registru
Čtení status
AC
Čtení dat z konfiguračního registru
Čtení čítače
A0
Čtení dat z 9bitového registru pro kalkulaci vyššího rozlišení
Převod dat
41
Převod dat akumulátoru do čítače

Komunikační rozhraní

Známe již instrukční soubor a stojí před námi vysvětlení chování sériové linky pro přenos datových údajů. Jedná se opět o jednoduché principy a popíšeme si je pro procesy inicializace, čtení a zápisu dat.

Inicializace je základem komunikace a připravuje obvody před přenosem dat. Grafické zobrazení probíhajících časových návazností je dostatečně srozumitelné.


Komunikační linka INICIALIZACE

Popišme si průběhy. Řídící procesor na komunikační linku vyšle „0“ po dobu minimálně 480 µs a linku uvolní. V době 15-60 µs díky odporu 4k7 se linka nastaví na „1“. Po této čekací době odpovídá teploměr nastavením „0“ po dobu 60-240 µs. Inicializace je ukončena po době 480 µs čtením „1“ z linky.

Programově je v asembleru pro AT89C2051 možno vyjádřit v podprogramu následně:

; podprogram pro inicializaci DS1821
; sériová linka připojená na pin P3.1
; ničí R2
InT:
push	PSW
clr	P3.1	; začátek inicializace
mov	R2,#5	; čekací smyčka 500µs
acall	T01ms
setb	P3.1	; uvolnění linky
mov	R2,#1	; čekací smyčka 100µs
acall	T01ms
InT:				; čekání uvolnění linky od DS
mov  	c,P3.1
jnc	InT1
pop	PSW
ret

Zápis do registrů DS1821 probíhá podle následujícího grafického zobrazení:


Komunikační linka ZÁPIS

Opět popis průběhů. Pokud chceme zapsat „0“ je nutno podržet linku na 0V po dobu v rozmezí 60 až 120µs. Pokud chceme zapsat „1“ je nutno po čekací době uvolnit linku do 1µs. Velmi jednoduché.

Programově je v asembleru pro AT89C2051 možno vyjádřit v podprogramu pro přenos 1bytu následně:

; podprogram pro zápis 1 byte do  DS1821
; sériová linka připojená na pin P3.1
; ničí R2,R3
PisT:
mov	R3,#8
PisT3:
rrc	a
jnc	PisT1
; zápis „1“
mov	R2,#1	; čekací smyčka 100µs
clr	P3.1
nop
nop
nop
setb	P3.1
acall	T01ms
ajmp	PisT2
PisT1:			        ; zápis „0“
mov	R2,#1	; čekací smyčka 100µs
clr	P3.1
acall	T01ms
setb	P3.1
PisT2:
djnz	R3,PisT3
ret

Čtení z registrů DS1821 probíhá podle následujícího grafického zobrazení:


Komunikační linka ČTENÍ

Opět popis průběhů. Čtení „0“ probíhá tak, že po 1µs uvolní řídící procesor linku a pokud DS podrží linku na úrovni 0V pak čteme do 15µs z linky „0“. „1“ čteme obdobně do 15µs po uvolnění linky procesorem. Opět velmi jednoduché.

Programově je v asembleru pro AT89C2051 možno vyjádřit v podprogramu pro čtení 1bytu následně:

; podprogram pro zápis 1byte do  DS1821
; sériová linka připojená na pin P3.1
; ničí A,R2,R3,R5
CtiT:
mov	R5,#8
CtiT1:
clr	P3.1
nop
nop
nop
setb	P3.1
mov	R3,#4	; čekací smyčka 15µs
CtiT2:
djnz	R3,CtiT2
mov	c,P3.1
rrc	a
mov	R2,#1
acall	T01ms
djnz	R5,CtiT1
ret

Funkce DS1821

Máme již pohromadě všechny údaje nutné pro náš návrh požadované funkce. Připomeňme si, že obvod může pracovat v módu teploměru s datovým přenosem nebo jako regulátor. Na začátku potřebujeme inicializovat registry pro požadovanou funkci. Začneme tedy zápisem údajů.

Zápis dat jsme již probrali. Postup zápisu do konkrétního registru probíhá podle následujícího algoritmu. Provedeme inicializaci a zapíšeme data do požadovaného registru. Například start konverze dat můžeme zrealizovat následně:

; podprogram pro zahájení konverze teploty
; sériová linka připojená na pin P3.1
; volá podprogramy pro inicializaci a zápis dat
; ničí A
Tepl:
mov	a,#238
acall	InT
acall	PisT

Čtení dat z teplotního registru provedeme tak, že obvod inicializujeme, dále zapíšeme povel pro čtení dat a data přečteme. Algoritmus můžeme zrealizovat následně:

; podprogram pro čtení  teploty
; sériová linka připojená na pin P3.1
; volá podprogramy pro inicializaci, zápis a čtení dat
; údaj o teplotě v A
Tepl:
mov	a,#170
acall	InT
acall	PisT
acall	CtiT

Ještě si popišme přechod z módu komunikační linky do módu termostatu. Provádí se při nastavení úrovně napájecího napětí na výstupu DQ a následně přivedení napětí na 0V na VDD . Po tomto nastavení se na výstup DQ přivede 16 stejných impulsů. Při přivedení napájení na pin VDD je ukončen přechod mezi oběma módy v obou směrech.

Závěr

Popsali jsme jeden z nejednodušších obvodů z rodiny teploměrů od společnosti DALLAS. Komunikační protokoly jsou v rodině podobné a rozdíly jsou zejména v typu komunikace v linkovém uspořádání. Shodné jsou přístupy na registry a řídící povely. Je možno říci, že pochopení funkce DS1821 je vstupem pro zvládnutí celé rodiny. A ne jen to, setkal jsem se s obdobnou aplikací v komunikaci mezi vzájemně nekompatibilními procesorovými systémy. Kreativitě se přece meze nekladou.
 

Ing.Miroslav Závidčák
zavi@ atlas.cz

DOWNLOAD & Odkazy

Hodnocení článku: 

Komentáře

Nabizim stavebnici digitalniho teplomeru s DS1821 rizeneho procesorem Atmel s 3-mistnym displejem LED. Rozsah teplot dany rozsahem DS. Provedeni SMD. Popis zaslu na email. Dotazy na radekhlub@wo.cz