Protokol 1-Wire

Z Kiwiki
Verzia z 18:56, 20. január 2010, ktorú vytvoril Juraj (diskusia | príspevky)
Skočit na navigaci Skočit na vyhledávání


Protokol 1-Wire

Protokol 1-Wire [1] vznikol v laboratóriách firmy Dallas Semiconductor pôvodne na komunikačné prepojenie zariadení na krátke vzdialenosti, typicky na vzdialenosti na plošnom spoji a na komunikáciu používa iba jeden vodič. Rozšírením používania tohto protokolu sa tento rozvinul a umožňuje prepojenie zariadení na oveľa väčšie vzdialenosti. 1-Wire sieť (ďalej sieť) predstavuje komplexné usporiadanie 1-Wire zariadení, komunikačných liniek a prepojení, pričom každá takáto sieť je navrhnutá podľa požiadaviek na topológiu a hardvér. 1-Wire master zariadenie (ďalej master) je kľúčový prvok siete. Ako jediné zariadenie môže inicializovať komunikáciu s 1-Wire slave zariadeniami (ďalej slave).

Popis 1-Wire siete

Kritické hodnoty, ktoré popisujú siete sú rádius a záťaž. Rádius predstavuje najväčšiu vzdialenosť medzi masterom a slaveom a je meraný v metroch. Záťaž reprezentuje celkovú dĺžku vodiča zapojeného v sieti a rovnako je meraná v metroch. Na príklad v sieti zapojenej do hviezdy s tromi vetvami s dĺžkami 10, 20 a 30 metrov máme rádius 30 metrov a záťaž 60 metrov Všeobecne, záťaž siete obmedzuje dobu nábehu na vodiči a rádius stanovuje načasovanie najpomalšieho odrazu signálu. Záťaž, ktorú sieť podporuje je obmedzená a okrem dĺžky samotného vodiča je určená aj počtom prepojení a slave zariadení a je stanovená na maximálne 500 metrov. Každý slave pridá záťaž podobnú záťaži kusa vodiča, takže pri návrhu siete treba pripočítať pre každé slave zariadenie záťaž 0,5 metra a pri zariadeniach typu iButton 1 meter. Aj keď je záťaž ovplyvnená viacerými faktormi, najväčším prispievateľom je kapacita. Podľa [3], každé prepojenie, ktorého parazitná kapacita prekračuje 24 pF pridáva záťaž 0,5 metra.

Topológie 1-Wire siete

1-Wire siete sa vyznačujú možnosťou vybudovať sieť prakticky v akomkoľvek tvare[2]. Zvyčajne ich je však možné zaradiť do troch kategórií. Lineárna topológia – 1-Wire zbernica je pár vodičov s počiatkom v master, rozširujúci sa až do najvzdialenejšieho slave. Prípadné ďalšie slave zariadenia sú k zbernici pripojené podľa Obr. 2.1 odbočkami s dĺžkou menej, ako tri metre.

Obr. 2.1 Lineárna topológia

Vetvená topológia – 1-Wire zbernica má počiatok v master a predlžuje sa až do posledného slave. Ďalšie slave zariadenia sú pripojené k zbernici podľa Obr. 2.2 odbočkami s dĺžkou viac, ako 3 metre.

Obr. 2.2 Vetvená topológia

Topológia „do hviezdy“ – 1-Wire zbernica je rozdelená pri alebo blízko master zariadenia a rozširuje sa vo viacerých vetvách s rôznymi dĺžkami. Slave zariadenia sú umiestnené na každej vetve podľa Obr. 2.3.

Obr. 2.3 Topológia „do hviezdy“

Uvedené topológie predstavujú kategóriu nespínaných sietí. Nespínané siete zapojené do hviezdy ale vykazujú najvyššiu poruchovosť. Prepojenie viacerých vetiev predstavuje spojenie rôznych impedancií a odrazy z koncov dlhých vetiev môžu spôsobiť chyby v dátach. Kvôli týmto dôvodom je vhodnejšie zvoliť spínanú sieť podľa Obr. 2.4.

Obr. 2.4 Spínaná sieť

Spínaná sieť umožňuje obísť limitácie 1-Wire protokolu a vybudovať sieť rozdelenú do sekcií, ktoré sú podľa požiadavky elektronicky pripájané k master zariadeniu. Sieť na Obr. 2.4 zapojená do hviezdy, takto vlastne predstavuje tri nezávislé siete s lineárnou topológiou, z ktorých je súčasne pripojená len jedna.

OneWire SW v1.3

OneWireSW modul pre PSoC bol vyvinutý nezávislým vývojárom Wesom Randallom v roku 2006. Jeho výhodou je, že pre svoju činnosť nepotrebuje bloky PSoC a používa iba 1 pin. Nevýhodou je, že hodinová frekvencia mikroprocesora musí byť minimálne 12 MHz. Modul (knižnica) je množina rutín, ktoré zapisujú a čítajú dáta a umožňujú mikroprocesoru plniť funkciu master zariadenia podľa protokolu 1-Wire. Modul OneWireSW bol doplnený do knižníc aplikácie PSoC Designer, a je oficiálne podporovanou knižnicou firmy Cypress.

DS18S20

Popis a vlastností

DS18S20[3] je digitálny teplomer s rozlíšením 9 bitov merajúci teplotu v stupňoch Celzia dodávaný v puzdrách TO-92 a SO-8 na Obr. 2.5. Má funkciu alarmu s užívateľsky nastaviteľnou vysokou a nízkou hodnotu teploty, ktorá je uložená v nezávislej EEPROM pamäti. Teplomer komunikuje po 1-Wire zbernici a podľa špecifikácie 1-Wire vyžaduje iba jeden vodič na komunikáciu s mikroprocesorom. Operačná teplota je v rozsahu od –55 °C do +125 °C a má presnosť ±0.5 °C na meracom rozsahu od –10 °C do +85 °C. DS18S20 môže byť napájaný parazitným napájaním priamo z dátovej linky, čím nám ubudnú náklady na externý napájací zdroj.

Obr. 2.5 Puzdrá DS18S20

Každý DS18S20 má unikátne 64-bitové sériové číslo so štruktúrou zobrazenou na Obr. 2.6, čím je možné identifikovať[4] a používať viacero týchto teplomerov na jednej komunikačnej linke. Je teda jednoduché použiť jeden mikroprocesor na riadenie väčšieho počtu teplomerov distribuovaných na veľkej ploche, čo je výhodné pre aplikácie ako vykurovanie, ventilácia a klimatizácia budov, kontrola prostredia, teplotné monitorovacie systémy budov, ale aj strojov a vybavenia.

Obr. 2.6 Štruktúra 64 bitového sériového čísla

Bloková schéma DS18S20

Obr. 2.7 Bloková schéma DS18S20

Na Obr. 2.7 je bloková schéma DS18S20, ktorá sa dá rozdeliť na dve časti. Napájacia časť je napájaná buď externým zdrojom alebo pomocou parazitného napájania. Pri parazitnom napájaní je prúd privádzaný cez pull-up rezistor na pin DQ, aby bolo napätie zbernice vo vysokom stave signálu. V tomto stave sa súčasne nabíja vnútorný kondenzátor CPP, ktorý napája zariadenie, keď je zbernica v nízkom stave signálu. Pri parazitnom napájaní musí byť pin VDD prepojený s pinom GND. Pamäťová časť DS18S20 je rozdelená na dve oblasti. Nezávislá pamäť EEPROM, v ktorej môžu byť uložené nízka a vysoká hodnota teploty pre funkciu alarmu. Pokiaľ sa táto pamäť nevyužíva pre funkciu alarmu, môže byť využitá aj na uloženie iných údajov. Pamäť SRAM označovaná, ako scratchpad obsahuje údaje o nameranej teplote a vypočítané CRC. Bajty scratchpadu sú rozdelené podľa Tab. 2.1. Bajty 0 a 1 obsahujú LSB a MSB registra teploty a sú označené iba pre čítanie. Bajty 2 a 3 poskytujú prístup k registrom TH a TL a sú určené pre nastavovanie vysokej a nízkej hodnoty teploty pre funkciu alarmu. O znamienku uloženej hodnoty rozhoduje príznak S uložený na bite 7 na Obr. 2.8. Ak je S rovné 0, hodnota je pozitívna, ak je rovné 1 hodnota je negatívna.

Obr. 2.8 Štruktúra registrov TH a TL

Bajty 4 a 5 sú rezervované výrobcom a majú hodnotu 0xFF. Bajty 6 a 7 obsahujú registre COUNT_REMAIN a COUNT PER_C, v ktorých sú uložené dáta pre výpočet rozšíreného rozlíšenia merania teploty. Posledný 8. bajt obsahuje kontrolný súčet CRC vypočítaný teplomerom.

Tab. 2.1 Štruktúra scratchpadu

CRC je počítaný z dát uložených v scratchpade a mení sa vždy, keď nastane zmena scratchpadu. CRC predstavuje metódu kontroly[5] validity dát načítaných z DS18S20. Aby sme overili, že dáta boli načítané korektne, je nutné vykonať prepočet CRC v master zariadení a výsledok porovnať s CRC zo scratchpadu. Pokiaľ je načítané aj vypočítané CRC zhodné, dáta boli načítané bez chyby. Ekvivalentná polynómiálna funkcia pre výpočet CRC je

[math]CRC=X^{8}+X^{5}+X^{4}+1[/math] (2.1)

Meranie teploty

DS18S20 má rozlíšenie 9 bitov, a k tomu zodpovedajúci krok 0,5 °C. Po prijatí príkazu na vyhodnotenie teploty, teplomer vykoná meranie a analógovo-digitálnu konverziu. Po konverzii sú namerané hodnoty uložené v dvoj-bajtovom registri v scratchpade podľa Obr. 2.9 a sú kalibrované v stupňoch Celzia.

Obr. 2.9 Štruktúra MSB a LSB

MSB slúži na rozlíšenie znamienka uloženej hodnoty. Ak je S rovné 0, hodnota je pozitívna, ak je rovné 1, hodnota je negatívna. Použitím dát z registrov COUNT_REMAIN a COUNT PER_C je možné dosiahnuť rozlíšenie vyššie, ako 9 bitov. COUNT_PER_C je fixne nastavený na hodnotu 0x10. Po načítaní zo scratchpadu je hodnota TEMP_READ získaná odstránením nultého bitu z teplotných dát podľa Obr. 3.9. Rozšírené rozlíšenie je potom vypočítané pomocou vzorca

[math]Teplota=TEMP\_READ-0,25+\frac{COUNT\_PER\_C-COUNT\_REMAIN}{COUNT\_PER\_C}[/math] (2.2)

Príklady číselných hodnôt teplôt sú v Tab. 2.2.

Tab. 2.2 Príklady prepočtu teplôt
Teplota [°C] Digitálny zápis
(binárny)
Digitálny zápis
(hexadecimálny)
+85,0 0000 0000 | 1010 1010 0x00AA
+25,0 0000 0000 | 0011 0010 0x0032
+0,5 0000 0000 | 0000 0001 0x0001
0 0000 0000 | 0000 0000 0x0000
-0,5 1111 1111 | 1111 1111 0xFFFF
-25,0 1111 1111 | 1100 1110 0xFFCE
-55,0 1111 1111 | 1001 0010 0xFF92

Odkazy a referencie