Sprzętowy konwerter RS232/1-Wire




Dlaczego DS2480B ?

    Zagadnienie podłączania urządzeń (układów) z interfejsem 1-Wire do komputera PC to dość popularny temat. Świadczy o tym nie tylko ilość dostępnych w prasie elektronicznej publikacji, ale też często pojawiające się dyskusje na forach.
Temat niby nie jest skomplikowany, specyfikacja magistrali 1-Wire jest ogólnie dostępna i napisana przystępnym językiem - wystarczy przysiąść i napisać sobie oprogramowanie według zaleceń twórców szyny 1-Wire. I w tym momencie często zaczynają się przysłowiowe schody. Szyna 1-Wire, w odróżnieniu od I2C czy SPI, wymaga bardzo precyzyjnego zachowania zależności czasowych. Dodatkowe utrudnienie stanowi fakt, że jedena linia sygnałowa służy do dwukierunkowej transmisji danych oraz do potencjalnego zasilania podłączonych układów (tzw. Parasite-Power). O ile z taką 'wielofunkcyjnością' linii sygnałowej można sobie (czasem ze wsparciem elektroniki) poradzić, to zachowanie odpowiednich zależności czasowych do sympatycznych zadañ nie należy. W przypadku mikrokontrolerów jeszcze nie jest źle. W końcu dokładnie wiemy z jaką szybkością (kwarcem) kontroler pracuje, wszelkiego rodzaju opóźnienia są 'wyliczalne'. W przypadku komputera PC, pracującego pod kontrolą wielozadaniowego systemu operacyjnego zależności czasowe stanowią pewien problem. Wynika to z podziału czasu pomiędzy działającymi aplikacjami użytkownika (a ta wartość jest zmienna i stanowi o obciążeniu maszyny) oraz z ogólnej wydajności posiadanego sprzętu. Zastosowanie funkcji nazwijmy to - autokalibracji - dostosowujących wymagane opóźnienia do realiów w jakich pracuje program jednak go komplikuje i tak naprawdę nie daje gwarancji, że program zadziała na każdym sprzęcie.

    Dość typowy przykład w sumie banalnego interfejsu sprzętowego znajdziemy w [4]. To dosłownie garść popularnych elementów, które zapewniają podstawową logikę interfejsu oraz konwersję poziomów napięć. Środek ciężkości został przeniesiony na oprogramowanie i to ono odpowiada za poprawną komunikację z szyną 1-Wire. Niewątpliwą zaletą takieg podejścia jest maksymalne uproszczenie części sprzętowej, wada to skomplikowanie oprogramowania oraz potencjalne ryzyko braku jego przenoszalności pomiędzy różnymi systemami operacyjnymi.

    Nieco inne rozwiązanie problemu komunikacji z szyną 1-Wire opisane jest w [5]. Autor proponuje zastosowanie dedykowanego mikrokontrolera, który z jednej strony komunikuje się z systemem nadrzędnym (niekoniecznie z PC) przy pomocy standardowego łącza szeregowego RS232, z drugiej zaś strony posiada wyprowadzenie sygnału magistrali 1-Wire. Specjalne oprogramowanie zapewnia bezpośrednią konwersję danych z łącza RS232 na format wymagany przez specyfikację magistrali. To rozwiązanie, pomimo pozornej komplikacji (dodatkowy kontroler i jego oprogramowanie) jest dość łatwe do realizacji i posiada szereg zalet. Po pierwsze - w pewien sposób uniezależniamy się od magistrali 1-Wire i jej wymagań czasowych. Po drugie rozwiązanie nie jest zależne od systemu operacyjnego w środowisku którego działa program korzystający z 1-Wire. Jedyny, łatwy do spełnienia wymóg to dostęp do standardowej komunikacji po łączu szeregowym zgodnym z RS232. Potencjalna wada (choć lepsze jest tu słowo: cecha) to konieczność samodzielnego oprogramowania komunikacji z interfejsem, ale już na poziomie abstrakcji określonym funkcjonalnością sieci 1-Wire. To polecenia MATCH/SEARCH/READ ROM i tym podobne. Stworzenie tej warstwy oprogramowania spoczywa na użytkowniku, nie jest to zadanie koszmarnie trudne, niemniej jednak konieczne do wykonania.

    Istnieje też inna możliwość, posiadająca zalety obu skrótowo opisanych powyżej rozwiązań. Jest nią zastosowanie sprzętowego konwertera RS232 na 1-Wire produkowanego przez firmę Maxim/Dallas pod nazwą DS2480B. Wspomniany układ realizuje obsługę magistrali 1-Wire w sposób kompleksowy, komunikując sie z systemem nadrzędnym przy pomocy garści zdefiniowanych poleceń. Pełna specyfikacja tego układu jest dostępna w [2], a szczegółowe informacje (wraz z przykładami) dotyczące sposobu komunikacji z DS2480B znajdziemy w [3], tak więc w dalszej części ograniczę się jedynie do przedstawienia typowej aplikacji tego układu.

Problem SMD

    Na początek zagadnienie o tyle prozaiczne co i nieco w domowych warunkach frustrujące - montaż kostki DS2480B w układzie (zarówno dla testów, jak i docelowo). Oczywiście kostka owa nie posiada wersji w obudowie DIP, jest natomiast dostępna w ośmiopinowej obudowie typu SO, do montażu powierzchniowego. Stanowi to drobny problem gdy chcemy te kostkę 'poćwiczyć' w układzie zmontowanym przykładowo na płytce typu solderless-breadboard. Rozwiązanie jest oczywiste - szybciutko wykonujemy przejściówkę-przelotkę SMD na DIP jak na przykładowych zdjęciach poniżej. I tyle.




Wykonując taką mini-płytkę, warto od razu zrobić ich kilka, to znaczy jeden wydruk powinien zawierać kilka odrębnych płytek. Po pierwsze - pewnie przydadzą się na zapas, po drugie - nie ma gwarancji, że wszystkie się udadzą...
Samo lutowanie układu nie nastręcza trudności, gotowy moduł ładnie pasuje zarówno do płytki stykowej jak i do odpowiednio spreparowanej pseudo-podstawki w układzie docelowym.

Realizacja

    Mając rozwiązany problem obudowy SMD zabieramy się za budowę naszego interfejsu. Schemat ideowy przedstawia rysunek poniżej.



Schemat namalowałam na bazie dokumentacji układu dostêpnej w [2], sekcja "HARDWARE APPLICATION EXAMPLES". Kostki MAX232 oraz LM7805 pracują w swoich typowych układach pracy i to chyba nie wymaga komentarza. Słowo wyjaśnienia należy się natomiast w kwestii podłączenia sygnałów TXD, RXD kostki DS2480B do układu MAX232. W pierwszej wersji schematu (i układu próbnego) niejako z przyzwyczajenia potraktowałam linie TXD, RXD jak w typowym mikrokontrolerze - odpowiednio wyjście i wejście szeregowe. A tu guzik. A już na pierwszej stronie data-sheet napisane jest że "TXD - Serial Data from UART, RXD - Serial Data to UART" - czyli jest dokładnie odwrotnie niż się na czuja wydawało... Chwilkę to zajêło zanim odszukałam błąd w układzie. No i została nauczka, że data-sheet czyta się w całości, a nie na wyrywki...
Wyprowadznie POL układu ma być zapięte do napięcia zasilania, a to dlatego, że współpracujemy z układem (MAX232), który w przypadku braku transmisji wystawia na wyjściach i oczekuje na wejściach wysokiego stanu logicznego. Ta sama konfiguracja sygnału POL będzie obowiązywała przy podłączaniu go do dowolnego kontrolera z typowym UART w strukturze. Ponieważ nie zamierzam korzystać z możliwości programowania EPROM, wyprowadzenie VPP podłączone jest do napięcia zasilania układu, a nie do +12V (nap. programujące).
Z nieobowiązkowych dodatków można wymienić dwie diody świecące, sygnalizujące aktywność linii TXD,RXD (świecą gdy linie wchodzą w stan niski) oraz filtr RC i transil w roli zabezpieczenia na okazję długich przewodów magistrali.

Prototyp interfejsu został przetestowany na płytce stykowej, poniżej kilka archiwalnych zdjęć.



A następnie przeniesiony na docelową płytkę drukowaną.

 





W ramach finalnych testów podłączyłam do konwertera przetwornik DS2450 (moduł na płytce SB) oraz ogólnie znany termometr typu DS1820 (zapięty bezpośrednio na złączu mojego konwertera).



Oprogramowanie

Zagadnienie oprogramowania tego typu konstrukcji zostało już rozwiązane przez firmę Maxim/Dallas. Na stronach poświęconych 1-Wire (odnośnik [1]), w sekcji "1-Wire Software Tools" znajdują się gotowe do pobrania pakiety oprogramowania m.in.: sterowniki, API dla języka Java oraz SDK dedykowane systemowi Windows.

Po zainstalowaniu sterowników, nasz interfejs widziany jest jako moduł DS9097U podłączony do jednego z portów szeregowych maszyny. Jeżeli układ nie zawiera błędów montażowych i jest poprawnie zasilany, zostanie wykryty przez funkcję Auto-Detect, co ilustrują zrzuty ekranu:



Zakładając, że mamy zainstalowane J2SE (Java 2 Standard Edition), najlepiej w najnowszej możliwej wersji oraz Java Web Start, możemy uruchomić sobie bezpośrednio z poziomu przeglądarki firmową aplikację o nazwie OneWireViewer.
To dość sympatyczy program, napisany włąnie w Javie, którym możemy komunikować się z kostkami dopiętymi do magistrali: odczytywać temperaturę z czujników, zapisywać i odczytywac pliki w iButton-ach, badać napięcia na wejściach przetwornika A/C i robic wiele innych, niezmiernie ciekawych rzeczy.
Największą zaletą tej aplikacji jest to że ... nie jest naszego autorstwa. To firmowe oprogramowanie, przetestowane i stabilne więc jego poprawne działanie świadczy o tym, że gdy mamy kłopoty z własnym oprogramowaniem to błąd tkwi prawdopodobnie w naszym kodzie, no takie życie, niestety. Gdy sterowniki i OneWireViewer w ogóle nie widzą konwertera lub dołączonych do niego układów - prawdopodobnie mamy problem z naszą elektroniką.
Poniżej zrzutki ekranu z okna OneWireViewer-a:




Pliki dodatkowe

 mozajka ścieżek (termotransfer) w formacie Post Script
 strona elementów w formacie Post Script

Referencje

[1] "1-Wire", Maxim/Dallas Semiconductor
[2] "DS2480B Serial to 1-Wire Line Driver", Maxim/Dallas Semiconductor
[3] "Using the DS2480B Serial 1-Wire Line Driver" (App.Note 192), Maxim/Dallas Semiconductor
[4] "PC-Termometr - termometr internetowy", Paweł Knioła, opis w Elektronika dla Wszystkich 5/2006
[5] "Interfejs 1wire<->PC", Michał Waśkiewicz, opis w Elektronika dla Wszystkich 9/2006
[6] "Układy 1-Wire", "Mikroprocesorowa ośla łączka", Piotr Górecki, Elektronika dla Wszystkich 2/2005


luty 2007 / luty 2017


Natasza Biecek 2004-2017/~, e-mail