Dekodowanie protokołu RC-5 – Dodatek

Ponieważ ostatnio w moje ręce dostał się (niestety tymczasowo) analizator stanów logicznych, postanowiłem podrzucić na blogu dodatek do mojego poprzedniego postu, w którym opisywałem jak zaimplementować dekoder protokołu RC-5 na mikrokontrolerze AVR ATmega16.

Niestety w poście brakowało podstawowej rzeczy, jaką jest namacalny (o ile stany można wymacać) przykład takiego protokołu. Na swoje potrzeby, zbudowałem wtedy dość prymitywny analizator, również na AVR, który portem szeregowym wysyłał „0” lub „1”, w zależności od stanu.

Stąd, celem nadrobienia braków, powstał ten post, który powinien rzucić trochę światła na to, co się dzieje poza zasięgiem naszego wzroku.

Opis układu testowego

Układ testowy jest bardzo prosty, składa się z odbiornika TSOP4836 oraz opcjonalnego układu SN74LS00N, który zawiera w sobie 4 bramki NAND. O ile obecność odbiornika jest uzasadniona, tak bramki logiczne niekoniecznie mogą być dla Was jasne.

Odbiornik TSOP4836 na wyjściu emituje odwrócony sygnał tego, co odbiera. Jeżeli jest w stanie spoczynku, lub aktualnie odbiera stan niski, na wyjściu będzie logiczna „1”, z kolei odbiór stanu wysokiego spowoduje ustawienie wyjścia na „0”. Aby łatwiej zrozumieć zagadnienie, można sygnał z odbiornika zanegować, wtedy będzie miał taką samą postać, jak ten, wysyłany przez pilot.

Ponieważ nie posiadałem akurat bramki NOT, musiałem takową zbudować przy pomocy bramki NAND, jest to bardzo proste, schemat przedstawiony jest poniżej.

http://www.lamja.com/wp-content/uploads/2010/08/NAND_NOT.png

Bramka NOT zbudowana przy pomocy NAND

Analizator stanów podpiąłem tak, że na jednym kanale widoczny będzie sygnał bezpośrednio emitowany przez odbiorniki, a na drugim po przejściu przez bramkę NOT.

Układ testowy

Układ testowy

Pomiary

Pierwszy pomiar ukazuje efekt naciśnięcia guzika „Vol +”. Dla nas interesujące są jedynie kanały podpisane jako „Original” i „Inverted”.

Zwiększanie głośności

Zwiększanie głośności

Żeby było łatwiej rozczytać, podpisałem poszczególne stany, uzyskaliśmy:

11 – 2 bity startowe
1 – bit toggle
10000 – Adres urządzenia (16), czyli „Pre-amp”
010000 – Komenda (16), czyli „Vol +”

Kolejny jest guzik „Program -„, u mnie pokazany jako strzałka w lewo do zmiany utworów.

Poprzedni utwór

Poprzedni utwór

11 – 2 bity startowe
0 – bit toggle, zmienił się, ponieważ było to kolejne naciśnięcie klawisza
10101 – Adres urządzenia (21), czyli „Phono”
100001 – Komenda (33), czyli „Program -”

Przykład innego protokołu

RC-5 nie jest jedynym protokołem wykorzystywanym do sterowania urządzeniami, czasem można spotkać protokoły, które są zmodyfikowanymi wersjami tych oficjalnie opisanych. Przykładem może być pilot do telewizora Samsung, w jego przypadku nie znalazłem odpowiadającego mu protokołu, najbliższy jest mu protokół NEC.

Protokół NEC, zmodyfikowany

Protokół NEC, zmodyfikowany

Standard NEC zakłada następujący protokół:

  1. Stan wysoki – 9ms
  2. Stan niski – 4.5ms
  3. 8 bitów adresu
  4. 8 zanegowanych bitów adresu
  5. 8 bitów komendy
  6. 8 zanegowanych bitów komendy

„1” wysyłana jest jako 560us stanu wysokiego i 1690us stanu niskiego, co daje łączną długość bitu 2.25ms.
„0” wysyłane jest jako 560us stanu wysokiego i 560us stanu niskiego, co daje łączną długość bitu 1.12ms.

W przypadku przytrzymania przycisku, polecenie nie jest powtarzane, zamiast tego wysyłany jest 9 milisekundowy stan wysoki, po którym następuję 2.25ms sekund przerwy i ponownie 560us stanu wysokiego. Sekwencja ta wysyłana jest co 110ms, tak długo, jak wciśnięty pozostaje przycisk.

Więcej o protokole NEC (i innych), można przeczytać pod adresem: http://www.sbprojects.com/knowledge/ir/nec.php

Sygnał wysyłany przez pilot Samsunga:

  1. Stan wysoki – 4.55ms
  2. Stan niski – 4.55ms
  3. 8 bitów adresu
  4. 8 bitów adresu
  5. 8 bitów komendy
  6. 8 zanegowanych bitów komendy
  7. Puls końcowy około 600us

„1” wysyłana jest jako 600us stanu wysokiego i 1.65ms stanu niskiego, co daje łączną długość bitu 2.25ms
„0” wysyłane jest jako 600us stanu wysokiego i 530us stanu niskiego, co daje łączną długość bitu 1.13ms.

W przypadku przytrzymania klawisza, polecenie jest powtarzane co około 47ms.

Przytrzymanie przycisku

Przytrzymanie przycisku

Wnioski

Wniosek jest jeden: jedna grafika wyraża tyle, co tysiąc słów. Mam nadzieję, że niektórym ułatwi to zrozumienie na czym dokładnie polega sterowanie podczerwienią.

[guest@itachi.pl:~]$

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *