37_40.pdf

(191 KB) Pobierz
Uniwersalny R O J ERC5/SIRC
P nadajnik
K T Y
Uniwersalny nadajnik
RC5/SIRC, część 1
AVT−5104
Nadajnik zdalnego
sterowania kojarzy nam siÍ
zazwyczaj z†pude³kiem
z†wieloma klawiszami. Opisy
takich nadajnikÛw by³y
niejednokrotnie publikowane
na ³amach EP. Nadajnik
prezentowany w†artykule ma
nieco odmienn¹ budowÍ, gdyø
nie posiada ani jednego
przycisku, a†moøe
wygenerowaÊ dowolny kod
w†standardzie RC5 oraz
SIRC.
Rekomendacje:
przyrz¹d
szczegÛlnie przydatny do prac
serwisowych przy naprawie
odbiornikÛw telewizyjnych,
magnetowidÛw, odtwarzaczy
DVD i†sprzÍtu audio. Przyda
siÍ takøe wszystkim fanom
eksperymentÛw†ze zdalnym
sterowaniem w†dwÛch
najbardziej popularnych
standardach kodowania.
Nadajnik wspÛ³pracuje z†kom-
puterem poprzez port szeregowy
RS232. DziÍki takiemu rozwi¹za-
niu ma niewielkie wymiary,
a†umoøliwia wys³anie dowolnej
komendy za pomoc¹ klawiatury
komputera lub odpowiedniego op-
rogramowania. DziÍki temu jest
moøliwe sterowanie urz¹dzeniami
znajduj¹cymi siÍ w†innych po-
mieszczeniach, poniewaø komuni-
kacja pomiÍdzy komputerem a†na-
dajnikiem odbywa siÍ poprzez
interfejs RS232, co pozwala na
oddalenie nadajnika od kompute-
ra nawet o†kilkanaúcie metrÛw.
Wys³anie komendy odbywa siÍ za
pomoc¹ znakÛw ASCII, wiÍc ob-
s³uga nadajnika moøe byÊ wyko-
nywana przez dowolny program
terminalowy - na przyk³ad Hyper-
Terminal - w†ktÛry wyposaøony
jest kaødy system Windows.
Obs³uga dwÛch systemÛw ko-
dowania informacji umoøliwia ste-
rowanie prac¹ wiÍkszoúci urz¹-
dzeÒ elektronicznych. Bardzo po-
pularny system RC5 jest stosowa-
ny przez wiele firm, miÍdzy
innymi przez firmÍ Philips, a†sys-
tem SIRC g³Ûwnie przez firmÍ
Sony. W†systemie RC5 sygna³y
nadawane s¹ z†sygna³em noúnym
o†czÍstotliwoúci 36 kHz, a†w†sys-
temie SIRC czÍstotliwoúÊ ta wy-
nosi 40 kHz. Zastosowanie w†na-
dajniku mikrokontrolera umoøli-
wia ³atwe dobranie tej czÍstotli-
woúci w†zaleønoúci od systemu,
w†ktÛrym jest wysy³ana komenda.
Prze³¹czanie pomiÍdzy systemami
dokonuje siÍ poprzez naciúniÍcie
jednego klawisza. Jeúli kolejne
komendy bÍd¹ wysy³ane w†tym
samym systemie, to nie trzeba
ponownie wybieraÊ systemu. RÛw-
nieø powtÛrzenie tej samej ko-
mendy nie wymaga ponownego jej
wpisywania, gdyø znajduje siÍ
w†pamiÍci i†wystarczy tylko po-
nowne jej zatwierdzenie.
Poniewaø sposÛb transmisji da-
nych w†obydwu systemach jest
rÛøny, wiÍc dla obu systemÛw
zosta³y opracowane odmienne pro-
cedury. SposÛb kodowania da-
nych dla systemu RC5 przedsta-
wiono na
rys. 1.
Tajniki RC5
W†tym systemie kaødy rozkaz
sk³ada siÍ z†14 bitÛw. RozpoczÍ-
cie transmisji nastÍpuje po dwÛch
bitach startu (S1, S2) - obydwa
bity maj¹ wartoúÊ ì1î. NastÍpnie
wysy³any jest bit kontrolny (CB).
Bit kontrolny pozwala okreúliÊ,
czy naciúniÍty przycisk na pilo-
cie jest przytrzymywany, czy zo-
sta³ naciúniÍty ponownie. Gdy
przycisk jest przytrzymywany, to
wysy³ane s¹ kolejne sygna³y i†bit
ten ma tak¹ sam¹ wartoúÊ. Jeúli
przycisk zosta³ zwolniony i†po-
nownie naciúniÍty, to bit kontrol-
ny zmieni stan na przeciwny.
NastÍpnie jest wysy³any adres
urz¹dzenia, do ktÛrego jest skie-
rowana komenda. Adres ten sk³a-
da siÍ z†piÍciu bitÛw, co pozwala
wybraÊ 32 urz¹dzenia. W†nastÍp-
nym etapie wysy³anych jest 6
Elektronika Praktyczna 3/2003
37
Uniwersalny nadajnik RC5/SIRC
wnÍtrzn¹ pamiÍci¹ Flash o†pojem-
noúci 1k x†14 b. DziÍki zastoso-
waniu mikrokontrolera, wszystkie
operacje zwi¹zane z†odbieraniem
i†wysy³aniem danych s¹ wykony-
wane programowo, w†zwi¹zku
z†czym nie ma potrzeby stosowa-
nia dodatkowych uk³adÛw. Do
procesora do³¹czono zewnÍtrzny
rezonator kwarcowy o†czÍstotli-
woúci 20†MHz, wskutek czego
cykl maszynowy wynosi tylko 200
ns. Pozwala to na bardzo dok³ad-
ne ustalenie czÍstotliwoúci gene-
rowanych sygna³Ûw noúnych po-
trzebnych do wysy³ania sygna³Ûw
zdalnego sterowania.
Wejúcie procesora przeznaczo-
ne do zerowania (!MCLR) nie
zosta³o wykorzystane, poniewaø
sygna³ zerowania po w³¹czeniu
zasilania jest generowany we-
wn¹trz mikrokontrolera. Jako na-
dajniki promieniowania podczer-
wonego pracuj¹ diody D2 i†D3.
Diody te s¹ sterowane przez pro-
cesor za pomoc¹ wzmacniacza
zbudowanego z†tranzystora T1. Re-
zystor R1 ogranicza pr¹d p³yn¹cy
przez diody, a†R2 pr¹d bazy tran-
zystora T1. Do sygnalizacji pracy
nadajnika zastosowano diodÍ D4.
Po kaødym wys³aniu komendy
dioda b³yúnie. RÛwnoczeúnie syg-
na³ zasilaj¹cy diodÍ D4 jest do-
prowadzony, poprzez rezystor R5,
do z³¹cza CON2. Po³¹czenie to
sprawia, øe†po wys³aniu wybranej
komendy, jej numer zostanie wy-
s³any z†powrotem do komputera
i†bÍdzie moøna sprawdziÊ, czy
komenda zosta³a wpisana prawid-
³owo. Komunikacja z†komputerem
odbywa siÍ z†prÍdkoúci¹ 9600 bd.
Wysy³ane dane do komputera nie
s¹ dopasowane napiÍciowo do
norm standardu RS232, gdyø sta-
nowi ì0î odpowiada 0†V, a†sta-
nowi ì1î napiÍcie 5†V. Uk³ady
obs³uguj¹ce porty szeregowe
Rys. 1. Przebiegi czasowe sygnałów podczas wysyłania rozkazu w systemie RC5
bitÛw komendy, co umoøliwia
wys³anie 64 rÛønych poleceÒ.
Kaødy zakodowany bit w†tym
systemie trwa 1,776 ms i†sk³ada
siÍ z†dwÛch czÍúci - 888
µs
przerwy (poziom niski) i†888
µs
impulsu (poziom wysoki). Czy
wys³any bit jest jedynk¹, czy
zerem okreúla pierwsza czÍúÊ ko-
dowanego bitu - jest zerem lub
jedynk¹. Jeúli ta czÍúÊ bitu jest
jedynk¹, to poprzez diody na-
dawcze emitowany jest sygna³
o†czÍstotliwoúci 36 kHz, jeøeli
czÍúÊ bitu jest zerem, to øaden
sygna³ nie jest emitowany.
Aby wys³aÊ bit, interpretowany
przez odbiornik jako ì1î, naleøy
przez pierwsze 888
µs
wy³¹czyÊ
diodÍ nadawcz¹, a†przez 888
µs
wysterowaÊ j¹ sygna³em o†czÍstot-
liwoúci 36 kHz. W†przypadku wy-
sy³ania logicznego ì0î, jest od-
wrotnie, przez pierwsze 888
µs
naleøy sterowaÊ diodÍ nadawcz¹
sygna³em o†czÍstotliwoúci 36kHz,
a†przez nastÍpne 888
µs
pozosta-
wiÊ diodÍ wy³¹czon¹. W†ten spo-
sÛb naleøy wys³aÊ wszystkie bity
transmitowanego rozkazu.
nego bitu startu i†12 bitÛw da-
nych. Moøna wybraÊ 32 urz¹dze-
nia i†128 komend. Po wys³aniu
bitu startu nastÍpuje przerwa
o†d³ugoúci 0,6 ms, nastÍpnie wy-
sy³ane jest siedem bitÛw komen-
dy, poczynaj¹c od bitu najmniej
znacz¹cego. Po wys³aniu komendy
wysy³ane jest piÍÊ bitÛw adresu
urz¹dzenia. SposÛb kodowania sta-
nÛw logicznych polega na tym,
øe†dla zera logicznego transmito-
wany jest przebieg o†czÍstotliwoú-
ci 40 kHz przez czas 0,6 ms, a†dla
jedynki logicznej przez czas 1,2
ms. Dodatkowo, pomiÍdzy kolej-
nymi bitami nastÍpuje przerwa
w†transmisji o†czasie 0,6 ms. Ze
wzglÍdu na zrÛønicowany czas
trwania stanu zera logicznego i†je-
dynki, wys³anie ca³ego pakietu
danych nie zajmuje za kaødym
razem tyle samo czasu. Jest on
zaleøny od wartoúci poszczegÛl-
nych bitÛw adresu urz¹dzenia
i†komendy.
Budowa i†dzia³anie
nadajnika
Schemat elektryczny nadajnika
przedstawiono na
rys. 3.
Sk³ada
siÍ on zaledwie z†kilku elemen-
tÛw, gdyø wszystkie niezbÍdne
funkcje pe³ni uk³ad US1. Uk³ad
ten jest mikroprocesorem z†we-
Tajniki SIRC
SposÛb kodowania w†systemie
SIRC jest przedstawiony na
rys.
2.
Kaødy rozkaz sk³ada siÍ z†jed-
Rys. 2. Przebiegi czasowe podczas wysyłania rozkazu w systemie SIRC
38
Elektronika Praktyczna 3/2003
Uniwersalny nadajnik RC5/SIRC
w†komputerach rozpoznaj¹ prawi-
d³owo tak okreúlone stany logicz-
ne. Sygna³y z komputera do mik-
rokontrolera rÛwnieø nie s¹ do-
pasowane napiÍciowo, ale do za-
bezpieczenia procesora wystarczy
ograniczyÊ pr¹d wejúciowy przez
rezystor szeregowy R4. Na wyjúciu
portu szeregowego komputera wy-
stÍpuj¹ napiÍcia +12 V†lub -12 V.
Zastosowanie rezystora R4 w†po-
³¹czeniu z†wewnÍtrznymi diodami
zabezpieczaj¹cymi, zawartymi
wewn¹trz procesora, powoduje, øe
napiÍcie wiÍksze od VCC+0,4V
jest zwierane do plusa, a†napiÍcie
mniejsze od GND-0,4V jest zwie-
rane do masy, w†konsekwencji na
wejúciu procesora wystÍpuj¹ bez-
pieczne wartoúci napiÍÊ: -0,4V
lub 5,4V. Takie sprzÍøenie nadaj-
nika z†portem szeregowym znacz-
nie uproúci³o jego budowÍ. Do
stabilizowania napiÍcia zasilaj¹ce-
go zastosowano uk³ad US2, ktÛry
wraz z†kondensatorami C1...C3 do-
starcza odfiltrowanego napiÍcia
o†wartoúci 5V.
Rys. 3. Schemat elektryczny uniwersalnego nadajnika RC5/SIRC
Transmisja danych w†podczer-
wieni polega na odebraniu przez
procesor cyfr kodu, przetworzeniu
tych cyfr na kod systemu RC5 lub
SIRC i†odpowiednim wysterowa-
niem tranzystora steruj¹cego dio-
dami nadawczymi. Po wys³aniu
List. 1. Procedury służące do wysłania dowolnego kodu w systemie RC5
//************************************************************************//
// wysyla logicze zero f=36kHz kwarc 20MHz
//
//************************************************************************//
stan_0()
{int i;
led_ir=0;
//wylacz diode
for(i=32;i>0;i-)
//powtorz 32 razy
{led_ir=1;
delay_us(13);
//stan wysoki 13us
delay_cycles(4);
//+800ns=13,8us
led_ir=0;
delay_us(13);
//stan niski 13us
delay_cycles(1);
//+200ns=13,2us+3cykle=13,8us
}
//13,2+(3*200)=13,8us
delay_us(875);
//875+13=888us
}
//************************************************************************//
//************************************************************************//
// wysyla logiczna jedynke f=36kHz kwarc 20MHz
//
//************************************************************************//
stan_1()
{int i;
led_ir=0;
delay_us(888);
for(i=32;i>0;i-)
//powtorz 32 razy
{led_ir=1;
//zapal diode
delay_us(13);
//czekaj 13us
delay_cycles(4);
//+800ns=13,8us
led_ir=0;
//zgas diode
delay_us(13);
//stan niski 13us+3cykle przez licznik
delay_cycles(1);
//+200ns+600ns=13,8us
}
//razem 2*13,8=27,6us=36,2khz
}
//************************************************************************//
//************************************************************************//
// Wysyla podana sekwencje w rc5
//
// toggle=1
//
// address 0-31
//
// command 0-63
//
//************************************************************************//
RC5_send(int address, int command)
{ int ii;
address|=0b11100000;
command<<=2;
for(ii=0;ii<=7;ii++)
//wysyla address+2bity startu =1,
{
//+ togglebit=1
address<<=1;
//przesun w lewo o jeden
if(bit_test(status,0)) stan_1(); //jesli c=1 to stan_1()
else stan_0();
//jesli 0 to stan_0()
}
for(ii=0;ii<=5;ii++)
//wysyla 5bitow command
{
command<<=1;
//przesun w lewo o jeden
if(bit_test(status,0)) stan_1(); //jesli c=1 to stan_1()
else stan_0();
//jesli 0 to stan_0()
}
}
//************************************************************************//
podanego kodu do komputera zo-
staje wys³ana zwrotna informacja,
jaki kod zosta³ wyemitowany.
Jak wczeúniej wspomniano,
obydwa systemy kodowania infor-
macji rÛøni¹ siÍ miÍdzy sob¹. Do
ich obs³ugi trzeba wiÍc zastosowaÊ
rÛøne procedury.
Na
list. 1
przedstawiono pro-
cedury wysy³ania danych w†sys-
temie RC5, przy zastosowaniu
rezonatora kwarcowego o†czÍstot-
liwoúci 20 MHz. G³Ûwn¹ proce-
dur¹ jest procedura
RC5_send(int
address, int command).
Przyk³a-
dowo, aby wys³aÊ do urz¹dzenia
o†numerze 10 komendÍ o†numerze
36, naleøy wywo³aÊ tÍ procedurÍ
z†parametrem:
RC5_send(10,36),
w†wyniku czego zostan¹ wys³ane
wszystkie bity rozkazu. Procedura
ta do³¹cza bity startu i†bit kon-
trolny, tworz¹c pe³n¹ ramkÍ da-
nych zgodn¹ z†wymaganiami RC5.
WartoúÊ parametru adresu urz¹-
dzenia musi zawieraÊ siÍ w†prze-
dziale 0...31, a†parametr komendy
w†0...63. Procedura
RC5_send
sprawdza wszystkie bity otrzyma-
nych parametrÛw i†w†zaleønoúci
od tego, czy sprawdzany bit jest
jedynka, czy zerem, zostaje wy-
konana procedura
stan_1()
lub
stan_0().
Sprawdzenie stanu bitu
polega na przesuniÍciu w†lewo
ca³ego bajtu, wtedy najstarszy bit
znajdzie siÍ w†rejestrze
STATUS
jako bit
C
i†dopiero wtedy moøna
sprawdziÊ stan tego bitu. Taka
operacja jest wykonywana dla
wszystkich bitÛw adresu urz¹dze-
nia lub komendy. W†systemie RC5
najpierw jest wysy³any adres urz¹-
Elektronika Praktyczna 3/2003
39
Uniwersalny nadajnik RC5/SIRC
dzenia poczynaj¹c od najstarszego
bitu, a†nastÍpnie numer komendy
rÛwnieø od bitu najstarszego. Pro-
cedury
stan_0()
i†stan_1() odpo-
wiednio steruj¹ diodami nadaw-
czymi, zgodnie z†wymaganiami
standardu - czas trwania bitu
1,788 ms, czÍstotliwoúÊ 36 kHz.
Wys³anie jedynki logicznej (pro-
cedura
stan_1())
powoduje wy-
³¹czenie diody nadawczej na 888
µs,
a†nastÍpnie przez kolejne 888
µs
dioda jest sterowana sygna³em
o†czÍstotliwoúci 36 kHz. Wys³anie
zera logicznego (procedura
stan_0())
powoduje natomiast
przez pierwsze 888
µs
sterowanie
diody sygna³em o†czÍstotliwoúci
36kHz, a†przez kolejne 888
µs
dioda jest wy³¹czona.
Do transmisji w†systemie SIRC
stosowane s¹ procedury przedsta-
wione na
list. 2.
G³Ûwn¹ proce-
dur¹ jest procedura
Sony_send(int
address, int command).
Podobnie
jak w†przypadku wysy³ania da-
nych w†systemie RC5, procedurÍ
naleøy wywo³aÊ z†parametrami
okreúlaj¹cym adres urz¹dzenia
i†komendÍ. Dla standardu SIRC
adres urz¹dzenia moøe zawieraÊ
siÍ w†przedziale 0...31, a†komenda
w†0...127. Po wywo³aniu tej pro-
cedury nastÍpuje wys³anie bitu
startu, a†nastÍpnie komendy i†ad-
resu urz¹dzenia. Procedura wysy-
³a pe³na ramkÍ danych wraz
z†przerwami pomiÍdzy kolejnymi
bitami. W†systemie SIRC w†pier-
wszej kolejnoúci wysy³any jest
WYKAZ ELEMENTÓW
Rezystory
R1: 4,7Ω
R2: 1kΩ
R3: 330Ω
R4: 22kΩ
R5: 220Ω
Kondensatory
C1, C2: 47µF/16V
C3: 100nF
C4, C5: 30pF
Półprzewodniki
D1: 1N4007
D2, D3: dowolna dioda
nadawcza w podczerwieni
D3: LED 5mm czerwona
T1: BC337−25
US1: PIC12F629 zaprogramowany
US2: LM7805
Różne
CON1: ARK2(3,5mm)
CON2: DB9 żeńskie
X1: rezonator kwarcowy 20MHz
Podstawka DIP8
List. 2. Procedury służące do wysyłania danych w systemie SIRC
//************************************************************************//
//wysyla logicze zero f=40kHz,kwarc 20MHz
//
//stan1 nadawanie przez 0,6ms
//
//dla f=40kHz cykl=25uS, dla 0,6ms trzeba powtorzyc 24razy
//************************************************************************//
sony_stan_0()
{int i;
led_ir=0;
for(i=24;i>0;i-)
{led_ir=1;
delay_us(12);
delay_cycles(2);
led_ir=0;
delay_us(12);
}
//zgas diode
//powtorz 24razy
//zapal diode
//zapal na 12us
//+400ns =12,4us
//zgas diode
//zgas na 12us +600ns=12,6us
//
}
//************************************************************************//
//************************************************************************//
//wysyla logiczna jedynke f=40kHz,kwarc 20MHz
//
//stan1 nadawanie przez 1,2ms
//
//dla f=40kHz cykl=25uS, dla 1,2ms trzeba powtorzyc 48razy
//************************************************************************//
sony_stan_1()
{int i;
led_ir=0;
//zgas diode
for(i=48;i>0;i-)
//powtorz 48 razy
{led_ir=1;
//zapal diode
delay_us(12);
//na 12us
delay_cycles(2);
//+400ns=12,4ns
led_ir=0;
//zgas diode
delay_us(12);
//na 12us+3cykle=12,6us
}
}
//************************************************************************//
//************************************************************************//
//opozninienie pomiedzy bitami
600us
//
//************************************************************************//
sony_delay()
{
led_ir=0;
delay_us(599);
}
//************************************************************************//
//************************************************************************//
//************************************************************************//
// wysyla kod podany jako parametr
//
//address-adres urzadzenia 0-31, command-komenda 0-127
//
//************************************************************************//
sony_send(int address, int command)
{ int ii;
sony_stan_1();
//bit startu I \_2,4ms
sony_stan_1();
//bit startu II/
sony_delay();
//delay 0,6ms
for(ii=0;ii<=6;ii++)
//wysyla 7 bitow command
{
command>>=1;
//przesun w prawo
if(bit_test(status,0)) sony_stan_1();
//jeśli 1 to sony_stan_1()
else sony_stan_0();
//jeśli 0 to sony_stan_0()
sony_delay();
//przerwa miedzy bitami
}
for(ii=0;ii<=4;ii++)
//wysyla 5 bitow adresu
{
address>>=1;
//przesun w prawo
if(bit_test(status,0)) sony_stan_1();
//jeśli 1 to sony_stan_1()
else sony_stan_0();
//jeśli 0 to sony_stan_0()
sony_delay();
//przerwa miedzy bitami
}
}
//************************************************************************//
//
numer komendy, poczynaj¹c od
najm³odszego bitu, a†nastÍpnie ad-
res urz¹dzenia, rÛwnieø od naj-
m³odszego bitu. Podobnie jak
w†przypadku systemu RC5, spraw-
dzane s¹ wszystkie bity adresu
i†komendy, i†w†zaleønoúci od ich
wartoúci wykonywane s¹ procedu-
ry:
sony_stan_1()
- dla jedynki
logicznej i†sony_stan_0() - dla ze-
ra logicznego. Kodowanie jedynki
logicznej polega na wysy³aniu
przebiegu o†czÍstotliwoúci 40 kHz
przez czas 1,2 ms. Realizuje to
procedura
sony_stan_1().
Ponie-
waø okres sygna³u o†czÍstotliwoú-
ci 40 kHz wynosi 25
µs,
to do
odliczenia czasu 1,2 ms naleøy
wykonaÊ 48 b³yúniÍÊ diod¹ na-
dawcz¹. Podczas wysy³ania lo-
gicznego zera dioda musi b³yskaÊ
przez 0,6 ms. Realizuje to proce-
dura
sony_stan_0()
- w czasie 0,6
ms dioda b³yúnie 24 razy. PomiÍ-
dzy kolejnymi bitami musi byÊ
przerwa w†transmisji wynosz¹ca
0,6 ms. Jest ona realizowana przez
procedurÍ
sony_delay().
Krzysztof P³awsiuk, AVT
krzysztof.plawsiuk@ep.com.pl
Wzory p³ytek drukowanych w for-
macie PDF s¹ dostÍpne w Internecie
pod adresem:
http://www.ep.com.pl/
?pdf/marzec03.htm
oraz na p³ycie
CD-EP3/2003B w katalogu
PCB.
40
Elektronika Praktyczna 3/2003
Zgłoś jeśli naruszono regulamin