OneWire

1-Wire sběrnice

Všechny zařízení SDS poskytují 1-Wire sběrnici, pro připojení externích čidel teploty a dalších chipů.

Zařízení SDS-MACRO-LM nebo SDS-BIG mají k dispozici dvě samostatné sběrnice - sběrnici A a B.

Ostatní zařízení mají k dispozici jen jednu samostatnou sběrnici - sběrnici A.

Každá sběrnice (A, B) je zapojena zcela samostatně, a programový přístup ke každé sběrnici je také zcela samostatný.

Některé zařízení mají provozní napěťovou úroveň na 1-W sběrnici na +3V3 a některé na +5V0. Zjistěte si aktuální hodnotu pro vaše zařízení zde.

Podporované 1-W čidla teploty

Podpora jednotlivých chipů vždy závisí na aktuálnosti firmware v zařízení SDS. Sledujte vydávání nového firmware, podpora pro nové 1-W chipy neustále přibývá.

Chipy pro měření teploty (SDS čte teplotu):

  • DS18B20 - prioritní typ čidla
  • DS18S20 - čidlo s omezenou přesností měření
  • DS1822 - měření teploty
  • MAX31820 - měření teploty
  • MAX31826 - pouze měření teploty (EE není využita)
  • DS28EA00 - měření teploty

Chipy pro měření teploty a vnějšího připojeného čidla vlhkosti (SDS čte teplotu a počítá vlhkost):

  • DS2438 - v rámci modulu SDS-1W-T-RH - měření teploty a připojeného čidla HIH-5031 včetně kompenzace (na teplotu a napájecí napětí)


Zařízení SDS automaticky obsluhuje teplotní čidla

Algoritmus postupně obsluhuje jednotlivá čidla.

Využívá dvou nezávislých cest, jedna pro sběrnici [A] a druhá pro sběrnici [B] (pouze SDS MACRO). Obsluha obou sběrnic je od sebe časově posunuta o 50 msec, aby nedocházelo k vzájemnému rušení.

SDS prochází seznam nalezených teplotních čidel (1-W chipů) a postupně je pořadě aktivuje (spouští měření) a následně z nich čte měřenou hodnotu. Současně je prováděn teplotní převod vždy jen z jednoho chipu.

Algoritmus byl inovován v roce 2020 a je teď efektivnější (rychlejší) a odolnější.


Využití 1-W čidel teploty

Teploměry na sběrnici A jsou číslovány jako 1 až 16. Teploměry na sběrnici B jsou číslovány jako 17 až 32.

Rescan sběrnic pro teploměry se provádí z webového rozhraní zařízení SDS.

Jednotlivé pozice (1 až 32) jsou obsazeny postupně, tak jak roste číselná hodnota ROM-CODE jednotlivých teplotních čidel (tento algoritmus je přesně daný a vždy zaručí takovýto výsledek). Navíc je zde možnost "uzamknout" jednotlivé pozice (1 až 32) a dokud jsou konkrétní pozice uzamčeny, nebudou do nich přiřazené ROM-CODE přepsány dalším rescanem.


SDS-C program

Následující sekce popisuje programovací jazyk SDS-C, který je dostupný na vybraných zařízeních SDS. Některá zařízení používají FULL-C, pro který máme návody jinde na této WiKi.

Následující ukázkový SDS-C program vypisuje teplotu z prvního 1-W čidla na sběrnici [A], a to každou vteřino, do echo.htm stránky.

// pomocne promenny
int teplota_cele_cislo;
int teplota_desetiny;

// pro zprehledeni zapisu programu pouzijeme define
#define TEPLOTA_1 sys[310]

main
{
  echoclear();

loop:

 // je teplota z cidla dostupna ?
 
 if (TEPLOTA_1 == 16777216)
 {
   echo('CIDLO NEFUNGUJE, zkusim to znovu za 1 sec');

   // pockam 1 sec
   wait(1000);
   
   // a znovu
   goto loop;
 }

 // vypocitej celou a desetinnou cast
 teplota_cele_cislo = TEPLOTA_1 / 100;
 teplota_desetiny = TEPLOTA_1 % 100;
 //
 if (teplota_desetiny >= 0) goto preskoc1;
 // musime otocit znamenko
 teplota_desetiny = 0 - teplota_desetiny;

preskoc1:

 // napis do echo.htm
 echo('Teplota je: ',teplota_cele_cislo, '.', teplota_desetiny , ' stC');

 // pockame 1 sec
 wait(1000);
 
 // a znovu
 goto loop;
}


Ostatní 1-W chipy (obsluha prostřednictvím SDS-C)

Zařízení SDS, které mají SDS-C, umožňují provést "rescan" 1-W sběrnice, a poskytnou ID (family code) pro libovolný jiný chip (než jsou výše vypsané teploměrné chipy, které jsou zpracovány zvlášť).

Zařízení SDS, které mají FULL-C, mají zcela jiný přístup k 1-W sběrnici (přes funkce) - takže následující návod platí pouze pro SDS-C.


  • DS1990A - "Dallas iButton", tzv. přístupový chip

Chip DS1990A je nejznámější přenosný identifikační chip (obsahuje unikátní sériové číslo), který se využívá pro přístupové systémy a identifikaci zboží, nebo postupu práce - možností je skutečně mnoho.


Typické použití pro DS1990A je "domovní přístupový systém", kdy tento systém má tabulku povolených DS1990A chipů, a při přiložení správného chipu dojde k chvilkovému sepnutí relé, které ovládá elektromagnetický zámek vchodových dveří.

Princip naznačuje následující algoritmus:

1. začátek programu 
2. rescan 1-W sběrnice
3. byl nalezen přiložený DS1990A chip ?
4. pokud NE, skok na [2.]
5. pokud ANO, porovná se přečtený sériový kód (unikátních 64 bitů) s tabulkou povolených (naučených) kódů 
6. zde si může systém uložit přiložený kód do paměti přístupů (pro pozdější prohlédnutí přístupů uživatelem)
7. pokud není sériový kód akceptován (neznáme ho, např.), skok na [2.]
8. pokud je sériový kód akceptován, na chvíli se sepne relé
9. skok na [2.]


Následuje jednoduchý univerzální SDS-C program, který zobrazuje připojené 1-W chipy na 1-W sběrnici. Tento program můžete využít jako základ pro svůj vlastní, větší program, který na základě přečteného ROM-CODE z 1-W chipu něco provede (např. při přiložení DS1990A chipu na chvíli sepne relé - a máte základ přístupového systému s chipy Dallas iButton).

// vybereme si 1-W sbernici [A]
#define BUSID 0
#define ONEBUSSTATUS sys[940]
#define TIMESTAMP sys[950]
#define ROMCODETEXT sys[951]

// a zajima nas DS1990A, ktery ma FamilyCode 0x01
#define FAMILYCODE 0x01

main
{

 echoclear();

 echo(sys[3], ' - PROGRAM START - ');
 
loop:
 
 //echo(sys[3],': ... rescan start ... ');
 
 // zahajim rescan
 onewire_rescan(BUSID, FAMILYCODE);
 
 // cekam dokud probiha rescan
wait_rescan:
 if (ONEBUSSTATUS == 0 || ONEBUSSTATUS == 2) goto wait_rescan;
 
 // rescan je ted hotov, takze:
 
 //echo(sys[3],': rescan result = ', ONEBUSSTATUS);
 
 if (ONEBUSSTATUS == 8)
 {
  // 1-W chip je NALEZEN na sbernici !

  echo('>> timestamp = ', TIMESTAMP);
  echo('>> romcode = ', ROMCODETEXT);
  echo(' ');
 } else
 {
  // 1-W chip nebyl nalezen...

  //echo('-- no 1-W chip found');
  //echo(' ');
 }

 // zkusime to znovu
 goto loop;

}

Postup: nahrejte tento program do zařízení SDS. Pak sledujte stránku echo.htm (musíte ji ručně obnovovat). Přiložte na krátkou chvíli DS1990A chip na 1-W sběrnici. V echo.htm bude napsáno, kdy byl přiložen (timestamp) a bude vypsán jeho ROM-CODE.

SDS-C a ostatní 1-W chipy

1-W čidla teploty jsou obsluhovány automaticky ve firmware SDS, a uživatel nebo SDS-C program proto nemusí nic dělat, aby byly k dispozici aktuální údaje ze všech připojených 1-W čidel teploty.

Ostatní 1-W chipy je ale už potřeba obsluhovat "ručně", tzn. je potřeba mít správný SDS-C nebo FULL-C program, který bude periodicky prohledávat 1-W sběrnici a komunikovat s ostatními 1-W chipy.

Takže, firmware a webové rozhraní SDS podporuje pouze výše vypsané 1-W čidla teploty. Jakýkoliv jiný 1-W chip si musíte jako uživatel zařízení SDS obsloužit sami, pomocí vhodného vlastního SDS-C nebo FULL-C programu.


FULL-C a ostatní 1-W chipy

Zařízení SDS druhé řady (tj. všechny které mají FULL-C), obsluhují 1-W sběrnici přes svůj interní master HW chip (DS2482).

Režim každé 1-W sběrnice u SDS druhé řady je volitelný, mezi těmito variantami:

* a) pouze teploměrné chipy (viz seznam nahoře), a obsluha této 1-W sběrnice je vyhrazena pro vlastní firmware zařízení SDS (a výsledku jsou na webu)
* b) jakékoliv 1-W chipy, obsluha je výhradně vlastním FULL-C programem, interní web zařízení SDS nemá o této 1-W sběrnici informace

Volba a) nebo b) se provede ve FULL-C programu.

Výhodou použití vyhrazeného HW chipu pro řízení 1-W sběrnice je především znatelné zvýšení odolnosti a komunikačních možností 1-W sběrnice, ve srovnání s SDS první řady (kde 1-W sběrnici obsluhuje přímo SoC).

Pro seznam konkrétních funkcí FULL-C, které ovládají 1-W sběrnici, přejděte na stránky s návodem k FULL-C jazyku.


Důležité informace pro používání 1-Wire® sběrnice

1-Wire® sběrnice byla vybrána především z důvodů ceny a snadnosti svého používání koncovým uživatelem. Zde uvedené poznámky a doporučení platí obecně pro jakékoliv zařízení, které využívá 1-Wire® sběrnici, ne jen pro naše zařízení.

Na sběrnici může být teoreticky neomezené množství zapojeným čidel, ovšem prakticky je tento počet omezen:

* celková délka kabelu - úbytek na kabelu (ztráta napájení), kapacita kabelu (zkreslení signálu)
* různými odbočkami (hvězdicová sít) (značný problém při velmi velkých vzdálenostech)
* programově - firmware má nastaveno čtení jen určitého množství čidel (například některá SDS maximum 16 čidel na sběrnici)

Přesné doporučení neexistuje, platí však základní pravidla:

* snažte se 1-W čidla zapojit co nejblíže k zařízení SDS (co nejkratší kabely)
* použíjte co největší průřez kabelu (tlf. plochý kabel lze použít jen na metr či dva, ale UTP např. až 10 metrů a tak dále)
* veďte kabel od jednoho 1-W čidla k druhému, od druhého k třetímu, a tak dále
* nepoužívejte hvězdicové vedení (a když už, pak musíte zaručit, že všechny paprsky budou stejně dlouhé)

Jak se pozná, že už je zapojení nepoužitelné:

* čtená hodnota z teplotních čidel ukazuje  +85°C  - toto je velmi důležitý údaj, ukazuje, že čidlo je trvale v resetu, to se stane typicky pokud nemá dostatečné napájení !
* pokud čidlo ukazuje náhodné hodnoty, popř. trvale 0°C, je potřeba buď zkrátit délku kabelu nebo je jedno z čidel vadné.
* pokud ukazuje čidlo trvale +127°C (nebo ve výpisech je uvedeno 32767 či více), znamená to, že s ním byla přerušena komunikace (předtím ok, pak najednou xxx) - využijte příslušných sys[] hodnot v SDS-C pro zjištění aktuálního stavu čidla

Důležité upozornění:

* teplotní čidla nejsou vodotěsná.
  Čidlo je od výrobce v plastovém pouzdře, typ TO-92.
  V eshopu lze zakoupit čidla zalitá do plastového válečku, která už jsou vodotěsná.

Pouzdro 1-W čidel postupně (při ponoření do vody) nasává vlhkost, až dojde ke zkratu na vývodech a tím k zablokování celé sběrnice ! Pokud potřebujete vodotěsné čidlo, musíte si koupit speciální upravený typ (prodáváme např. čidla zalité v úzkém válečku ze speciální plastové hmoty).

Jsou dvě varianty napájení 1-W sběrnice:

* a) napájecí napětí je +3.3 Voltů (DC) pro vybraná zařízení SDS (a na tyto nesmíte připojit +5V na 1-W sběrnici, nebo zničíte zařízení SDS)
* b) napájecí napětí je +5.0 Voltů (DC) pro vybraná zařízení SDS


Dbejte na to, aby jste nepřipojili cizí napájecí napětí na sběrnici. Zničíte tím zařízení SDS. Pokud máte problémy s napájením čidel, přečtěte si různé tipy na této stránce, nebo požádejte o pomoc na našem diskuzním fóru.

* při realizaci kabeláže POZOR na náhodné spojení zemí a zemní smyčky !

  Může dojít ke zničení zařízení, popř. čidel (může se stát i až za nějakou dobu).
  Kompletní kabeláž a čidla musejí být kompletně izolovány od všeho okolí ! 

* všechny nové zařízení SDS jsou osazeny samovratnou pojistkou.
  Ta odpojí napájení sběrnice po dobu, co je sběrnice zkratována.
  Po odstranění zkratu dojde k obnovení napájení.

Staré zařízení (historické SDS MICRO 1), již delší dobu neprodávané, byly osazeno tavnou nevratnou SMD pojistkou. Pokud je tato přepálena, je nutno ji vyměnit, ale především je potřeba zjistit a odstranit příčinu. Přepálená pojistka způsobí, že nebude fungovat převod teploty, a bude hlášeno trvale 85°C.

* odběr na jedno každé čidlo, při měření teploty, je 1.5 mA. 
  Toho lze využít pro výpočet přívodního kabelu, 
  kde pro dané proudy nesmí dojít ke znatelnému úbytku napájecího napětí.

* minimální pracovní napájecí napětí (měřeno přímo na svorkách čidla !!!) je 3.0V, přičemž napájení poskytnuté přímo na konektoru zařízení SDS je 3.3V. 
  Pokud bude vznikat na přívodním kabelu úbytek, přestane čidlo komunikovat. 
  V takových případech je vhodné delší chvíli měřit napětí na svorkách čidla, 
  zda-li neklesne moc nízko (ideální stav = 3.3V)

* máte-li možnost použít schválený typ galvanického oddělovače pro 1-Wire sběrnici, použijte jej !
  Toto oddělovače umožňují i zvýśit provozní napětí na 1-W sběrnici, což může být velmi užitečné.

Existuje možnost galvanického oddělení 1-Wire® sběrnice, pomocí externího modulu. Ten potřebuje svůj oddělený napájecí zdroj. Některé příklady takových řešení jsou na našem diskuzním fóru.

* využijte možnosti zapojit malé kondenzátory ke každému čidlu

Je doporučeno zapojit 1-W čidla aby měli samostatně přivedené napájení (proto používáme třídrátovou sběrnici), použití jen parazitního napájení (tj. jen dvoudrátové připojení) nemusí stačit.

Doporučuje se umístit ke každému čidlu kondenzátor o kapacitě 100nF, bez obav to lze dát k úplně všem čidlům, a velmi to prospěje ke stabilitě sběrnice (omezí výpadky při převodech teploty). Vzdálená čidla (tj. např. poslední čidla na velmi dlouhém kabelu) mohou s výhodou využít připojený kondenzátor o větší kapacitě, typicky 1uF až 10uF, zapojený paralelně k napájecím vývodům čidla (Vcc, GND ... pozor na polaritu !).

Pozor však na celkovou kapacitu všech kondenzátorů na celé sběrnici - nesmí v součtu překročit 20uF. Ideálně je dát ke všem vzdáleným čidlům kondenzátor o kapacitě 1uF (větší kapacity už stejně nepomohou), a k blízkým čidlům kondenzátory o kapacitě 100nF. Je důležité, aby spoj mezi každým tímto kondenzátorem a vývody z pouzdra čidla DS18B20 byl co nejkratší !

* velmi dlouhý kabel sběrnice 1-Wire by měl být impedančně zakončen

Možnosti jak toto provést jsou různé. Zakončit je potřeba datový vodič. Jednou z možností je použít rezistor o vhodné hodnotě a zapojit jej mezi datový vodič a jeden z napájecích vodičů (Vcc nebo GND). Konkrétní řešení se musí nalézt pro každou instalaci zvlášť a nikdy nikde nebude úplně stejné. Velmi vhodné je mít k dispozici osciloskop a sledovat na straně konektoru zařízení SDS, jak vypadají impulsy na sběrnici (na datovém vodiči). Cílem je získat ostré hrany, a nemít odrazový signál z nevhodně zakončeného vedení.

Typické zakončení - zkuste nejprve rezistor 1000ohm mezi datový vodič a GND vodič, a sledujte osciloskopem chování. Pokud máte i přes zákaz hvězdici, musíte zakončit všechny její paprsky - čím více paprsků, tím větší odpor na jejich koncích (nezapomeňte že se pak ty odpory sečtou - jsou paralelně - a celková hodnota nesmí klesnout pod 120 ohmů).

Aktuální verze firmware nabízí navíc i diagnostiku pro aktuální stav 1-Wire® sběrnice. Diagnostické hlášení naleznete ve webovém rozhraní na stránce "Temp sensors" (pozn. tato stránka není dynamicky obnovována, takže pro aktuální stav ji musíte znovu načíst). Je-li pro daný sensor detekována porucha, je to vypsáno v tabulce. Odstranit poruchu musí už uživatel sám.

* pozor na možnost zničení elektroniky výbojem statické elektřiny (ESD)

Nesahejte na volné vývody čidel, nesahejte na kabely, atd. - vždy může dojít k výboji statické elektřiny mezi vaším tělem (nebo nástroji, které držíte v ruce, možností je spousta) a tento výboj nenávratně zničí 1-W chipy, ať jsou samostatně nebo připojené k 1-W sběrnici.

Pokud budete používat chipy DS1990A - tzn. uživatelé budou přikládat iButton ke čtecí hlavici, pak je zde obrovské riziko poškození zařízení SDS z důvodů ESD (elektrostatický výboj). Čtecí hlavice musí obsahovat ochranné prvky (rezistory, transil, Zenerovy diody) zapojené natolik správně, aby ochránili zařízení SDS před poškozením.


Typické problémy s 1-W sběrnicí

Celá řada typických problémů je řešena na našem diskuzním fóru.

Některé záležitosti, se kterými se uživatelé setkali:

  • příliš dlouhá sběrnice, sběrnice z nevhodného kabelu (malý průřez) - způsobilo výpadky komunikace
  • vadné 1-W teplotní čidlo - způsobilo výpadek komunikace po celé sběrnici
  • hvězdicová sběrnice - nepravidelné výpadky komunikace
  • rušení na 1-W sběrnici z důvodů dlouhých souběhů s jinými kabely - je vhodné použít správnou kabeláž, křížit ostatní kabely kolmo, atd.
  • nezakončená, nebo nevhodně zakončená sběrnice
  • nedostatečné napájení jednotlivých čidel, poklesy napájení při provozu čidel (čidla bez přidaných kondenzátorů)