1-wire sběrnice a teploměr DS18B20
Popis 1-wire komunikácie s MCU 8051
František Pospíšil, 30.11.2009-00:00









Časovací smyčky v uvedených programech jsou počítány pro krystal 11,0592 MHz a procesor potřebuje 12 kmitů krystalu na jeden strojový cyklus.

Stručný popis sběrnice
Pro komunikaci obvodů vybavených sběrnicí 1-wire s řídícím procesorem stačí jediný vodič a zem. Při komunikaci je dodržováno master/slave schéma. Přitom zařízení typu slave může být připojeno velké množství a komunikace s konkrétním obvodem je zabezpečena pomocí unikátní, 64 bitové adresy kterou má každý obvod uložen ve své paměti ROM.
V klidu je sběrnice ve stavu log.1, který je udržován za pomoci pull-up rezistoru. Stav log.0 může být dosažen každým zařízením připojeným na sběrnici pomocí jeho výstupu s otevřeným kolektorem. Impulsem tedy rozumíme uzemnění sběrnice na stanovenou dobu.

Pro komunikaci s obvody připojenými na sběrnici je nutno umět provést reset sběrnice, zápis a čtení bajtu na sběrnici:
Reset 1-wire sběrnice
V první části operace řídící procesor uzemní sběrnici na minimálně 480ms. V druhé části zařízení odpovídají pulsem dlouhým 60-240ms. Program měří dobu po ukončení prvního pulsu i dobu trvání pulsu. Pokud je doba příliš dlouhá, program je ukončen chybovým hlášením.



  1. DSxRES:clr    DS_18           ;nuluje bit      
  2.        mov    a,#079h                        
  3. DSxR11:nop                                    
  4.        nop                                    
  5.        nop                                    
  6.        djnz   ACC,DSxR11      ;600us puls    
  7.        setb   DS_18           ;nastavi bit    
  8.        clr    a                              
  9. DSxR12:jnb    DS_18,DSxR14    ;ceka na log.0  
  10.        inc    a                              
  11.        jz     DSxR13                          
  12.        sjmp   DSxR12                          
  13. DSxR14:jb     DS_18,DSxR15    ;ceka na log.1  
  14.        inc    a                              
  15.        jz     DSxR13                          
  16.        sjmp   DSxR14                          
  17. DSxR13:...    ...             ;konec ERROR    
  18.        ...                                    
  19. DSxR15:ret                    ;konec OK



Zápis bajtu na 1-wire sběrnici
Řídící procesor vysílá bajt jako sekvenci osmi impulsů, kdy pro log.1 je puls kratší než 15ms a pro log.0 je puls delší než 30ms. Bajt je vysílán od bitu s nejnižší váhou po nejvyšší.



  1.            mov     R7,#008h       ;pocet bitu            
  2. DSxW01:    rrc     a                                      
  3.            jnc     DSxW02                                
  4.            mov     R6,#002h       ;delka pro log.1        
  5.            sjmp    DSxW03                                
  6. DSxW02:    mov     R6,#018h       ;delka pro log.0        
  7. DSxW03:    clr     DS_18          ;zacina puls            
  8.            djnz    R6,$                                  
  9.            setb    DS_18          ;konec pulsu            
  10.            mov     R6,#040h                              
  11.            djnz    R6,$           ;cekani mezi bity      
  12.            djnz    R7,DSxW01                              
  13.            lcall   WAITx0         ;zotaveni


Čtení bajtu z 1-wire sběrnice
Řídící procesor vysílá osm impulsů délky 1-15ms. Na každý puls mu podřízené zařízení odpovídá pulsem délky do 15ms, když má být vyslána log.1, nebo odpovídá pulsem délky 15-45ms, když má být vyslána log.0. Pro přečtení bitu stačí sejmout stav sběrnice někdy po 15ms od řídícího pulsu. Když je vysílána log.0, bude sběrnice ještě v nízké úrovni a když log.1, bude v té době už ve vysoké úrovni. Bajt je vysílán od bitu s nejnižší váhou po nejvyšší.



  1. DSxR01:    mov          R7,#008h      ;pocet bitu        
  2.            clr          DS_18         ;uvodni puls        
  3.            nop                                            
  4.            nop                                            
  5.            nop                                            
  6.            setb         DS_18         ;konec pulsu        
  7.            mov          R6,#008h      ;ceka na stred log.0
  8.            djnz         R6,$                              
  9.            mov          C,DS_18       ;prenos stavu bitu  
  10.            rrc          a                                
  11.            mov          R6,#040h      ;cekani mezi bity  
  12.            djnz         R6,$                              
  13.            djnz         R7,DSxR01                        
  14.            lcall        WAITx0        ;zotaveni


Napájení obvodů po 1-wire sběrnici
Obvody s 1-wire rozhraním mohou být po svém datovém vodiči také napájeny. Zde je nutno pull-up rezistor sběrnice přemostit tranzistorem. Ten potom řídící program otevírá v době, kdy neprobíhá komunikace. Přes otevřený tranzistor se nabíjí kondenzátor integrovaný v obvodu. Z tohoto kondenzátoru je potom obvod napájen v době, kdy komunikuje s masterem.
Tady je nutno dát pozor, aby komunikace neprobíhala zbytečně pomalu a také aby tranzistor nebyl otevřen v době komunikace.
Pro dobrou práci teploměru DS18B20 je nutno podržet tranzistor otevřený po celou dobu měření, napájení přes pull-up rezistor nezajistí dostatek energie


Popis obvodu DS18B20
(překlad části datového listu)




Na obrázku testovacie zapojenie MCU `51, DS18B20 a MAX232 pre sériovú linku.


Jádro obvodu DS18B20 umožňuje nastavit vlastnosti digitálního teploměru. Rozlišení převodníku je uživatelsky nastavitelné na 9, 10, 11, 12 bitů, to odpovídá velikosti dílku 0,5°C, 0,25°C, 0,125°C, 0,0625°C. Základní rozlišení po připojení napájení je 12 bitů. Obvod je po připojení napájení v nečinném stavu, měření teploty a AD převod může být spuštěno příkazem (44h).
Výstupní data jsou ve stupních Celsia, pro aplikace s Fahrenheitovou stupnicí je nutno použít rutinu pro převod. Naměřená data jsou uložena do 16-bitového registru dle obrázku 2. Teplota je kladná, když je bit znaménka S=0 a záporná, když je S=1. Když je převodník nastaven na 12-bitů, všechny bity v registru budou obsahovat platná data. Při nastavení nižších rozlišení nejsou definovány nízké bity. Například při rozlišení převodníku 9-bitů nejsou použity bity 0, 1, 2. Tabulka ukazuje vzory výstupních dat při různých teplotách, převodník je nastaven na 12-bitové rozlišení.

Několik základních příkazů nutných pro práci s teploměrem DS18B20

Příklad sekvence pro změření teploty obvodem DS18B20, obvod je na sběrnici jenom jeden:
1. Reset sběrnice.
2. Příkaz 0CCh, příkaz 044h - zahájí měření.
3. Prodleva 0,75 sekund nutná pro převod napětí na data.
4. Příkaz 0CCh, příkaz 0BEh - obvod je připraven vyslat obsah své paměti na sběrnici.
5. Čtení bajtu ze sběrnice, bajt obsahuje spodních osm bitů naměřené teploty.
6. Čtení bajtu ze sběrnice, bajt obsahuje horní čtyři bity naměřené teploty.

Základní rozlišení teploměru je 0,0625°C, přitom nejvyšší z dvanácti bitů je znaménko.

Odkazy:



Zverejnené so súhlasom autora.
Zdroj: http://www.ok2jnj.wz.cz/ds18b20.htm


tento článok je z mikroZONE
( https://www.mikrozone.sk/pluginy/content/content.php?content.30 )