Vyhledat identifikační kódy
DS obvodů na jednovodičové
(1-Wire DALLAS) sběrnici.

 vloženo:23.04.2010   aktualizováno:5.03.2016

 Na jednovodičovou sběrnici (1-Wire) lze připojit větší počet DS obvodů DALLAS. Pokud je připojen pouze jeden, nehrozí kolize dat a ovládání není složité. Při větším počtu (dva a více), musí komunikace začít vysláním identifikačního kódu konkrétního obvodu, to deaktivuje všechny ostatní. Nejdříve je ale potřeba všechny identifikační kódy zjistit. Jednoduchá vyhledávací rutina načte a uloží do paměti mikroprocesoru, sériová čísla (prvních 8 bitů) všech připojených DS obvodů.


8 teplotních senzorů DS18B20 a jejich kódy.DS8.asm (31,1 kB)

 

 Vyhledávání ROM kódů DS obvodů na 1-Wire sběrnici.

 ROM kód se skládá ze tří částí, FAMILY kód (8 bitů), sériové číslo (48 bitů) a CRC (8 bitů).

MSB             LSB MSB                 LSB MSB           LSB
8 b. CRC 48 b. sériové číslo 8 b. Family kód

 

 Příkaz SEARCH ROM nastaví všechny DS obvody do režimu vyhledávání.
Každý bit identifikačního kódu načte procesor dvakrát. DS obvod pošle nejdřív skutečnou hodnotu a potom negovaný doplněk (01 nebo 10). Procesor musí na tuto dvojici odpovědět potvrzovacím bitem, skutečnou hodnotou. Obvody, které nedostanou skutečnou hodnotu svého bitu se "odpojí", čekají na příkaz RESET/PRESENCE.

 Vyhledávání začíná Family kódem, jeho LSB bitem. Pokud Family kód známe, není potřeba načtený bit a jeho doplněk vyhodnocovat, potvrzovací bit bude podle Family kódu.
 Ihned po odeslání posledního bitu Family pokračuje vyhledávání sériového čísla (prvních 8 bitů). Ani zde není potřeba vyhodnocovat načtenou dvojici, potvrzovací bit bude nyní podle zkušebního kódu (postupně 0 až 255).
 Kterýkoliv špatný potvrzovací bit deaktivuje obvod, takže po odeslání Family a zkušebního kódu mohou nastat 3 možnosti:
Na sběrnici zůstane několik aktivních obvodů, nebo žádný, anebo pouze jediný obvod.
To zjistíme tak, že načteme TEST bit, tedy ještě jeden bit plus doplněk, a tuto dvojici zkontrolujeme.

 Vyhodnocení TEST bitu.

00 Několik DS obvodů (2 nebo vice) zůstalo připojeno. Sériové číslo (prvních 8 bitů) mají stejné. Na sběrnici ale může zůstat jenom jeden, ostatní se musí vyřadit a celé vyhledávání opakovat.
01
nebo
10
Zůstal připojen pouze jeden DS obvod.
Uložit zkušební kód.
11 Žádný DS obvod nezůstal připojený.

Pokud zůstal připojen pouze jeden, nebo žádný obvod, pokračuje vyhledávání s novým zkušebním kódem (+1).

 

 Postup vyhledávání prvních 8 bitů sériového čísla DS obvodu.

  • Příkaz RESET/PRESENCE.
  • Příkaz SEARCH ROM.
  • Poslat FAMILY kód.
  • Poslat zkušební kód (00h až FFh).
  • Načíst TEST bit a vyhodnotit. Příp. uložit zkušební kód.
  • Zvětšit zkušební kód +1 a celý postup opakovat (od RESET/PRESENCE).

 

 Vývojový diagram.


 Před vyhledáváním se zadá počet připojených obvodů (pro 8 je zde test IDS>=8), najde-li program všechny obvody, nemusí testovat zbývající možnosti, čas pro vyhledávání se tak zkrátí. Maximální počet obvodů může být až 256. Každý ale musí mít jiné sériové čísol v prvních 8 bitech.

 

 Oslovení konkrétního DS obvodu, pomocí 8-bitového sériového čísla

Příkaz MATCH ROM nelze v tomto případě použít, proto se postupuje podobně jako při vyhledávání.

  • Příkaz RESET/PRESENCE.
  • Příkaz SEARCH ROM.
  • Poslat FAMILY kód.
  • Poslat 8 bitů sériového čísla.
  • Dokončit vyhledávání, včetně CRC kódu. To znamená, postupně načíst a potvrdit zbývajících 48 bitů.

 Po této sekvenci zůstane připojený pouze požadovaný DS obvod, připravený přijmout funkční příkaz.
Např. CONVERT, READ SCRATCHPAD atd.

 


5 kódů a teploty z prvních 2 snímačů.DS5.asm (30,5 kB)

 


Vyhledávání druhého bajtu sériového čísla.

Vloženo:5.03.2016

  Metoda vyhledávání prvního bajtu sériového čísla na 1-wire sběrnici je velmi jednoduchá, aby to fumgovalo, musí mít všechna čidla tento první baj odlišný. 
   V poslední době se ale stává, že při koupi několika senzorů (DS18B20), mají všechny první bajt FF(Hex), zřejmě jsou z jedné výrobní šarže. Pomoc je relativně jednoduchá. Upravit program tak, aby vyhledával až druhý bajt. Kdo si na to netroufne, může mi napsat.

Některé programy jsem už takto upravil. Například:

DS5-FF.asm (30,7 kB)


DS8-FF.asm (31,3 kB)

 

Vyhledávání druhého bajtu sériového čísla senzorů DS18B20.

Vývojový diagram vyhledávání druhého bajtu sériového čísla.

   Z postupu vyhledávání vyplývá, že lze použít jenom čidla se stejným prvním bajtem, v tomto případě FF.
A stále platí, druhý hledaný bajt musí být u každého čidla jiný.

   Program je nutné upravit (vložit 2 řádky kódu) i v místě, kde se provádí oslovení konkrétního čidla.
I zde nejdřív odeslat FF, potom kód požadovaného senzoru. Jestliže na začátku přidáme 8 bitů, tak na konci stačí načíst a potvrdit už jen 40, místo původních 48 bitů.

Postup při oslovení konkrétního DS obvodu, pomocí druhého bajtu sériového čísla.

  • Příkaz RESET/PRESENCE.
  • Příkaz SEARCH ROM.
  • Poslat FAMILY kód.
  • Poslat první bajt FF.
  • Poslat druhý bajt, 8 bitů sériového čísla žádaného senzoru.
  • Dokončit vyhledávání. Postupně načíst a potvrdit zbývajících 40 bitů.