Poniżej przedstawino opis protokołu 1-Wire wraz z opisem bardzo popularnego

układu z tym właśnie interfejsem - termometru DS18B20

1. Interfejs 1-Wire

2. Termometr DS18B20 z interfejsem 1 – Wire

3. Producenci układów z interfejsem 1-Wire

 

Google
 

Interfejs 1-Wire

Interfejs 1-Wire został opracowany przez firmę Dallas Semiconductor ( obecnie Dallas – Maxim ). Jest on przeznaczony do przesyłania informacji pomiędzy układem nadrzędnym master - mikrosterownik  a układami podrzędnymi slave (np. termometry, układy identyfikacji, pamięci SRAM i EEPROM, programowalne klucze). Transmisja odbywa się w obu kierunkach z wykorzystaniem jednego przewodu sygnałowego (oprócz masy), który jednocześnie może być wykorzystany do zasilania układów do niego podłączonych. Dane przesyłane są z prędkością od bliskiej 0 do 16,3 kbps w trybie standard oraz do 115 kbps w trybie overdrive. Każde z urządzeń podłączonych do magistrali musi mieć wyjście typu otwarty dren, a linia sygnałowa DQ jest połączona do zasilania przez rezystor podciągający o wartości około 5kW. Zatem w stanie bezczynności linia DQ jest w stanie wysokim. Magistrala nie ma ustalonego formatu danych. Sposób przesyłania informacji zależy od konfiguracji układów podrzędnych. Zawsze jednak jako pierwszy jest przesyłany bit najmniej znaczący.

Schemat połączeń przy użyciu interfejsu 1-Wire

Rys. 1. Schemat połączeń przy użyciu interfejsu 1-Wire

 

Protokół wymiany danych poprzez magistralę 1-Wire składa się z czterech podstawowych sekwencji:
      • inicjalizacji (zerowanie magistrali),
      • wysłanie (zapis) zera,
      • wysłanie (zapis) jedynki,
      • odczyt bitu.

Sekwencja inicjalizacji (rys. 2) rozpoczyna się wysłaniem na magistralę przez układ master (mikrosterownik) impulsu zerującego o czasie trwania 480 .. 960 ms. Po tym czasie układ master przechodzi w stan odbioru i na magistrali pojawia się stan wysoki. Po zidentyfikowaniu końca impulsu zerującego układ slave odczekuje 15 .. 60 ms i wystawia na magistralę impuls obecności (presence pulse) o czasie trwania 60 .. 240 ms. Sekwencja inicjalizacji umożliwia układowi master wykrycie podłączonych do niej układów slave. Po czasie koniecznym do pełnej inicjalizacji układów podrzędnych możliwe staje się przeprowadzenie normalnej transmisji danych.

 

Przebiegi sekwencji inicjalizacji dla magistrali 1-Wire

Rys. 2. Przebiegi sekwencji inicjalizacji dla magistrali 1-Wire

 

Transmisja danych do urządzenia podrzędnego polega na generowaniu serii impulsów o poziomie niskim o odpowiedniej długości, która definiuje stany logiczne „0” lub „1”. Długość sekwencji zapisu lub odczytu musi się zmieścić w szczelinie czasowej (time slot), która wynosi 60 .. 120 ms i jest inicjowana wymuszeniem przez układ master stanu niskiego na magistrali. Nadanie logicznego „0” polega na wygenerowaniu impulsu o czasie trwania 60 .. 120ms, a następnie na zwolnieniu magistrali i odczekaniu minimum 1ms przed nadaniem następnego bitu (rys. 3). Dla logicznej „1” generowany impuls trwa 1 .. 15 ms, a następnie magistrala pozostaje zwolniona na minimum 45 ms ( maksymalnie 105 ms ) (rys. 3).

 

Transmisja logicznych

Rys. 3. Transmisja logicznych „0” i „1” na magistrali 1-Wire

 

Przy emulacji programowej interfejsu 1-Wire, na czas generowania impulsów (zwłaszcza dla „1”) warto wyłączać wszystkie przerwania mikrosterownika, gdyż wystąpienie przerwania w trakcie generacji impulsu może doprowadzić do jego wydłużenia poza dopuszczalne granice, a co za tym idzie do zafałszowania transmisji.

Odczyt wartości bitu przesyłanego przez układ podrzędny polega na generacji przez układ master impulsu o czasie trwania minimum 1 ms (zazwyczaj stosuje się impulsy 3 .. 5 ms), a następnie na zwolnieniu linii DQ i sprawdzeniu jej stanu logicznego przed upływem 15 ms od rozpoczęcia sekwencji odczytu (rys. 4). Jeżeli urządzenie podrzędne będzie transmitować logiczne „0”, wówczas generowany przez mikrosterownik impuls zostanie przedłużony do czasu trwania co najmniej 15 ms. Odczyt stanu napięcia na magistrali przed upływem tego czasu da w efekcie poziom niski, czyli transmitowane „0”. Ponieważ przedłużenie impulsu może trwać dłużej, to po odczytaniu stanu bitu należy odczekać jeszcze nie krócej niż 45 ms. Jeżeli transmitowany będzie bit „1”, to wówczas urządzenie podrzędne nie przedłuży impulsu generowanego przez mikrosterownik i odczyt stanu w tym samym czasie co przy transmisji „0” da w efekcie stan wysoki, czyli transmitowaną logiczną „1”. 

 

Odczyt bitu przez układ master na magistrali 1-Wire

Rys. 4. Odczyt bitu przez układ master na magistrali 1-Wire

 

W większości przypadków interfejs 1-Wire implementuje się w mikrosterownikach  w sposób programowy. Jednak, ze względu na rosnącą popularność interfejsu wynikającą z faktu, iż składa się on tylko z jednej linii sygnałowej, która może zasilać urządzenia podrzędne ( o niewielkiej mocy pobieranej ) pojawiają się mikrosterowniki z kontrolerami tego interfejsu (np. DS80C400). Na rys. 5 pokazano schemat blokowy kontrolera interfejsu 1-Wire.

 

Schemat blokowy kontrolera interfejsu 1-Wire

Rys. 5. Schemat blokowy kontrolera interfejsu 1-Wire

 

Linia DQ jest wejściem/wyjściem interfejsu 1-Wire. Pozostałe linie przenoszą sygnały wewnętrzne. Magistrala D0-D7 dostarcza dane do poszczególnych rejestrów kontrolera, wybieranych za pomocą sygnałów A0-A2, które są zatrzaskiwane w układzie kontrolnym przez sygnał /ADS. Aktywny stan na linii /RD powoduje odczyt z wybranego rejestru, a aktywny sygnał /WR zapis do tego rejestru. Stan niski na linii /EN uaktywnia kontroler. Stan wysoki na linii MR resetuje kontroler zerując zawartości wszystkich rejestrów i flagi przerwań. Sygnał CLK dzielony przez dzielnik sterowany rejestrem Clock Div Register taktuje transmisją interfejsu 1-Wire. Na linii INTR pojawia się sygnał przerwania od kontrolera. Odczytując rejestr Interrupt Register identyfikowana jest przyczyna przerwania. Interfejs steruje się za pomocą rejestru Command Register. Wysyłanie danej rozpoczyna się po wpisaniu jej do rejestru Transmit Buffer. Odebraną daną czyta się z rejestru Receive Buffer.

 

 

Termometr DS18B20 z interfejsem 1 – Wire

 

Charakterystyka układu

Prezentowany układ jest termometrem produkowanym przez firmę Dallas Semiconductor – Maxim. Jest to termometr z programowaną przez użytkownika rozdzielczością  pomiaru  w zakresie  9, 10, 11, 12 bitów co odpowiada dokładności pomiaru odpowiednio 0.5 oC, 0.25 oC, 0,125 oC, 0,0625 oC. Domyślna rozdzielczością po włączeniu zasilania do układu jest 12 bitów. Zakres pomiaru termometru wynosi od -55oC do 125 oC. Czas konwersji termometru to maksymalnie 750 ms i zależy od wybranej dokładności. Układ jest zasilany napięciem w zakresie od 3V do 5.5V. Układ wyposażony jest w interfejs 1-Wire. Schemat układu przedstawia rys.6.

Schemat blokowy układu DS18B20

Rys. 6. Schemat blokowy układu DS18B20

 

Każdy z układów ma swój unikalny 64 bitowy numer zapisany w pamięci ROM za pomocą którego może być identyfikowany na magistrali 1-Wire. Najmłodsze 8 bitów numeru stanowi cod rodziny dla tego układu wynosi on 28h. Następne 48 bitów jest unikalnym kodem układu, a ostatnie ( najstarsze 8 bitów ) stanowi sumę kontrolną CRC obliczoną z pierwszych 56 bitów (Rys. 7).

 

Unikalny 64 bitowy adres układu DS18B20

 

Po dokonaniu pomiaru układ zapisuje zmierzoną temperaturę w pamięci ( SCRATCHPAD – rys 6 ). Temperatura zapisana jest w dwóch najmłodszych bajtach pamięci

Schemat pamięci układu DS18B20

Rys. 6. Schemat pamięci układu DS18B20

 

Cztery najstarsze bity bajtu nr 1 (MS)  stanowią rozszerzenie znaku (zapisanego na bicie 3: 1 – temperatura ujemna, 0-temperatura dodatnia ). W przypadku wybrania mniejszej rozdzielczości niż maksymalna najmłodsze bity bajtu 0 (LS) stają się nieokreślone ( dla rozdzielczości 11 bitów – bit 0, dla rozdzielczości 10 bitów – bit 0 i 1 itd. ) (Rys. 7).

 

Bajty 0 oraz 1 pamięci scratchpad

Rys. 7. Bajty 0 oraz 1 pamięci scratchpad

 

Rejestry TH oraz TL  służą do ustawienia temperatury dolnej oraz górnej których przekroczenie spowoduje ustawienie flagi alarmu w układzie informującej o takim zdarzeniu. Flaga jest aktualizowana przy każdym pomiarze temperatury.  Tylko bity od 11 do 4 połączonych rejestrów TH oraz TL  są wykorzystywane podczas porównania temperatury.

W czwartym bajcie pamięci umieszczono rejestr konfiguracyjny. Tylko 2 bity rejestru są wykorzystywane jak pokazano na rys. 8.

 

      Rejestr konfiguracyjny.

 Rys. 8. Rejestr konfiguracyjny.

 

Gdzie bity R0 oraz R1 służą do ustalenia dokładności pomiaru temperatury (rys. 9.).

 

      Rozdzielczość termometru w zależności od ustawienia bitów R0 i R1

Rys. 9. Rozdzielczość termometru w zależności od ustawienia bitów R0 i R1

 

Ostatni bajt w pamięci jest sumą kontrolną CRC wygenerowana z całej pamięci przy pomocy wielomianu:

CRC

Układ może być zasilany z zewnętrznego źródła zasilania lub z magistrali 1- Wire jak pokazano na rys 10. Zasilanie z magistrali wiąże się z pewnymi ograniczeniami. Ponieważ podczas konwersji zapotrzebowanie układu na prąd jest stosunkowo duże i konieczne jest bądź zasilanie układu z zewnętrznego źródła lub też podłączenie magistrali do źródła zasilania poprzez tranzystor.

 

Schemat zasilania układu DS18B20

Rys. 10. Schemat zasilania układu DS18B20

 

Procedura komunikacji z układem

Procedura komunikacji z układem obejmuje trzy następujące kroki:

    1)     Inicjalizację

    2)      Komendy dotyczące pamięci ROM ( oraz wymiana danych z tym związana )

    3)      Komendy funkcyjne ( oraz wymiana danych z tym związana )

     

Inicjalizacja polega na wygenerowaniu przez układ mikrosterownika impulsu reset magistrali 1 –wire oraz odpowiedzi impulsem „obecności” (presence pulse) układu DS18B20.

Komendy dotyczące pamięci ROM pozwalają na dostęp do 64 bitowej pamięci ROM układu oraz zorientowanie się układu master (mikrosterownika) ile układów jest podpiętych do magistrali.

Dostępne są następujące komendy ROM:

  • SEARCH ROM [F0h] – komenda pozwalająca na identyfikację układów podłączonych do magistrali. układ master powinien wykonać tą komendę tyle razy ile układów jest podłączonych do systemu. Jeśli jest tylko jeden układ można wykonać komendę read rom.
  • READ ROM [33h] -  odczyt unikalnego numeru układu. Komendę można użyć tylko w przypadku gdy do magistrali podpięty jest jeden układ slave.
  • MATCH ROM [55h] – Komenda po której następuje wysłanie 64 bitowego kodu układu, pozwalająca na wybranie danego układu w celu uzyskania odpowiedzi tylko od niego.
  •  SKIP ROM [CCh] – Komenda pozwalająca na zaadresowanie wszystkich układów na magistrali jednocześnie i wysłaniu komendy do wszystkich jednocześnie.
  • ALARM SEARCH [ECh] – Komenda po której odpowiedzą układy w których ustawiona jest flaga alarmu.

Dostępne komendy funkcyjne:

  • CONVERT T [44h] – Komenda inicjalizująca konwersję temperatury
  • WRITE SCRATCHPAD [4Eh] – Komenda pozwalająca na zapis 3 bajtów do pamięci – rejestrów TH, TL i rejestru konfiguracyjnego.
  • READ SCRATCHPAD [BEh] – komenda pozwalająca na odczyt pamięci ( wszystkich 9 bitów ). Odczyt może być przerwany w dowolnym momencie przez impuls reset
  • COPY SCRATCHPAD [48h] – komenda powoduje zapisanie wartości rejestrów TH, TL i rejestru konfiguracyjnego w pamięci EEPROM
  • RECALL E2 [B4h] – Komenda powoduje wczytanie do pamięci scratchpad wartości rejestrów z pamięci EEPROM
  • READ POWER SUPPLY [B4h] – Komenda pozwalająca na wykrycie czy któryś z układów podłączonych do magistrali jest z niej zasilany.

 

Producenci układów z interfejsem 1-Wire

 

     

    • Philips
    • Dallas – Maxim
    • Atmel

 

Darmowa telewizja online przez internet, całkowicie za darmo !

Avans Bielsko-Biała, Avans Jaworze - sklep AGD RTV