You are on page 1of 3

Czy

ktokolwiek
z
Was,
uytkownikw
komputera,
nie
odczuwa nigdy potrzeby sterowania
swoim PCtem z pewnej odlegoci,
np. z ka czy biurka? Czy nigdy
nie musielicie podchodzi do
komputera tylko po to, eby
przeczy suchan empetrjk
czy zmieni kana TV? Przykadw
zastosowania pilota komputerowego
mona wymienia wiele, ale czy
takie urzdzenie da si zrobi
maym nakadem si i kosztw?
Oczywicie! Z pomoc, jak zwykle
w takich przypadkach, przychodz
mikroprocesory i dobrze znany nam
pakiet BASCOM.

Opis ukadu
Omawiane urzdzenie jest do
nietypowe, mianowicie udaje klawiatur
po otrzymaniu odpowiednich instrukcji od
pilota. Jak zwykle w przypadku
stosowania techniki mikroprocesorowej,
ukad pod wzgldem budowy jest bardzo
prosty.
Jego
schemat
ideowy
przedstawiony zosta na rysunku 1. Caa
inteligencja mieci si w gwnym
ukadzie
scalonym,
ktrym
jest
mikrokontroler
AT89C2051.
Ukad

zasilany jest z linii klawiatury, dziki


czemu nie potrzeba zewntrznego
zasilania. Serce ukadu (U1) komunikuje
si z pamici szeregow (U2) po szynie
I2C, odbiera sygnay od scalonego
odbiornika podczerwieni (U3) oraz steruje
czterema
tranzystorami
(T1-T4)
potrzebnymi przy transmisji i dwoma
diodami (D1, D2) sygnalizujcymi, czy
sygna z pilota zosta zinterpretowany czy
odrzucony.
Nasz ukad to jednak nie
wszystko czego potrzebowa bdziemy
do sterowania komputerem. Niezbdny
bdzie jeszcze pilot. No wanie, pilot, ale
jaki? Najlepszym wydaje si by
Minipilot RC5, kit AVT2427 opisany w
EdW 9/2000 na stronie 77. Ma on
wystarczajc liczb przyciskw (16) i
jest stosunkowo tani. Poza tym dokadnie
wiemy, jaki kod odpowiada danemu
przyciskowi (komendy podane zostay na
rysunku 2, adres dla wszystkich
przyciskw
rwny
jest
0),
w
przeciwiestwie do fabrycznych pilotw
uniwersalnych,
ktre
potrafi
zachowywa si rnie.
Po
zaznajomieniu
si
ze
schematem, zajmijmy si prac ukadu
od kuchni. Komenda odebrana od pilota
za porednictwem ukadu U3 wpisywana
jest do pamici szeregowej jako adres, z

Rys. 1

ktrego odczytywany jest bajt. Bajt ten


nie jest niczym innym jak kodem
odpowiadajcym danemu przyciskowi
klawiatury,
ktrego
wcinicie
symulowa
miaa
obsuga
pilota.
Waciwie wiemy ju skd ukad zna kod
klawisza, ale przecie niektre przyciski
(np. strzaki) s klawiszami specjalnymi
i aby je wywoa, trzeba przed ich kodem
wysa komputerowi poprzednik klawisza
specjalnym (szesnastkowo E0). Problem

Rys. 2
ten mona rozwiza cakiem prosto.
Poniewa pilot moe przesya komendy

Pilot komputerowy

od 0-63, poowa pamici U2 ley


odogiem. Nic nie stoi na przeszkodzie,
aby wykorzysta t cz pamici na
rzecz klawiszy specjalnych. W tym celu,
w
nieuywanej
dotd
przestrzeni
adresowej od 63 do 127, zapisujemy kody
odpowiadajce klawiszom specjalnym
pod adresami bdcymi komend
powikszon o 64. Rozpatrzmy teraz
zachowanie ukadu, gdy otrzyma on
komend dotyczc klawisza specjalnego.
Najpierw mikrokontroler sprawdza, czy
pod adresem odpowiadajcym komendzie
znajduje si jaki kod. Kiedy upewni si,
e kodu nie ma (odczyta znak pusty
szesnastkowo FF), to sprawdza, czy pod
adresem o 64 wyszym co jest. Jeli jest,
to ju wie, ze ma to by klawisz specjalny
i
najpierw
przesya
komputerowi
poprzednik klawisza specjalnego, a
dopiero potem kod klawisza odczytany z
danego adresu. Rysunek 3 przedstawia
kody wszystkich klawiszy klawiatury, z
ktrych moemy wybra potrzebne i

podcign lini do napicia zasilania


(T1, T2), a po stronie komputera, w takt
transmisji, zwiera kocwk rezystora
do masy (T3, T4). Ale czy aby na pewno
taki zabieg jest konieczny? Przecie te
linie sterowane s za pomoc bramek typu
otwarty kolektor, wiec czy nie mona po
prostu zwiera danej linii do masy?
Odpowiedz na to pytanie i troch wicej
szczegw
dotyczcych
transmisji
(potrzebnych do napisania programu)
znale mona w EdW 1/2001 na stronie
25. eby si zbytnio nie powtarza,
przypomn jedynie, e linia klawiatury
jest lini dwukierunkow. Wynika z tego,
e rwnie komputer moe przesya
rozkazy klawiaturze (np. zacz / wycz
kontrolk Caps Lock) i dlatego, jeli
strona
klawiatury
nie
zostaaby
podcignita do zasilania, oprcz
komputera, rwnie klawiatura mogaby
odczyta transmisj jako rozkaz dla niej.
W takim przypadku nasz rozkaz zostaby
zakcony przez klawiatur i z transmisji

Internet. Ci, ktrzy maj do niego dostp,


mog zassa program oraz zawartoci
pamici szeregowych do sterowania
rnymi programami spod adresu
http://www.bloknet.pl/~rufus/ pilot.zip, a
ci, ktrzy dobrodziejstwa Internetu nie
zaznali, zadowoli si musz napisaniem
programu samemu lub jego bezmylnym
(?) przepisaniem, ale w kocu pisanie w
BASCOMie to przyjemno!

Monta i uruchomienie
Ukad jest bardzo prosty, wic
monta nie wymaga duej uwagi. Naley
zwrci uwag jedynie na to, aby kable
czce urzdzenie z klawiatur i
komputerem nie byy zbyt dugie. Do
obudowania urzdzenia nadaje si, po
maej obrbce, obudowa Z6. Przedni
ciank zastpi mona prostoktem z
ciemnego, pprzezroczystego pleksi.
Poniewa nasz
ukad udaje klawiatur,
nie bd potrzebne
adne sterowniki aby
go uruchomi. Jest to
gwna
rnica
pomidzy
tym
urzdzeniem a jego
fabrycznymi

Rys. 3
wpisa do pamici U2 wedug szablonu z
rysunku 4 pod adresy odpowiadajce
wybranym przyciskom pilota. Jeli jaki
przycisk ma by nieuywany, to w
miejsce kodu klawisza musimy wpisa
szesnastkowo FF.
Majc pewne pojcie na temat
identyfikacji klawisza, moemy przyjrze
si bliej transmisji. Jak ju wczeniej
wspomniaem, mikrokontroler steruje
kilkoma tranzystorami. To one wanie
zarzdzaj szyn danych (DTA) i zegara
(CLK) komputera, ktrymi zwykle
zajmuje
si
klawiatura.
Mona
powiedzie, e nasze urzdzenie wtrca
si pomidzy klawiatur i komputer.
Takie brutalne dziaanie jest nieuniknione,
poniewa linia klawiatury przystosowana
jest tylko do jednego odbiornika i jednego
nadajnika.
Jak
w
takim
razie
przystosowa transmisj do naszych
potrzeb? Cakiem prosto! Szeregowo w
linie musimy wczy rezystory o
nieduej opornoci (R1 i R2). Teraz
wystarczy ju tylko po stronie klawiatury

Rys. 4
byyby nici.
Teoretycznie wiemy ju jak
ukad powinien dziaa. Brakuje jeszcze
tylko
programu
obsugujcego
mikroprocesor. W dalszej czci artykuu
znajdziecie jego listing w jzyku
BASCOM. Program ten z powodzeniem
obsugiwa
mj
model,
wic
prawdopodobnie bdzie dziaa i Wam.
Ze wzgldu na ograniczenia dotyczce
artykuu, obcite zostay komentarze.
Podobnie jak w przypadku Maszyny do
pisania, zachcam jednak do napisania
programu samemu i traktowanie mojego
listingu jedynie jako dziaajcy punkt
odniesienia. Jeli jednak kto nie ma
ochoty
traci
czasu
nawet
na
przepisywanie, z pomoc przychodzi

odpowiednikami, ktre komunikuj si z


komputerem przez port szeregowy. Dziki
temu nie bdziemy musieli walczy z
niekompatybilnym
systemem,
ktry nigdy
Pprzewodniki:
Wykaz
elementw:
nie chce wsppracowa.
Jedyne
co trzeba
U1....................... AT89C2051
zrobi to poczy
ukad
z
komputerem
i
U2....................... AT24C01
klawiatur.Rezystory:
Bdzie
dziaa
pod
kadym
U3....................... TFMS5360
systememT1,i T2,
zawsze.
ToBC557
si dopiero
T3, T4....
R1, R2................
560
nazywa Plug
and
Play!
D1.......................
LED zielona
R3,
R4, R5, R6... 22k
D2.......................
R7, R8................ LED
1k czerwona
Rafa Baranowski
R9, R10.............. 3,3k
e-mail: Rafal.Baranowski@bloknet.pl
Pozostae:
R11.....................
220
X1.......................rezonator
ceramiczny
Kondensatory: 11,0592MHz
C1.......................
W1...................... 100nF
gniazdo 5 pin DIN
C2, C6................ 100F
lub PS/2
C3.......................
W2...................... 10F
wtyk 5 pin DIN
C4, C5................ 33pF
lub PS/2
Pilot komputerowy
2

Program mikroprocesorowy
$crystal = 11059200
Dim Nowy As Bit : Dim E As Bit : Dim P As Bit
Dim Com As Byte : Dim Adr As Byte
Dim K As Byte : Dim X As Byte : Dim A As Byte
Ziel Alias P1.0 : Czerw Alias P1.1 : Dta Alias P1.2
Clk Alias P1.3 : Blk Alias P3.5
Config Sda = P3.0 : Config Scl = P3.1
Config I2cdelay = 1
Reset Tcon.0 : On Int0 Rc5
Enable Int0 : Enable Interrupts
Do
Bitwait Nowy , Set
Disable Int0 : Reset Nowy
I2cstart : I2cwbyte 160 : I2cwbyte Com
I2cstart : I2cwbyte 161 : I2crbyte K , Nack : I2cstop
If K = &HFF Then
Com = Com + 64
I2cstart : I2cwbyte 160 : I2cwbyte Com
I2cstart : I2cwbyte 161 : I2crbyte K , Nack : I2cstop
If K <> &HFF Then : Set E
Else : Reset Czerw : Waitms 240 : Set Czerw
End If
End If
If K <> &HFF Then
While Clk = 0 : Waitms 2 : Wend : Reset Blk
If E = 1 Then
Reset E
X = &HE0 : Gosub Przeslij
X = K : Gosub Przeslij
X = &HE0 : Gosub Przeslij
X = &HF0 : Gosub Przeslij
X = K : Gosub Przeslij
Else
X = K : Gosub Przeslij
X = &HF0 : Gosub Przeslij

X = K : Gosub Przeslij
End If
Set Blk : Reset Ziel : Waitms 240 : Set Ziel
End If
Enable Int0
Loop
Przeslij:
A= 0
If X.0 = 1 Then : A = A + 1 : End If
If X.1 = 1 Then : A = A + 1 : End If
If X.2 = 1 Then : A = A + 1 : End If
If X.3 = 1 Then : A = A + 1 : End If
If X.4 = 1 Then : A = A + 1 : End If
If X.5 = 1 Then : A = A + 1 : End If
If X.6 = 1 Then : A = A + 1 : End If
If X.7 = 1 Then : A = A + 1 : End If
A = A Mod 2
If A = 0 Then : Set P : Else : Reset P : End If
Dta = 0 : Delay : Clk = 0 : Delay
Dta = X.0 : Clk = 1 : Delay : Clk = 0 : Delay
Dta = X.1 : Clk = 1 : Delay : Clk = 0 : Delay
Dta = X.2 : Clk = 1 : Delay : Clk = 0 : Delay
Dta = X.3 : Clk = 1 : Delay : Clk = 0 : Delay
Dta = X.4 : Clk = 1 : Delay : Clk = 0 : Delay
Dta = X.5 : Clk = 1 : Delay : Clk = 0 : Delay
Dta = X.6 : Clk = 1 : Delay : Clk = 0 : Delay
Dta = X.7 : Clk = 1 : Delay : Clk = 0 : Delay
Dta = P : Clk = 1 : Delay : Clk = 0 : Delay
Dta = 1 : Clk = 1 : Delay : Clk = 0 : Delay : Clk = 1
Return
Rc5:
Getrc5(adr , Com)
If Adr = 0 Then : Set Nowy
Else
Reset Nowy
Reset Czerw : Waitms 240 : Set Czerw
End If
Return

Pilot komputerowy

You might also like