Forum Czytelników
Na łaniach EdW pojawiło się już sporo układów' pozwalających pilotem sterować odbiornikami energii elektrycznej, a zwłaszcza oświetleniem. Elektronik jest jednak tym szczęśliwym człowiekiem, który nie jest zdany na gotowe rozwiązania i może przygotować własne, najlepiej dostosowane do jego potrzeb. Tak leż było w moim przypadku, gdy stwierdziłem, że mojej lampce nocnej brakuje możliwości zdalnego włączania i wyłączania. Stoi ona co prawda całkiem blisko łóżka, jednak wstając wczesnym zimowym rankiem czasem trudno po omacku trafić we włącznik. Postanowiłem zatem skorzystać z pilota RC5, który kupiłem dość dawno temu. właśnie do takich zastosowań.
Poniżej prezentuję proste, ale wygodne rozwiązanie. Mój ministerownik wyróżnia się takimi własnościami, jak:
- sterowanie za pomocą jednego przycisku (włącz/wyłącz) lub dwóch (dodatkowo wyłączanie po upływie czasu odmierzanego przez timer),
- współpraca z dowolnym pilotem RC5,
- jeden pilot może obsłużyć nawet kilkanaście odbiorników (zależy to tylko od liczby dostępnych przycisków),
- możliwość uczenia się komend, dzięki czemu nic trzeba przeprogramowywać mikrokontrolera po zmianie pilota,
- zasilanie za pomocą zasilacza beztransfor-matorowego, dzięki czemu układ bez problemu mieści się w obudowie Z-27.
Opis układu
Na rysunku 1 zaprezentowany jest schemat ideowy. Jak widać, układem steruje mikrokontroler ATtiny 13 firmy ATMEL. Jest on wyposażony w' 1KB pamięci programu FLASH, 64B nieulotnej pamięci danych EEPROM i 64B pamięci operacyjnej SRAM. Pamięć programu jest bardzo mała, udało mi się jednak zmieścić w niej wszystkie funkcje, jakie planowałem. Zasilanie zrealizowałem w oparciu o zasilacz beztransfor-matorowy. Kondensator C1 o pojemności 330nF powinien gwarantować wydajność prądową powyżej 15mA nawet przy obniżonym napięciu sieci. W związku z niewielką wydajnością takiego prostego zasilacza użyłem optotriaka MOC3043, w którym prąd otwarcia wynosi zaledwie 5mA, dlatego nie należy go zastępować MOC3042, czy tym bardziej MOC3041, chy
ba że odpowiednio zwiększymy pojemność Cl. Jako odbiornik sygnału z pilota pracuje TFMS5360 lub jego odpowiednik TSOP1736. R5 i C4 zapewniają filtrację zasilania dla odbiornika. Rezystor R6 wraz z rezystorem C5 filtrują sygnał na nóżce resetu. Co prawda mikrokontrolery AVR mają wbudowane obwody zapewniające reset po starcie zasilania, ale podczas testowania prototypu okazało się, że jest on wrażliwy na zakłócenia pojawiające się w sieci przy włączaniu i wtyłączaniu halogenowej lampki nocnej. Źródłem zakłóceń był zapewne wbudowany w lampkę transformator. Co prawda, gdy lampka jest sterowana przez układ, zakłócenia są znikome dzięki użyciu optotriaka z detekcją przejścia fazy przez zero, jednak ręczne przełączanie włącznika lampki często powodowało resetowa-nie mikrokontrolera. Po dodaniu wspomnianych elementów sytuacja uległa poprawie.
Program sterujący układem został napisany w? języku C i zajmuje prawie całą dostępną pamięć mikrokontrolera - można go ściągnąć z Elporta-lu. Na początku pętli głównej znajdują się procedury odmierzania czasu i algorytm dekodowania rozkazów RC5. Odmierzanie czasu dla algorytmu dekodującego polega na odczytywaniu zawartości stanu rejestru TCNTO ti-mera TimerO. Timer jest taktowany
preskalerem zaprogramowanym na ......—
dzielenie częstotliwości zegara systemowego przez 16, dzięki czemu inkrementacja następuje co 53,3ps.
Czasy RC5REF] i RC5REF2 zostały. dla uproszczenia, ustawione na sztywno, choć w nocie AVR410 są one obliczane na podstawie długości bitu startu.
Dekodowanie sygnału RC5 polega na próbkowaniu stanu wejścia PB2.
Najpierw oczekujemy przez czas RC5 REFO (ok. 3,5ms) na
ustabilizowanie się linii. Podczas poprawnej komunikacji odstęp między paczkami wynosi kilkadziesiąt milisekund, a długość bitu ok. 1,8ms, zatem odczekanie 3,5ms powinno pozwolić na uniknięcie błędów spowodowanych próbą interpretowania zakłóceń lub ramki „złapanej” w połowie transmisji.
Po ustabilizowaniu się linii czekamy na stan niski, który będzie oznaczał rozpoczęcie ramki, a konkretnie pierwszy z dwóch bitów startu. TimerO zostanie wyzerowany i rozpocznie się odliczanie czasu RC5REFL Po upływie ok. 3/4 długości bitu nastąpi odczytanie stanu linii, co na rysunku 2 jest zaznaczone przerywaną linią. Stan wysoki interpretujemy jako bit o wartości „1” (gdyż za chwilę pojawi się zbocze opadające, które koduje właśnie jedynkę), stan niski zaś interpretujemy jako bit o wartości „0” (gdyż za chwilę pojawi się zbocze narastające, które koduje zero).
Stała czasowa RC5REF2 równa jest ok. 5/4 długości bita. Jeżeli zbocze nie wystąpi między końcem RC5REF1 a końcem RC5REF2 (między zieloną a niebieską linią przerywaną), zostanie to uznane za błąd transmisji i
RC5REF2
l4->;
RC5R5F1 RĆ5REF1 RC5REF1 RC5REF1 RC5REF1
TCNT0=0
Rys. 2
r | |||
i | |||
1 L_ |
] |
L i |
0 -1 |
i
Rys. 1
230V
R1
220/0,5W
F1
OUT
I
R2
R3
47k
C1
W
47k
BR1
100mA
330n/400V
C2 1000u/25V
C3
100n
I
02
BT136
MOC3043
TFMS5360
vcc
Q1
SW1
SW DIP-2
ATtiny 13
1
(MOS!/AINO)PBO
(MISO/INTO)PB1
(SCKflT0)PB2
(XTAL1)PB3 _
(XTAL2)PB4 PBS(Reset)
Re | |
4,' | |
4 |
1 C5 |
JjOr |