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ů.
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)
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ů.
Zobrazení celého identifikačního kódu DS obvodu.
vloženo:15.07.2017 aktualizováno:7.03.2018
Program je napsaný pro hardware DS termostat, tlačítka nejsou potřeba.
POZOR, připojte jeden DS obvod a zapněte napájení.
8 bajtů kódu se na 3-místném displeji zobrazuje postupně, zhruba po vteřině.
První bajt 1. Family,
potom šest bajtů 2. až 7. sériové číslo,
a poslední bajt 8. CRC.
Zobrazování se neustále opakuje. Pokud nebude připojený žádný DS obvod, displej zobrazí n.dS (není DS obvod).
Displej.
- 1. Family
- 2. až 7. sériové číslo
- 8. CRC
(pouze pro nekomerční účely, only for non-commercial purposes)
Program pro PIC16F628A
RID_628A_03.asm (11,7 kB) RID_628A_03.HEX (1,6 kB)
Program pro PIC16F88
RID_88_03.asm (11,7 kB) RID_88_03.HEX (1,6 kB)
Program pro PIC16F1847
RID_1847_03.asm (11,9 kB) RID_1847_03.HEX (1,6 kB)