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:
READ ROM – procedura pozwalająca odczytać Serial Number
MATCH ROM – procedura pozwalająca na identyfikację układu w sieci
SKIP
ROM – procedura omijająca identyfikację układu
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 :

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.

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 :
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 :
RA0=RA1=RA4=wyjście
RA2=RA3=wejście
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 |
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 :
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 |
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.