Emulator układów z interfejsem 1Wire® firmy Dallas-Maxim

            Interfejs 1-Wire został opracowany w firmie Dallas-Maxim®, która jednocześnie jest producentem wielu bardzo ciekawych układów, korzystających z tego protokołu. Jak sama nazwa wskazuje, układy komunikują się praktycznie przy pomocy jednej pary przewodów czyli dane i masa.  Dodatkowym atutem tych układów jest fakt, iż większość z produkowanych obecnie, nie musi mieć dodatkowego zasilania ponieważ korzysta z energii zmagazynowanej w wewnętrznym kondensatorze, zasilanym z linii danych. Jednak prostota w podłączeniu tych układów została okupiona bardzo rygorystycznym, jeżeli chodzi o przebiegi czasowe, protokołem transmisji. Każda próba nawiązania łączności pomiędzy układem typu Master a układami typu Slave musi rozpocząć się od wysłania przez Master'a sygnału RESET. Jest to impuls o określonym przebiegu czasowym (rysunek 1).

W pierwszej fazie Master przez min. 480µs utrzymuje na magistrali stan "0" następnie przełącza się na odbiór i oczekuje przez ok. 60÷240µs na tzw. Presence Pulse czyli sygnał potwierdzenia obecności przez Slave. Po otrzymaniu sygnału potwierdzenia można wysyłać i odbierać dane. Układy Dallas'a wymagają pewnego ściśle określonego formatu wymiany danych pomiędzy układami. Nadawanie lub odbiór każdego bitu danych rozpoczyna zawsze urządzenie typu Master poprzez wysłanie impulsu synchronizującego tzn. stan "0" na magistrali przez ok. 15µs.

Na (rysunku 2) przedstawiono sekwencję nadawania "0" a następnie "1". Odpowiednie stany linii są utrzymywane przez kolejne 60µs ÷ 120µs po wystąpieniu  impulsu synchronizacji.

Przebiegi czasowe procesu odbioru bitów danych są przedstawione na (rysunku 3). Jak widać na rysunku, Master próbkuje stan linii między 15µs a 30µs.

             Aby na jednej linii mogły pracować różne układy, został im fabrycznie nadany  tzw. Serial Number. Jest to niepowtarzalny 64 bitowy numer, zapisany w wewnętrznej pamięci typu ROM. Numer ten pozwala na jednoznaczną identyfikację spośród wielu innych układów, jednocześnie podłączonych do magistrali 1-Wire. Cechą charakterystyczną układów firmy Dallas a raczej ich oprogramowania, jest podział na  dwa bloki tzw. "Master Tx ROM Command" oraz "Master Tx FUNCTION Command". W pierwszym bloku ROM Command są umieszczone procedury pozwalające na określenie sposobu komunikacji pomiędzy Master a Slave, są to:

Drugim blokiem jest FUNCTION Command z procedurami typowymi dla poszczególnych układów. Znajdziemy tam m. in. konwersje temperatury, sterowanie przetwornikiem AD, zapis i odczyt pamięci, odczyt licznika i wiele innych charakterystycznych dla danego typu układu. Pomimo tak bogatej oferty układów zastosowanie jako Slave programowalnego mikroprocesora mogło by uprościć wiele konstrukcji. Nasuwa się tutaj wiele przykładów, gdzie użycie mikroprocesora jest jedynym rozwiązaniem albo przynajmniej upraszcza konstrukcję elektryczną czyniąc ją bardziej elegancką. Oto kilka przykładów gdzie procesor w roli Slave może zastąpić wiele układów typu PIO :

Na (rysunku 4) przedstawiono schemat podłączenia mikroprocesora do magistrali 1-Wire.

Jest to tylko sam mikroprocesor typu PIC16F84 taktowany kwarcem 10MHz. Jako linię 1-Wire wykorzystano pin 6 czyli RB0/INT. Jak wspomniano na początku tego artykułu ze względu na istotne rygory czasowe sygnału 1-Wire, do poprawnej pracy niezbędne jest korzystanie z układu przerwań. Jest to jedyne ograniczenie w naszej konstrukcji. Pozostałe linie portów RA oraz RB mogą być dowolnie konfigurowane a zastosowanie zależy tylko od naszej inwencji. Podczas projektowania tego układu wzorowałem się na podobnym rozwiązaniu zamieszczonym na stronie http://home.hetnet.nl/~thomas_7/1Wire/1-WireIOPort.html

 Moje rozwiązanie opiera się na trochę innym procesorze PIC16F84 oraz nie wymaga zastosowania dodatkowego układu identyfikującego typu DS2401. Unikalny Serial Number w moim projekcie został zapisany  w wewnętrznej pamięci EEPROM. Jednak najważniejszą zaletą tego rozwiązania jest to, iż mam możliwość zmiany w kodzie źródłowym (dostępny na serwerze emul_1W.zip) w celu dopasowania układu do danego rozwiązania. W projekcie p. Th. Rudolphi jest dostępny niestety tylko plik wynikowy typu HEX.

Na (rysunku 5) przedstawiony jest algorytm sterowania procesorem przez interfejs 1-Wire. Jest to typowe rozwiązanie dla układów firmy Dallas czyli bloki Master ROM Commands oraz Master FUNCTION Commands.  Oprogramowanie opisane w pierwszej części artykułu pozwala nam na dowolną konfigurację portów (z wyjątkiem wejścia RB0) oraz zapis danych i odczyt  stanów.

W (tabeli 1) przedstawiona jest operacja konfiguracji portu RA. Tak jak w układach firmy Dallas każdą transmisję rozpoczynamy od sygnału Reset Pulse, następnie możemy skorzystać z dwóch wariantów komunikacji :

  1. z pominięciem identyfikacji układu tzw. Skip ROM
  2. z identyfikacją Serial Number tzw. Match ROM

Poniżej przedstawiony jest pierwszy wariant Skip ROM, który wybieramy wysyłając do układu Slave (naszego procesora) określony bajt o wartości CCh w zapisie hexadecymalnym. W tym momencie nasz procesor oczekuje na instrukcje z bloku Master FUNCTION Commands. Do konfiguracji portu RA służy procedura Setup RA. Uaktywniamy ją przez wysłanie do Slave bajtu o wartości F7h a następnie wysyłamy bajt z daną konfiguracyjną.

Oto przykładowa dana aby skonfigurować port RA w następujący sposób :

musimy jako daną konfiguracyjną wysłać wartość ECh [x x x 0 1 1 0 0]b. Wartości oznaczone "x" są dowolne ponieważ procesor ma tylko 5 portów RA.

tabela 1

Konfiguracja portu RA

Operacja

wysłany bajt

odebrany bajt

 

Reset Pulse

-----------

------------

 

Skip ROM

CCh

------------

 

Setup RA

F4h

------------

 

 

xxh

------------

wysłana dana zgodnie z ustawieniem portów [0–wyjście, 1–wejście]

W (tabeli 2) zamieszczono opis procedury konfiguracji portu RA ale z użyciem procedury identyfikacji w sieci tzw. Mach ROM. Serial Number naszego procesora jest zapisany w EEPROM i wynosi : [53h, 41h, 57h, 49h, A9h, 4Bh, 49h, 94h].

tabela 2

Konfiguracja portu RA

Operacja

wysłany bajt

odebrany bajt

 

Reset Pulse

-----------

------------

 

Mach ROM

55h

------------

 

 

53h

------------

pierwszy bajt SN

 

41h

------------

drugi bajt SN

 

57h

------------

...

 

49h

------------

...

 

A9h

------------

...

 

4Bh

------------

...

 

49h

------------

siódmy bajt SN

 

94h

------------

ósmy bajt SN

Setup RA

F4h

------------

 

 

xxh

------------

wysłana dana zgodnie z ustawieniem portów [0–wyjście, 1–wejście]

Procedury konfiguracji portu RB przebiegają identyczne. Różnica jest tylko w ilości wejść/wyjść - ponieważ port RB0 służy do komunikacji 1-Wire to jego konfiguracja jest niedostępna.

tabela 3 przedstawia procedurę zapisu (ustawienia) wyjść portu RB = A5h [1 0 1 0 0 1 0 x]b. Stan portu RB0 jest nieistotny – program emulatora ignoruje tą wartość.

Konfiguracja portu RA

Operacja

wysłany bajt

odebrany bajt

 

Reset Pulse

-----------

------------

 

Skip ROM

CCh

------------

 

Write to RB

F5h

------------

 

 

A5h

------------

wysłana dana zgodnie z ustawieniem portów

Do odczytu portów służy opcja Read RA, RB. W (tabeli 4) przedstawiono procedurę odczytu portów bez identyfikacji SN.

tabela 4

Odczyt portu RA, RB

Operacja

wysłany bajt

odebrany bajt

 

Reset Pulse

-----------

------------

 

Skip ROM

CCh

------------

 

Read RA, RB

F6h

------------

 

 

 

xxh

stan portu RA

 

 

xxh

stan portu RB

Ostatnią procedurą w Master ROM Commands jest " READ ROM " czyli odczyt naszego SN. Kolejność operacji jest następująca : RESET PULSE => READ ROM [33h] => odczyt 8 bajtów SN.