Bascom: Zdalne sterowanie za pomocą pilota od telewizora

rc5Sterowanie pilotem jest bardzo przydatną rzeczą bo pozwala nam to na robienie wielu rzeczy bez wstawania z naszego ulubionego fotela tj. przełączanie programów TV, regulacja głośności, włączania świateł w pokoju itp. ;) Jednak naszym celem nie będzie zmienienie programu TV lecz zapalanie diód led w mini układzie do nauki programowania na ATTiny2313.


Piloty wysyłają komendy w znanych im standardach. Do takich najpopularniejszych należą RC5, RC6. Są jeszcze standardy wysyłania opracowane przez firmy dla swoich produktów, lecz my zajmiemy się RC5. Potrzebujemy zatem pilota który nadaje w takim standardzie, ja mam pilot firmy Goldstar, który w takim standardzie nadaje (Jeżeli nie masz takiego to musisz kupić „pilot nadający w standardzie RC5”, czasami piloty uniwersalne nadają w RC5). Sygnał jest wysyłany za pomocą promieniowania podczerwonego, jest modulowany co oznacza, że komendy są wysyłane za pomocą impulsów prostokątnych o częstotliwości 36kHz.
Nadajnik, który pracujące według standardu RC5 transmituje 14-bitowe słowa danych, kodowane w formacie bi-phase, zwanym także kodem Manchester. Pierwsze dwa bity słowa są zawsze jedynkami i tworzą razem sygnał startu.
Następny bit jest bitem kontrolnym (toggle bit), zmienianym w kolejnych nadawanych słowach, gdy użytkownik przytrzyma klawisz pilota ? umożliwia to powtarzanie komend.
Kolejne 5 bitów reprezentuje adres urządzenia, które ma być właściwym odbiornikiem transmisji. Dla przykładu: odbiorniki telewizyjne maja zazwyczaj adres 0, a magnetowidy adres 5.
Ostatnie 6 bitów reprezentuje jedną z 64 możliwych komend. Żeby to wszystko sprawnie działało to musimy wykorzystać odbiornik podczerwieni, taki który odbiera sygnał o częstotliwości 36kHz. W moim układzie jest zamontowany TSOP1736.
Skoro wiemy jak to działa w teorii to nie pozostaje nic innego jak przejść do praktyki ;). Program standardowo zaczynamy instrukcjami deklaracji procesora i jego prędkości:

  1. $regfile „attiny2313.dat”                               ‚procesor Attiny2313
  2. $crystal = 4000000                                      ‚kwarc 4MHz

Teraz należy zadeklarować piny wejścia i wyjścia, czyli nasze diody to wyjścia a odbiornik podczerwieni to wejście. TSOP’a możemy zadeklarować na dwa sposoby:

  1. Config  Portb.0 = Input
  2. ‚albo
  3. Config RC5 = Portb.0

Jednak ja wybiorę ten co jest w 3.linijce ze względów  estetycznych, co prawda to nie jest duży program ale jakby było potrzeba zadeklarowania większej ilości wejść to byłoby widać, które wejście to odbiornik podczerwieni. Diody deklarujemy jak w Bascom: Pierwszy program.
W tym momencie musimy zdefiniować zmienne jako bajty używając intrukcji Dim, działa on na takiej zasadzie :

  1. Dim nazwa as typ
  2. ‚nazwa-  nazwa zmiennej
  3. ‚typ- typ zmiennej, np. byte, bit, word, string itd.

lecz jeśli nasza deklaracja zmiennych jest większa niż jedna zmienna to następne piszemy obok oddzielając przecinkiem. Także nasza definicja wygląda tak:

  1. Dim Adres As Byte , Komenda As Byte                     ‚definicja zmiennych

potrzebujemy jeszcze włączyć globalne przerwania za pomocą instrukcji:

  1. Enable Interrupts                             ‚włączenie globalnych przerwań

Zakończyliśmy już ustawienie podstawowych parametrów pracy procesora, pozostało nam zacząć główną pętle używając intrukcji Do, teraz musimy zasygnalizować mikokontrolerowi, że „jest gotowy” na odbieranie sygnału Rc5 przy pomoc instrukcji GetRC5:

  1. Getrc5(adres , Komenda)                            ‚gotowy do odbioru adresu
  2. Komenda = Komenda And &B01111111                   ‚i komendy

Jak już wiemy, adres jest wysłany wraz z komendą, co nam ułatwia zadanie- musimy tylko zadeklarować jaką komendę chcemy odbierać i tutaj musimy użyć instrukcji IF oraz zmienną komenda, którą wcześniej zdefiniowaliśmy:

 

  1. If Komenda = 1 Then
  2.      Pinb.4 = 1                           ‚jezeli odberana komenda
  3.      Waitms 150                         ‚to 1 to wlacz diode
  4.                                                  ‚i czekaj 150ms
  5. Elseif Komenda = 2 Then        ‚jeżeli zostanie wcisiniety
  6.      Pinb.3 = 1                            ‚ten sam przycisk na
  7.      Waitms 150                         ‚na pilocie to stan
  8.                                                  ‚wyprowadzenia zostanie
  9. Elseif Komenda = 3 Then        ‚zanegowany
  10.      Pinb.2 = 1                            ‚czyli w tym przypadku dioda zgasnie
  11.      Waitms 150
  12. Elseif Komenda = 4 Then
  13.      Pinb.1 = 1
  14.      Waitms 150

Skąd wiedzieć za co jaka komenda odpowiada ?

rc5send

Pozostało nam już tylko zakończyć instrukcję IF, zamknąć pętle i zakończyć program:

  1. End If
  2. Loop     ‚zamkniecie petli
  3. End      ‚koniec programu


Dzięki za uwagę, jak chcesz być na bieżąco z postami to kliknij ‚Lubię to !‚.
Pozdrawiam ;)