`

Lampka kolorowa sterowana pilotem

Postanowiłem skonstruować pewien mały gadżet, mianowicie lampkę wielokolorową. Można cos takiego kupić i to niedrogo. W środku jest dioda świecąca kolorami czerwonym, zielonym i niebieskim, co pozwala, odpowiednio mieszając te barwy, uzyskać właściwie każda inną. Czyli pomysł na pierwszy rzut oka nieciekawy i nudny. A szukałem czegoś oryginalnego, jako, że miał to być mały prezent, ot elektrogadżet typu zrób to sam. Przeglądając fora znalazłem pewną koncepcję urozmaicenia konstrukcji: sterowanie pilotem. Zwykłym pilotem od telewizora. Lampki sprzedawane w sklepach nie mają żadnych możliwości sterowania barwą i jest to ich spora wada. A moja ma i działa to bardzo skutecznie.

Projekt
Sercem ustrojstwa jest mikrokontroler z rodziny AVR - tym razem całkiem malutki - ATtiny2313. Ma tylko 2kB flashu, ale za to 3 liczniki i aż 4 kanały PWM. I tu był klucz do sukcesu. Dioda jest sterowana modulacją szerokości impulsu (czyli właśnie Pulse Width Modulation). Na czym to polega? Otóż na wybranym porcie mikrokontrolera jest generowany przebieg prostokątny, częstotliwość jego jest stała, w przypadku mojej lampki wynosi ona ok. 15kHz. Zmienia się natomiast szerokość impulsu, czyli stosunek czasu występowania "1" do czasu występowania "0". Im dłużej trwa "0" a krócej "1" tym dana dioda świeci jaśniej. Wynika to poniekąd ze schematu. Za generację tych przebiegów odpowiada licznik procesora i dzieje sie to całkowicie sprzętowo. Dzięki temu, procesor ma czas na odbieranie sygnałów z pilota. I to wszystko. Procesor pracuje z zegarem 4MHz.
Pilot użyty do urządzenia generuje kod RC5. Jest to standard zaproponowany i stosowany przez Philipsa. Użyłem go dlatego, że jest dobrze opisany i ogólnie znany. Poza tym piloty RC5 są tanie i łatwo dostępne. Generalnie jest to sygnał oparty na nośnej 36kHz z zakodowanym 14-bitowym słowem. Dekodowanie sygnału do postaci cyfrowej załatwia zintegrowany czujnik, u mnie TFMS5630. Dalej już zajmuje się tym procesor. Cale słowo odbierane jest w procedurze przerwania. Jest to sygnał asynchroniczny o określonej częstotliwości, więc trzeba się jakoś wstrzelić w czas i odpowiednio próbkować sygnał. I tutaj pojawiły się problemy. Gotowe procedury wykorzystywały licznik, działało to dobrze, ale kiedy to licznik musiał oprócz generowanie PWM robić jeszcze jedna rzecz (na przerwaniach overflow), rzecz się zawieszała. I nie bardzo wiedziałem dlaczego. Próba druga: odpowiednie opóźnienia uzyskiwane programowo. I znów na 14 bitach gdzieś się rozjeżdżało (wina programowania w C, w asemblerze na pewno by się udało). w końcu trzecia próba i sukces. Otóż sygnał jest zakodowany kodem Manchester. Oznacza to, że poziomy logiczne są kodowane nie stanami a zboczami. W środku każdego bitu występuje zmiana stanu, zależnie od wartości bitu z wysokiego na niski, lub odwrotnie. a jest to właśnie po to, żeby można było zsynchronizować zegar odbiornika w każdej chwili. I tak właśnie zrobiłem.
Sygnał z pilota jest zbudowany z: 3 bitów kontrolnych, 5 bitów kodujących typ urządzenia i 6 bitów kodujących polecenie - razem 14.
Dekodowane jest tylko 6 ostatnich bitów. Zatem równie dobrze zadziała pilot od video, TV czy wieży, byle Philipsa.

Budowa
Schemat:

Użyłem diody ze wspólną anodą, zasilana jest bezposrednio z portów ATtiny. Oporniki 150 omów ograniczają prąd. Port Tiny wytrzyma podczas statycznej pracy jakieś 10mA, w impulsie duzo więcej. Jest to tak tutaj dobrane, że portom tiny nic zlego nie grozi.jeśli użyłbym 3 tranzystorów uzyskałbym większe prady na diodzie, (dioda zniesie do 30mA na kolor) i mogłby to swiecić trochę jaśniej. Jednak dążyłem do zminiaturyzowania konstrukcji, a swieci i tak nieźle.
Zmontowałem całość na płytce uniwersalnej, wyszło dość niewielkie. Zapakowałem do pudełka od kasety magnetofonowej. Jako klosza użyłem swiecznika zamontowanego dnem do góry. Zdjęcia:


Nakręciłem też 2 krótkie filmy, które tu można sobie pobrac i zobaczyc lampe w akcji:
Film 1
Film 2

Działanie
Co ciekawego lampka potrafi:
Przyciski vol+/vol-, prog-/prog+, standby/mute służą do regulacji nasycenia każdej barwy. Czyli lampa swieci sobie stale zdefiniowanym kolorem.
Przycisk 1 włącza program pulsowania biały/czarny.
Przycisk 2 włacza program płynnego przejścia przez wszystkie kolory.
Przyciski 4,5 - programy płynnej zmiany barwy zielony/cyan/niebieski oraz czerowny/zółty/zielony.
Przyciski 7, 8, 9 program zmiany czerwony/fioletowy/niebieski w różnym tempie.
Przycisk 0 wyłącza lampkę.
Więcej się nie dało, komplilator pokazuje 99,9% miejsca w procesorze zajetego

Pliki
Tu będzie można pobrać kod do procesora. Chwilowo podlega jeszcze obróbce technicznej.
Dostępny jest za to plik .hex.
Plik hex