szczegóły – opis DS18B20 vs DS18S20

4.2/5 - (5 votes)

Posługując się cyfrowymi sensorami temperatury pracującymi z magistralą 1-Wire, polegałem na minimalnej wiedzy na ich temat. Co było może i wystarczające … Postanowiłem ten fakt zmienić gdyż mają one dużo większe możliwości ;-D Dlatego przygotowałem sobie ten opis DS18B20. Oraz na koniec zestawiłem dwa z nich DS18B20 vs DS18S20.

Funkcjonalność IC sensora temperatury DS18B20 została określona przez producenta jako direct-to-digital temperature sensor. Użytkownik ma możliwość konfiguracji rozdzielczości czujnika temperatury do 9, 10, 11 lub 12 bitów, co odpowiada odpowiednio rozdzielczości dokonywanych pomiarów co 0,5 °C, 0,25 °C 0,125 °C i 0,0625 °C. Jeżeli weźmiemy teraz pod uwagę precyzję dokonywanych pomiarów którą producent określa w jako ±0.5°C w podstawowym zakresie pomiarowym -10°C do +85°C …. stwierdzam, że podane rozdzielczości są tylko „ozdobnymi” cyferkami. Należy wspomnieć że IC są kalibrowane w fazie produkcji. Pełny zakres pomiarowy zdefiniowany jest jako -55°C do +125°C, niemniej przeprowadzałem krótkotrwałe ;-d testy doświadczalne i uzyskałem wskazania dużo wyższych temperatur ;-p ale mniemana dokładność bierze wtedy w łeb i w pozostałym zakresie pomiarowym określona jest na 2°C.
Po podłączeniu zasilania IC przechodzi w stan bezczynności o obniżonym poborze mocy, a domyślną wartością rozdzielczości (zdefiniowaną przez producenta) jest 12 bitów. W rejestrach ustawiona jest wtedy temperatura +85°C.
Aby zainicjować pomiar temperatury i przeprowadzenie konwersji A-to-D, urządzenie master musi wydać polecenie Convert T [44h]. Po zakończeniu konwersji uzyskane dane termiczne są przechowywane w rejestrze temperatury 2-bajty pamięci ScratchPad i DS18B20 wraca do stanu nieaktywnego. Dane określające temperaturę wyrażone są w stopniach Celsjusza. Przechowywane są w rejestrze temperatury jako 16 bitowa liczba z rozszerzonym kodowaniem znaku w formacie uzupełnień do dwóch.
rejestry temperatury układu DS18B20 Bity, znaku (S) wskazują, czy temperatura jest dodatnia czy ujemna. Dla dodatnich liczb S = 0 a dla liczb ujemnych S = 1. Jeśli DS18B20 jest skonfigurowany dla rozdzielczości 12-bitowej, wszystkie bity w rejestrze temperatury będą zawierać ważne dane. Dla rozdzielczości 11-bitowej, bit 0 jest niezdefiniowany, dla 10-bitowej bity 1 i 0, a dla rozdzielczości 9-bitowej bity 2, 1 i 0 są nieokreślone.

Każde urządzenie posiada unikalny 64-bitowy kod seryjny przechowywany w wewnętrznej pamięci ROM. W DS18B20 – 8 najmniej znaczących bitów kodu ROM zawiera kod rodziny: 28h. Kolejne 48 bitów zawiera unikalny numer seryjny. 8 najbardziej znaczących bitów zawiera bajt cyklicznej kontroli nadmiarowej (CRC), który oblicza się z pierwszych 56 bitów kodu ROM. Szczegółowe wyjaśnienie bitów CRC opisane jest w sekcji CRC Generation noty katalogowej. 64-bitowy kod ROM i związane funkcje ROM logiki sterującej pozwalają DS18B20 na pracę jako urządzenie 1-Wire z wykorzystaniem protokołów wyszczególnionych w sekcji 1-Wire Magistrala Systemowa noty katalogowej.

MEMORY

Organizacja pamięci DS18B20:
mapa pamięci DS18B20
Pamięć IC zbudowana jest z SRAM (ScratchPad) i nieulotnej pamięci EEPROM, wykorzystanej do przechowywania wartości wyzwalania alarmu – rejestry (TH i TL) i rejestru konfiguracji. Należy pamiętać, że jeśli alarm DS18B20 nie jest używany, rejestry TH i TL mogą służyć jako pamięć ogólnego przeznaczenia.
Bajt 0 i bajt 1 ScratchPad zawierają odpowiednio LSB i MSB rejestru temperatury. Bajty te są tylko do odczytu.
Bajty 2 i 3 zapewniają dostęp do rejestrów TH i TL.
Bajt 4 zawiera dane rejestru konfiguracji, które opisano szczegółowo w sekcji Rejestr Konfiguracji.
Bajty 5, 6 i 7 są zarezerwowane do użytku wewnętrznego przez urządzenie i nie mogą być nadpisane.
Bajt 8 ScratchPad jest tylko do odczytu. Zawiera kod CRC dla bajtów od 0 do 7 pamięci ScratchPad. DS18B20 generuje to CRC z wykorzystaniem metody opisanej w punkcie CRC Generation noty katalogowej.
Dane są zapisywane do bajtów 2, 3, i 4 ScratchPad stosując zapis poleceniem Scratchpad – Write Scratchpad[4Eh]; dane muszą być przekazywane do DS18B20 począwszy od najmniej znaczącego bitu bajtu 2. Aby sprawdzić integralność danych, ScratchPad można odczytać (za pomocą polecenia Read Scratchpad [BEh]) po wykonanym zapisie. W trakcie odczytu pamięci ScratchPad, dane są przesyłane przez magistralę 1-Wire począwszy od najmniej znaczącego bitu bajtu 0. Aby przesłać wartości TH, TL i dane konfiguracji z pamięci ScratchPad do EEPROM, urządzenie Master musi wydać polecenie Copy Scratchpad [48h].
Dane w rejestrach pamięci EEPROM, są zatrzymywane gdy urządzenie nie jest zasilane. Podczas Power-up dane z EEPROM są automatycznie przeładowane do odpowiednich komórek ScratchPad.
Dane mogą być także ładowane z pamięci EEPROM do ScratchPad w dowolnym momencie za pomocą polecenia Recall E2 [B8h]. Master może wydać rozkaz odczytu ramki po komendzie Recall E2 i DS18B20 wskaże stan przywracania przez transmisję 0, podczas gdy przywracanie jest w toku i 1, gdy przywracanie zakończono.

CONFIGURATION REGISTER

Bajt 4 pamięci ScratchPad zawiera rejestr konfiguracji, który jest zorganizowany, w sposób przedstawiony na rysunku 8, strona 22 noty katalogowej. Użytkownik może ustawić rozdzielczość wyniku konwersji temperatury DS18B20 wykorzystując w tym celu bity R0 i R1 w tym rejestrze, jak przedstawiono w tabeli 2, na stronie 22 noty katalogowej. Domyślna wartość (default) tych bitów po załączeniu zasilania to R0 = 1, a R1 = 1 (rozdzielczość 12 bitów).
Należy pamiętać, że istnieje bezpośredni kompromis między rozdzielczością i czasem konwersji (zależy on od ustawionej precyzji). Bit 7 i bity od 0 do 4 w rejestrze konfiguracyjnym są zarezerwowane do użytku wewnętrznego przez IC i nie mogą być nadpisane przez użytkownika.rozdzielczość wyniku i czas konwersji DS18B20

Sekwencja transakcji dostępu do DS18B20 jest następująca:

Krok 1. Inicjowanie magistrali,
Krok 2. ROM Command (wymagane dla każdej kolejnej wymiany danych),
Krok 3. DS18B20 Function Command (wymagane dla każdej kolejnej wymiany danych).

Bardzo ważne jest, aby postępować zgodnie sekwencją dla każdego dostępu do DS18B20. Układ DS18B20 nie odpowiada, jeśli jakiekolwiek kroku w sekwencji brakuje lub krok jest poza kolejnością. Wyjątkami od tej zasady są polecenia Search ROM [F0h] i Alarm Search [ECh]. Po wydaniu jednego z tych Command ROM, Master musi powrócić do kroku 1 w sekwencji.
INICJALIZACJA Wszystkie transakcje na magistrali 1-Wire rozpoczyna się sekwencją inicjalizacji. Sekwencja inicjalizacji obejmuje impuls Reset nadawany przez urządzenie nadrzędne magistrali, następnie impuls(y) obecności przesyłany przez slave(ów). Impuls obecności informuje master magistrali, że urządzenia slave (takie jak DS18B20) są na magistrali i są gotowe do pracy. Czas trwania dla impulsów resetu i obecności jest opisany w stosownym rozdziale noty katalogowej (1-WireSignaling).
ROM COMMANDS Po tym gdy Master magistrali wykrył impuls obecności, może wydać polecenie ROM. Te polecenia działają na 64-bitowych unikalnych kodach ROM każdego urządzenia slave i pozwalają na wyodrębnienie urządzeniu master konkretnego urządzenia slave, gdy jest ich wiele obecnych na magistrali 1-Wire. Polecenia te pozwalają również by Master określił, ile i jakie rodzaje urządzeń są obecne na magistrali, lub gdy urządzenie doświadcza stanu alarmowego. Dla DS18B20 istnieje pięć komend ROM, a każda komenda jest 8 bitowa. Urządzenie master musi wydać odpowiednie polecenie ROM (ROM Command) przed wydaniem polecenia funkcji DS18B20.

Opis komend ROM

READ ROM [33h] Komenda ta może być używana tylko wtedy, gdy istnieje wyłącznie jeden slave na magistrali. Pozwala ona aby bus master czytał 64-bitowy kod ROM urządzenia slave bez korzystania z procedury search ROM. Jeśli to polecenie będzie użyte, gdy jest więcej niż jeden slave obecny na magistrali, wystąpi kolizja danych. Kolizja wynika z tego, że wszyscy slave próbują odpowiedzieć w tym samym czasie.

MATCH ROM [55h] Komenda meczu ROM, a następnie 64-bitowa sekwencja kodu ROM pozwala urządzeniu Master do zajęcia konkretnego slave na magistrali z jednym lub wieloma urządzeniami slave. Tylko slave, który dokładnie pasuje do 64-bitowej sekwencji kodu ROM będzie reagował na polecenia funkcji wydane przez urządzenie nadrzędne. Wszystkie inne Slave na magistrali będą czekać na impuls reset.

SKIP ROM [CCh] urządzenie master może użyć do adresowania jednocześnie wszystkie urządzenia na magistrali bez wysyłania jakichkolwiek informacji o kodzie ROM. Na przykład, urządzenie master może nakazać wszystkim DS18B20s na magistrali wykonywanie jednoczesnych konwersji temperatury wydając polecenie: Skip ROM, a następnie polecenie Convert T [44h].
Istotna uwaga – polecenie Read Scratchpad [BEh] może podążać za poleceniem Skip ROM wyłącznie, gdy jest tylko jeden slave podłączony do magistrali. Polecenie Skip ROM a następnie polecenie Read ScratchPad spowoduje kolizję danych na magistrali, jeżeli istnieje więcej niż jeden slave.

ALARM SEARCH [ECh] Działanie tego polecenia jest identyczne z działaniem polecenia Search ROM, z jednym wyjątkiem, zareaguje tylko slave z ustawioną flagą alarm. Komenda ta pozwala urządzeniu master do ustalenia czy w jakimś DS18B20s wystąpił stan alarmowy podczas ostatniej konwersji temperatury. Po każdym cyklu Alarm Search (tzn. polecenie Alarm Search, a następnie wymiana danych), Bus Master musi powrócić do kroku 1 (startowego) w sekwencji transakcji. Dla wyjaśnienie działania flagi alarm trzeba poczytać sekcję Signaling Operation-alarm w nocie katalogowej.

Polecenia FUNKCYJNE DS18B20

Po tym gdy master użył komendy ROM w celu zaadresowania DS18B20, z którym chce się komunikować, może wydać jedno z poleceń funkcyjnych DS18B20. Polecenia te umożliwiają urządzeniu master na wykonywanie zapisu lub odczytu pamięci ScratchPad w DS18B20, np inicjowanie konwersji temperatury, określenie sposobu zasilania (odczyt).

CONVERT T [44h] To polecenie uruchamia pojedynczy tryb konwersji temperatury. Po wykonaniu konwersji uzyskane dane o temperaturze są przechowywane w rejestrze temperatury (2-bajty pamięci ScratchPad) i DS18B20 powraca do stanu bezczynności o niskim poborze mocy. Jeśli urządzenie jest używane w trybie zasilania pasożyta (parasite power mode), w ciągu 10μs (max) po wydaniu tej komendy master musi zapewnić silne pullup na magistrali 1-Wire na czas konwersji (tCONV), jak opisano to w sekcji noty katalogowej zasilanie DS18B20. Jeśli DS18B20 jest zasilany z „zewnętrznego zasilania”, master może wysłać ramki odczytu po poleceniu Konwersja T i DS18B20 odpowie transmisją 0 kiedy konwersja temperatury jest w toku, a 1 gdy konwersja jest już zakończona. W trybie zasilania pasożyta ta technika zgłoszenia nie może być używana, ponieważ magistrala jest podciągnięta do stanu high przez silny pullup podczas trwania konwersji.

WRITE SCRATCHPAD [4Eh] To polecenie pozwala urządzeniu Master zapisać 3 bajty danych do pamięci „podręcznej” ScratchPad w DS18B20. Pierwszy bajt danych jest zapisywany w rejestrze TH (bajt 2 w ScratchPad), drugi bajt jest zapisywany w rejestrze TL (bajt 3), a trzeci bajt jest zapisywany do rejestru konfiguracyjnego (jako bajt 4). Dane muszą być przesyłane zaczynając od najmniej znaczącego bitu. Zapis wszystkich 3 bajtów w pamięci musi zakończyć się zanim urządzenie master wystawi reset na magistrali, w przeciwnym wypadku dane mogą zostać uszkodzone.

READ SCRATCHPAD [BEh] To polecenie pozwala urządzeniu Master czytać zawartość ScratchPad. Transfer danych rozpoczyna się od bitu najmniej znaczącego (bajt 0), i jest kontynuowany przez ScratchPad, aż 9-ty bajt (bajt 8 – CRC) zostanie odczytany. Jeśli tylko część danych ScratchPad jest potrzebna master może wystawić reset na magistrali, aby zakończyć odczytywanie w dowolnym momencie.

COPY SCRATCHPAD [48h] Polecenie służy do kopiowania zawartości ScratchPad TH, TL i rejestru konfiguracyjnego (bajty 2, 3 i 4) do pamięci EEPROM. Jeśli IC jest używany w trybie zasilania pasożyta, to w ciągu (max) 10μs po wydaniu tej komendy master musi zapewnić silne pullup na magistrali 1-Wire przez co najmniej 10ms. Szczegóły opisano to w nocie katalogowej sekcja Zasilanie DS18B20.

RECALL E2[B8h] Ta komenda przywołuje z pamięci EEPROM wartości wyzwalania alarmu (TH i TL) oraz dane konfiguracyjne i umieszcza je odpowiednio w bajtach 2, 3, i 4, pamięci ScratchPad. Urządzenie Master może wysłać ramki odczytu następujące po poleceniu Recall E2. DS18B20 wskaże stan przywracania przez przekazanie 0 gdy te jest jeszcze w toku, i 1 gdy przywracanie zakończono. Operacja przywracania odbywa się automatycznie podczas power-up, więc ważne dane są dostępne w ScratchPad tak szybko, jak podłączone jest zasilanie do IC.

READ POWER SUPPLY [B4h] Urządzenie master wysyła to polecenie, a następnie ramkę czasową odczytu, w celu określenia, czy jakiekolwiek DS18B20 na magistrali używa zasilania pasożytniczego. Podczas ramki czasowej odczytu, DS18B20 zasilany jako pasożyt będzie ciągnąć magistralę do niskiego poziomu, a zewnętrznie zasilane DS18B20 pozwolą magistrali pozostać nadal w stanie wysokim. Zobacz sekcja zasilanie DS18B20 o sposobie użycia tego polecenia.

Trochę o sprzęcie …

Wielkiej filozofii tutaj nie ma bo sensor posiada tylko trzy piny 😉 GND, DQ, VDD. Do pełni szczęścia wymagany jest rezystor pull-up podłączony do linii danych DQ, o wartości 4,7kΩ. Napięcie zasilania powinno zawierać się w zakresie 3.0V do 5.5V. detale zasilania Wygodną alternatywą może być zasilanie pasożytnicze gdzie IC „kradnie” moc z magistrali 1-Wire. W takim wypadku pin VDD należy podłączyć do sygnału GND. Tryb ten nie jest zalecany do pomiaru temperatur wyższych od 100°C. Stwarza również problemy przy długich liniach przesyłowych. Doświadczyłem przypadku gdzie kabel od sensora ułożony był w kanale technicznym z różnego typu przewodami – od zasilających ~230V AC do komunikacyjnych dla mediów różnego typu. Jego długość wynosiła około 20m. Pomiar funkcjonował niezawodnie do momentu gdy w kanale ułożone zostały dodatkowe przewody komunikacyjne … Na załączonym rysunku widzimy rozwiniętą wersję zasilania pasożytniczego, gdzie na czas konwersji temperatury µC dostarcza dodatkowy prąd do układu termometru.
Maksymalny prąd pobierany przez sensor w trybie standby może wynieść 1000 nA. Natomiast w 125 °C prąd czuwania zazwyczaj wynosi 3μA. Najwyższy pobór mocy może wystąpić podczas przepisywania wartości z EEPROM do ScratchPad lub podczas wykonywania konwersji temperatury i nie powinien przekroczyć 1,5 mA.

Poszczególne modele sensorów DS do pomiaru temperatury, różnią się między sobą precyzją i rozdzielczością dokonywanych pomiarów, jak i zakresem mierzonych temperatur. Niektóre nieznacznie mogą różnić się mapą pamięci choć podstawowa funkcjonalność jest podobna. IC o oznaczeniu DS18S20 według producenta ma być następcą (wersją rozwiniętą) nie produkowanego już dziś DA1820 i jest funkcjonalnie zgodny. Oba dokonują pomiaru z rozdzielczością 9-bit, i mają możliwość przeliczenia wyniku na bardziej precyzyjny dzięki dodatkowym wartościom w rejestrach. W ten sposób uzyskać można rozdzielczość 12 bit. Choć DS18S20 fizycznie zawsze wylicza temperaturę na słowie 12 bitowym i potem zaokrągla ją do wartości 9 bitowej, dlatego konwersja trwa dłużej w porównaniu do tego drugiego, odpowiednio 750ms i 500ms … Według producenta urządzenie DS18B20 w odróżnieniu od DS18S20 oferuje znacznie większą elastyczność i jest łatwiejsze w użyciu. DS18S20 zachowuje ten sam kod rodziny jak pierwotny DS1820, który wynosi 10h.

Układy scalone zostały „wyposażone” w magistralę 1-Wire, dzięki której można je stosować nie tylko z µC. Funkcjonalność ta pozwala z łatwością wykorzystywać ich możliwości w połączeniu z interfejsem RS232 dzięki prostemu interfejsowi sprzętowemu. Powstało wiele programów do komunikacji z tymi układami przez ten właśnie interfejs, na chyba wszystkich platformach OS. 😉  Tymi słowami kończę ten szeroki opis DS18B20. ;-p

Dzięki opisanym funkcją z powodzeniem ustawiam rozdzielczość przetwornika temperatury na 9 bit co jest dla mnie w zupełności wystarczające. W „wolnej chwili” stworzę też kod do pomiaru czasu konwersji, oczywiście w rachubę wchodzi wtedy tylko pełne zasilanie ;-p sensora.


A.D. 2014-12-26 Dla spragnionych przykładowego kodu do obsługi pewno przydatny okaże się nowy opis DS18B20 Bascom, przedstawiam mój algorytm


 

Zestawienie aktualnie produkowanych termometrów DS* na witrynie producenta.

opis DS1822
opis DS1821
opis DS18B20
opis DS18S20
opis DS18S20-PAR

Otagowano , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

20 + trzynaście =

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.