Elektronika     Dekoder pilotów IR (ATmega168)        




Jest to uniwersalny dekoder pilotów na podczerwień, który obsługuje 42 protokoły transmisji IR (Infra-
Red). Umożliwia ustalenie nazwy protokołu oraz wartości adresu i rozkazu, wysyłanego przez testowany
pilot po naciśnięciu danego przycisku. Wszystkie informacje są prezentowane na wyświetlaczu LCD
2x16 znaków oraz wysyłane przez interfejs szeregowy USART.
Sercem dekodera jest mikrokontroler ATmega168 lub ATmega328 taktowany rezonatorem kwarcowym
16 MHz. Oba układy mają identyczny rdzeń, różnią się jedynie ilością pamięci. Zamieszczony program
sterujący jest zmodyfikowaną przeze mnie wersją biblioteki "IRMP 3.6.0" (InfraRed Multi Protocol deco-
der + encoder) dla Arduino (https://github.com/ukw100/IRMP). Moje modyfikacje: wybranie 42 obsłu-
giwanych protokołów IR z 57 dostępnych (niektóre nie współpracują ze sobą lub obniżają wydajność
dekodowania), usunięcie pomiaru/wyświetlania co 5s wartości napięcia zasilania, zmiana sposobu pod-
łączenia diody LED i wyświetlacza LCD do mikrokontrolera, zmiana ciągów tekstowych (nazwy proto-
kołów i podawanie ich liczby, wartość adresu/rozkazu). Mój program sterujący wyróżniłem, zmieniając
ciąg tekstowy z jego wersją na "IRMP v3.6.0 (RW)". Kompilację wykonałem w środowisku "Arduino
1.8.19". W archiwum z projektem oprócz wsadów pamięci FLASH, znajdują się zmodyfikowane pliki
źródłowe biblioteki IRMP.
Kolejnym kluczowym elementem dekodera jest odbiornik podczerwieni IR1. Płytka jest przystosowana
do użycia 3 rodzajów czujników z różnym rozkładem wyprowadzeń (montujemy tylko jeden z nich):
IR1a - 3-piny w odległości 2.54mm, 1/2/3 = OUT/GND/VCC (np. TSOP18xx/18Xxx/34Xxx/38Xxx/41xx/
43xx/44xx/45xx/48xx), IR1b - 3-piny w odległości 2.54mm, 1/2/3 = OUT/VCC/GND (np. TSOP21xx/
22xx/23xx/24xx/25xx/32Xxx) lub IR1c - piny 1-2 w odległości 2.54mm, pin 3 oddalony o 5.08mm,
1/2/3 = GND/VCC/OUT (np. TSOP17xx/31Xxx).
Odbiorniki występują w wersjach przyjmujących sygnał IR o konkretnej częstotliwości "xx" = 30-56 kHz
(np. TSOP1830 = 30 kHz, TSOP32336 = 36 kHz, TSOP31456 = 56 kHz), ale z pewnym marginesem.
W sprzęcie RTV najczęściej spotyka się piloty/czujniki pracujące na częstotliwości 36-38 kHz. W mo-
delowym urządzeniu zamontowałem czujnik wylutowany ze starego dekodera DVB-T. Nie ma on żad-
nych oznaczeń, ale posiada 3-piny 2.54mm więc rozkład wyprowadzeń sprawdziłem na płytce druko-
wanej dekodera DVB-T. Wystarczy ustalić położenie masy - jeśli jest na środkowym pinie, to czujnik
ma rozkład wyprowadzeń zgodny z IR1a, w przeciwnym wypadku IR1b. Jeśli nie mamy dostępu do pły-
tki drukowanej, z której pochodzi czujnik, to istnieje inny sposób. Każdy odbiornik IR ma wyjście typu
otwarty kolektor (OC - Open Collector), o maksymalnej wydajności prądowej 5mA. Wyjście (OUT) jest
podciągnięte wewnętrznym rezystorem 30k (80k dla TSOP17xx) do plusa napięcia zasilania (VCC).
Wystarczy ustalić omomierzem, pomiędzy którymi pinami znajduje się ten rezystor, aby poznać poło-
żenie masy (GND).
Sygnał z odbiornika IR1 przez rezystor R2 (ogranicza prąd wyjściowy do 5mA) trafia na wyprowadzenie
PD2 mikrokontrolera. Tam jest próbkowany z częstotliwością 20 kHz (zmienna "F_INTERRUPTS =
20000"). Jest to wartość maksymalna, ale wymagana do obsługi protokołów "RCMM12/24/32" i "Lego
PF". Dlatego są wyłączone protokoły "Pentax cam" i "Gree air", których maksymalne próbkowanie
wynosi 17 kHz.
Protokół "Fan control" jest wyłączony, bo koliduje z protokołem "Nubert". Protokół "Bang & Olufsen" jest
wyłączony, bo pracuje z częstotliwością 455 kHz - poza zakresem typowych odbiorników IR. Protokoły
"FDC3402 key" i "Netbox key" są wyłączone, bo kolidują z protokołem "Ortek/Hama". Protokół "Roomba
iRobot" jest wyłączony, bo koliduje z protokołem "RC6". Protokoły "Ruwido" i "ACP24 air" są wyłączone,
bo kolidują z protokołem "Denon/Sharp". Protokół "Merlin" jest wyłączony, bo wymaga 32-bitowego
przetwarzania wartości rozkazu zamiast 16-bitowego (zmienna "IRMP_32_BIT = 0"), co obniża ogólną
wydajność dekodowania. Protokół "S100" jest wyłączony, bo koliduje z protokołem "RC5". Protokoły
"Panasonic bea" i "Mitsubishi air" są wyłączone, bo kolidują z protokołem "Kaseikyo". Protokół "T+A RCII
(FM8)" jest wyłączony, bo koliduje z protokołami "Grundig" i "Nokia".
Większość protokołów pracuje na częstotliwości 36-38 kHz. Wyjątkami są: "IR60 (SDA2008)" = 30 kHz,
"T+A RCII (FM8)" = 31.25 kHz, "Thomson" = 33 kHz, "Sony (SIRCS)" = 40 kHz, "Merlin" i "S100" = 56
kHz, "Bang & Olufsen" = 455 kHz. Typowy odbiornik IR 36-38 kHz powinien umożliwić dekodowanie
sygnału 30-40 kHz z testowanego pilota, choć nie ma takiej gwarancji.
Rezystor R3 ogranicza prąd zasilania (ok. 6.5mA) podłączonej do wyprowadzenia PB0 diody LED1,
która swoim świeceniem sygnalizuje odbieranie transmisji z czujnika IR1. Po włączeniu dekodera i po
każdym naciśnięciu przycisku pilota, są wysyłane dane tekstowe przez interfejs szeregowy USART
(złącze CON3) z szybkością 115200 B/s w trybie 8N1 (8-bitów danych, bez bitu parzystości, 1-bit
stopu). Rezystory R4/R5 zabezpieczają wyprowadzenia PD0/PD1 mikrokontrolera, czyli linie RX/TX
interfejsu USART.
Po wlutowaniu wszystkich elementów w typowej kolejności i sprawdzeniu czy nie ma zwarć, wkładamy
mikrokontroler w podstawkę. Włączamy zasilanie i programujemy go odpowiednim wsadem przez złącze
CON5 (ISP), przy użyciu dowolnego programatora ISP (In-System Programming). Złącze to zawiera
sygnały rozmieszczone w standardowy sposób zalecany przez firmę Atmel, a pokazany na schemacie
ideowym.
Kolejnym krokiem jest ustawienie odpowiednich wartości fuse i lock bitów, które dla mikrokontrolera
ATmega168/328 powinny wynosić: FL (Fuse Low) = $F7, FH (Fuse High) = $DF/$D9, FE (Fuse Exten-
ded) = $F9/$FF, LB (Lock Bits) = $FF. Po zaprogramowaniu mikrokontrolera odłączamy programator,
podłączamy wyświetlacz LCD do złącza CON4, włączamy zasilanie i potencjometrem P1 ustawiamy
odpowiedni kontrast wyświetlacza LCD tak, aby znaki były dobrze widoczne. Ponieważ złącze ISP
znajduje się pod wyświetlaczem, musi on być odłączany przy każdym programowaniu.
Dekoder można zasilać napięciem stałym DC=7-12V przez złącze CON2 (DC-Jack, plus w środku wty-
czki) lub CON1 (goldpin) z zasilacza lub z baterii/akumulatorów, ale nie z tych dwóch źródeł jednocze-
śnie. Dioda D1 zabezpiecza przed odwrotną polaryzacją napięcia zasilania (występuje na niej spadek
300mV przy prądzie do 100mA). Modelowy dekoder z niebieskim wyświetlaczem LCD z podświetleniem
przy napięciu DC=9V, pobierał prąd 37mA w stanie spoczynku (bez wyświetlacza 22mA).
Zmontowałem go na płytce jednostronnej o wymiarach 82x60mm (bez zworek), wykonanej metodą
transferu chemicznego. W rogach płytki znajdują się cztery otwory montażowe o średnicy 3mm, dzięki
którym dekoder można przykręcić do obudowy lub zamontować w nich jakieś nóżki w przypadku jej
braku. Dwa dodatkowe otwory 3mm na środku płytki służą do przymocowania tulejek dystansowych
(wysokość 11-12mm), do których można przykręcić wyświetlacz LCD.

Obsługa dekodera pilotów IR

Po włączeniu zasilania na wyświetlaczu pojawią się dwa napisy: "IRMP v3.6.0 (RW)" z wersją programu sterującego
oraz "Protocols: 42" z liczbą obsługiwanych protokołów transmisji IR (rys. 1). Jednocześnie przez interfejs USART
zostaną wysłane dwie linie tekstu: "Starting IRMP v3.6.0 (RW)" z wersją programu sterującego oraz "Supported IR
protocols (42): Sony (SIRCS), NEC, Samsung, Matsushita, Kaseikyo, RECS80, RC5, Denon/Sharp, RC6, Samsung32,
Apple, RECS80Ext, Nubert, Grundig, Nokia, Siemens, RC Car, JVC, RC6A, Nikon cam, IR60 (SDA2008), Kathrein,
NEC16, NEC42, Lego PF, Thomson, Bose, A1 TV Box, Telefunken, RCMM32, RCMM24, RCMM12, Speaker, LG air,
Samsung48 air, Technics, Vincent, SamsungAH, IRMP16, Metz, Onkyo, Melinera." z liczbą i nazwami wszystkich
obsługiwanych protokołów.

Po każdym naciśnięciu przycisku pilota na wyświetlaczu pojawią się następujące informacje: nazwa protokołu ("P=")
oraz 16-bitowe szesnastkowe wartości zdekodowanego adresu ("A=") i rozkazu ("C=") danego przycisku (rys. 2). Jeśli
w bardzo krótkim czasie zostanie ponownie naciśnięty ten sam przycisk lub będzie on ciągle wciśnięty, to za wartością
rozkazu pojawi się litera "R" (rys. 3). Kolejne pojedyncze naciśnięcie tego samego lub innego przycisku, spowoduje
zniknięcie litery "R". Jeśli protokół nie zostanie rozpoznany, to wyświetli się napis "P=Unknown", a wartość adresu
i rozkazu będzie wynosić "0000" (rys. 4). Jednocześnie przez interfejs USART zostaną wysłane te same informacje,
ale w postaci jednej linii tekstu.

W nazwie protokołu może znajdować się dodatkowe słowo, które oznacza protokół pilota do: "air" - klimatyzatora (air
conditioner), "bea" - projektora (beamer), "cam" - aparatu fotograficznego (camera), "key" - klawiatury (keyboard).
Jeśli użyty odbiornik IR jest sprawny, to bez problemu dekoduje transmisję z pilota nadającego w przeciwnym kierunku
(fale podczerwieni odbijają się od ścian i przedmiotów w pomieszczeniu). Dużą zaletą urządzenia jest to, że sygnalizuje
działanie pilota na trzy sposoby jednocześnie: prezentując informacje na wyświetlaczu LCD, wysyłając je przez port
USART oraz migając diodą LED. Kolejnym atutem jest możliwość dodawania obsługi nowych protokołów transmisji IR,
co zapewne będzie realizowane wraz z rozwojem biblioteki IRMP.



Rysunek 1


Rysunek 3

Rysunek 2


Rysunek 4


SPIS ELEMENTÓW:

Rezystory:
R1 - 10k
R2 - 1k
R3-R5 - 470

Kondensatory:
C1 - 10u/16V
C2 - 100n/16V
C3, C4 - 100n
C5 - 10u/10V
C6, C7 - 22p

Potencjometry:
P1 - 10k (stojący)
Diody:
D1 - 1N5817
LED1 - czerwona 5mm

Odbiorniki IR:
IR1 - TSOPXXxx (patrz opis)

Rezonatory:
X1 - kwarcowy 16 MHz (niski)

Układy scalone:
U1 - ATmega168 lub 328
U2 - LM1117-5.0
Przełączniki:
S1 - 2 pozycje, 1 sekcja (ON/OFF)

Złącza:
CON1, S1 - goldpin 2x1 (męskie)
CON2 - gniazdo zasilania DC-Jack
CON3 - goldpin 3x1 (żeńskie)
CON4 - goldpin 16x1 (żeńskie), wysokość 8-9mm nad PCB
CON5 - goldpin 3x2 (męskie)

Inne:
U1 - podstawka DIP28 zwykła (wąska)
CON4 - wyświetlacz LCD 2x16 znaków z przylutowaną listwą
              kołkową goldpin 16x1, o wysokości 9mm nad PCB.
2x tuleja dystansowa z gwintem wewnętrznym M2-M3,
     wysokość 11-12mm nad PCB.
4x śruba M2-M3, długość gwintu 4-6mm