sobota, 2 kwietnia 2016

Ważna Linia

USART to potężne narzędzie i daje nam naprawdę duże możliwości komunikacji. Jak łatwo się domyślić, nie wszystkie urządzenia implementują ten standard - głównie dlatego, że wymaga zbyt wiele miejsca na elektronikę, która byłaby odpowiedzialna za komunikację. Na szczęście istnieją prostsze i mniej wymagające sposoby 'dogadania się' z elementami z zewnątrz mikrokontrolera.

Tniemy koszty

USART do prawidłowego działania wymagał co najmniej 3 linii - 2 sygnałowych i jednej linii odniesienia. Jak uprościć ten schemat? Wyrzućmy jedną linię! Proste. Zostawmy linię odniesienia - nadal musi istnieć wspólne 'źródło prawdy' (kiedy jest 0), a 2 linie sygnałowe zastąpmy 1. Czyli zamiast używania uszu i ust do komunikacji, używamy aparatu, który będzie jednym i drugim... na zmianę. Pamiętacie z dzieciństwa zabawę z kubkami i sznurkiem? Nawet nie wiedzieliście, że korzystacie z rozwiązania 1-Wire - opisanego np. w nocie katalogowej jednego z najbardziej popularnych termometrów wśród miłośników domowej automatyzacji.

Jakoś się dogadamy...

Podobnie jak w przypadku USART, potrzebny jest protokół. Mamy do dyspozycji 1 linię, która w danym momencie może być:
wyjściem w stanie wysokim
wyjściem w stanie niskim
wejściem
i jeszcze ten 'dany moment' - czyli urządzenia połączone ze sobą mają pojęcie o czasie! To już coś.

Jak rozmawiamy? Wiadomo - zera i jedynki układające się w bajty, a bajt to już liczba albo znak - a to już potrafimy wysłać przez USART do innego urządzenia...  Ale po kolei.

Cała komunikacja polega na nasłuchiwaniu, w jakim stanie znajduje się magistrala lub naduszaniu na nią 'swojej woli'. I tak chcąc wysłać bit, urządzenie powinno wystawić stan niski na linii, następnie po czasie 10 us wystawić stan wysoki, jeśli chce wysłać 1, a następnie - w obu przypadkach - odczekać 100us, następnie znów wystawić stan wysoki na linii.

Chcąc odczytać bit, urządzenie powinno na 2us zmienić kierunek swojego portu komunikacyjnego, następnie po 15us sprawdzić stan linii.

8 bitów to bajt!

Skoro wiemy jak odczytać i nadać bit - odczytajmy i nadajmy bajt! - ośmiokrotnie wywołując funkcje dotyczące bitów, dbając o to, żeby dostarczać kolejne bity w przypadku nadawania i zapisywać w przypadku odbierania.

1 mówi, reszta słucha

Wiemy jak korzystać z linii, ale skąd możemy mieć pewność, że nikt inny akurat z tej linii nie korzysta? Standard przewiduje także procedurę resetu. Polega ona na wprowadzeniu magistrali w stan niski na 480us, następnie 480us w stanie wysokim. Magistrali? Tak magistrali! 1-Wire to magistrala! Możemy do niej wpiąć wiele urządzeń - każde z nich będzie miało swój własny adres i możliwa będzie komunikacja - przeważnie typu master-slave. Np. mikrokontroler jako master odpytywać będzie czujniki temperatury DS1822 działające w trybie slave - w ten sposób zbierze dane z całego domu, przetworzy je i wyśle do centralnego serwera, który w niecny sposób wykorzysta tę tajemną wiedzę (i na przykład podkręci ogrzewanie...).

A gdzie kodzik!?

Czeka na porządne przetestowanie na moim dev-środowisku na biurku :)

Brak komentarzy:

Prześlij komentarz