18
Elektronika dla Wszystkich
Do czego to s³u¿y?
Sama nazwa mówi co to za gra. Ka¿dy z nas,
zna j¹ od najm³odszych lat. Ale dla przypo-
mnienia, jest to prosta gra logiczna polegaj¹-
ca na zape³nianiu przez przeciwników (kó³-
kami i krzy¿ykami) tablicy o wymiarach za-
zwyczaj 3x3. Je¿eli w zape³nionej tablicy
znajd¹ siê jednakowe elementy obok siebie
po linii prostej lub po skosie, to wygrywa ten
zawodnik, do którego te elementy nale¿a³y.
Mo¿na w ni¹ graæ na kawa³ku kartki, ale pro-
ponujê, zamiast tego rozwi¹zania zastosowaæ
elektroniczn¹ wersjê gry „kó³ko i krzy¿yk”,
w której wyeliminowane zosta³y kartka i d³u-
gopis. Mo¿e niezupe³nie, ale kartka mo¿e siê
przydaæ do zapisywania wyników rozgrywek.
Proponowana wersja gry jest bardzo prosta
w obs³udze, dziêki czemu mo¿e byæ u¿ywana
przez wszystkich, nawet tych najm³odszych.
Ca³e urz¹dzenie przypomina narysowan¹ na
kartce tablicê, przy czym ma aktywne wewnê-
trzne pola, które po naciœniêciu przyjmuj¹ ko-
lor czerwony lub zielony w zale¿noœci od ko-
lejki gry. Wspomniane kolory nale¿y domyœl-
nie uznawaæ za kó³ko lub krzy¿yk. Dodatko-
wa dioda wskazuje kolejnoϾ przeciwnika, by
nie by³o jakichkolwiek nieporozumieñ pod-
czas rozgrywek. Dziêki niewielkim wymia-
rom, grê mo¿na nosiæ w kieszeni. Wy³¹czanie
wyœwietlacza podczas d³u¿szej bezczynnoœci
gry przyczynia siê do zmniejszonego poboru
pr¹du, który dla œwiêc¹cych diod jest znaczny.
U¿ytkownicy o koñcu gry s¹ powiadamiani
dŸwiêkiem wydobywaj¹cym siê z membrany
piezo, przy czym jednoczeœnie zostaje zablo-
kowana klawiatura urz¹dzenia.
Jak to dzia³a?
Schemat ideowy gry znajduje siê na rysunku 1.
G³ównym elementem steruj¹cym gr¹ jest mi-
krokontroler AVR o symbolu AT90S2313.
Jest to odpowiednik dobrze znanego
89C2051. Diody wyœwietlacza zosta³y po³¹-
czone w matrycê, do której kolumn dodatko-
wo zasta³y do³¹czone przyciski S1-S9. Tran-
zystory T1-T3 steruj¹ kolumnami matrycy,
natomiast rezystory R5-R7 ograniczaj¹ pr¹d
p³yn¹cy przez odpowiednie diody wyœwietla-
cza. Do³¹czenie przycisków do matrycy po-
zwoli³o na zmniejszenie iloœci po³¹czeñ po-
trzebnych do obs³ugi klawiatury. Membrana
piezo Q1 sygnalizuje ka¿de naciœniêcie przy-
cisków tablicy oraz proces zakoñczenia gry.
Dioda D10 wskazuje na kolejnoϾ przeciwni-
ka. Poniewa¿ brakowa³o wyprowadzeñ mi-
krokontrolera, jej anody zosta³y do³¹czone do
matrycy steruj¹cej tablic¹ diod. Przycisk S10,
który wywo³uje przerwanie, s³u¿y do restarto-
wania gry oraz budzenia mikrokontrolera
z trybu IDLE. Kondensator C1 zeruje uk³ad
po w³¹czeniu napiêcia zasilaj¹cego, natomiast
kondensatory C4 i C5 s¹ odpowiedzialne za
filtrowanie zasilania. Z tego niewielkiego opi-
su wynika, ¿e budowa elektroniczna gry jest
bardzo prosta, ale program zawarty w mikro-
kontrolerze te¿ nie musi byæ skomplikowany.
Dlatego te¿ teraz przedstawiê kilka procedur
zawartych w oprogramowaniu kontrolera. Li-
sting 1 pokazuje pêtlê g³ówn¹ programu.
Zmienna „licznik” jest inkrementowana
w przerwaniu od timera 1, w którym realizo-
wane jest multipleksowanie klawiatury oraz
wyœwietlacza. Je¿eli zmienna ta osi¹gnie
przedstawion¹ wartoœæ, wy³¹czany jest wy-
œwietlacz a mikrokontroler przechodzi w stan
IDLE. Zmienna licznik jest kasowana po ka¿-
dym naciœniêciu przycisku tablicy, co bêdzie
G
G
r
r
a
a
„
„
K
K
ó
ó
³
³
k
k
o
o
i
i
k
k
r
r
z
z
y
y
¿
¿
y
y
k
k
”
”
3
3
0
0
2
2
1
1
Rys. 1 Schemat ideowy
widoczne na pozosta³ych listingach. Zmienna
„licznik” osi¹gnie swoj¹ wartoœæ tylko przy
braku naciœniêæ przycisków tworz¹cych tabli-
cê. Je¿eli „flaga4” bêdzie ustawiona, to mo¿li-
wa jest obs³uga klawiatury oraz sprawdzane s¹
warunki zakoñczenia gry (warunki wygranej),
których, jak ³atwo policzyæ, mo¿e byæ dla ma-
trycy 3x3 tylko 8. Zmienna „Tab(x)” okreœla
element tablicy utworzonej matrycy. Je¿eli
któryœ warunek zakoñczenia gry siê zgadza,
ustawiana jest „flaga2”. Ustawienie tej¿e flagi
powoduje prze³¹czenie siê diody wskazuj¹cej
kolejnoœæ przeciwnika na kolor zwyciêzcy.
W dalszej kolejnoœci generowany jest odpo-
wiednio spreparowany za pomoc¹ pêtli „for”
dŸwiêk. Nastêpnie program kr¹¿y w pêtli, a¿
zostanie ustawiona „flaga3”. Jest ona ustawia-
na w przerwaniu po naciœniêciu przycisku
startu S10. Na listingu 2 przedstawiona zosta-
³a obs³uga wyœwietlacza oraz klawiatury. Na
samym pocz¹tku sprawdzany jest stan klawia-
tury (tylko przy wartoœciach zmiennej
J=1...3), po czym program obs³uguje pozosta-
³e diody wyœwietlacza. Wpisanie do zmiennej
„Tab(x)” wartoœci 1 powoduje zaœwiecenie siê
diody czerwonej, a 2-diody zielonej. Wpisanie
wartoœci 0 powoduje zgaszenie diody okreœlo-
nej indeksem tablicy. Przy J=10 obs³ugiwana
jest dioda D10, która jak wspomina³em poka-
zuje kolejnoϾ rozgrywki. Listing 3 przedsta-
wia elementy programu konwertuj¹ce warto-
œci zmiennej „key” odczytanej w przerwaniu
obs³ugi wyœwietlacza na odpowiednie warto-
œci zgodne z utworzon¹ tablic¹ „Tab”. Je¿eli
przyciœniêty zosta³ przycisk, któremu odpo-
wiadaj¹ca wartoœæ elementu w tablicy jest
równa „0”, to wydawany jest dŸwiêk oraz jest
zaœwiecany odpowiedni kolor diody w zale¿-
noœci, od tego na jaki kolor wskazywa³a dio-
da kolejnoœci D10. Tak jak wspomina³em, ze-
rowana jest zmienna „licznik”, dziêki czemu
przed³u¿any jest czas pracy gry. Na tym listin-
gu widoczna jest tak¿e procedura obs³ugi
przerwania od przycisku startu S10. Zerowa-
na jest w nim wspomniana „flaga3” oraz
zmienna licznik. Wyzerowanie „flagi3” jest
równowa¿ne ze startem gry od pocz¹tku. Po-
zosta³e elementy programu s¹ zamieszczone
w do³¹czonym oryginalnym programie.
Monta¿ i uruchomienie
Grê nale¿y zmontowaæ na p³ytkach drukowa-
nych przedstawionych na rysunku 2 i 3, przy
czym p³ytka wyœwietlacza jest dwustronna.
Monta¿ najlepiej bêdzie rozpocz¹æ od p³ytki
sterownika, wlutowuj¹c w pierwszej kolejno-
œci dwie zworki, przechodz¹c dalej do ele-
mentów najmniejszych, a koñcz¹c na w³o¿e-
niu zaprogramowanego mikrokontrolera
do podstawki.
19
Elektronika dla Wszystkich
Listing 1
Do
If Licznik => 60000 Then
'Warunek
wprowadzaj¹cy mikrokontroler w tryb IDLE
Disable Timer0
Stop Timer0
Portb = 0
Reset W1
Reset W2
Reset W3
Idle
End If
If Flaga4 = 0 Then
' J e ¿ e l i
flaga4=0 to obs³uguj klawiaturê matrycowa
oraz
Call Obs_klaw
'sprawdzaj warunki zakoñczenia gry
For I = 1 To 2
If Tab(1) = I Then
'Pierwsze warunki zakoñczenia gry
If Tab(2) = I Then
If Tab(3) = I Then
Set Flaga2
End If
End If
End If
If Tab(2) = I Then
' D r u g i e
warunki zakoñczenia gry
If Tab(5) = I Then
If Tab(8) = I Then
Set Flaga2
End If
End If
End If
………….
………….
If Flaga2 = 1 Then
' J e ¿ e l i
flaga2 ustawiona to zeruj flage4 oraz
wygeneruj dŸwiêk zwyciêstwa
P = I
Set Flaga4
For K = 50 To 250 Step 50
'Generowanie dŸwiêku
Sound Portb.0 , 100 , K
Next K
Reset Flaga2
End If
Next I
End If
Loop Until Flaga3 = 1
' J e ¿ e l i
flaga3 ustawiona zosta³a w przerwaniu od
przycisku S10
Loop
' t o
wyjdŸ z pêtli do-loop
Listing 2
Wyswietl:
'Procedura real-
izuj¹ca wyœwietlanie zaznaczeñ oraz
obs³uguj¹ca klawiaturê matrycowa
Incr Licznik
'Zwiêksz zmienna
licznik okreœlaj¹ca stan kiedy procesor ma
przejϾ w stan IDLE
Portb = 0
Set Kol
If J = 1 Then
'przy zmiennej j
=1..3 sprawdzaj klawiaturê
Set W1
End If
If J = 2 Then
Set W2
End If
If J = 3 Then
Set W3
End If
If S1 = 0 Or S2 = 0 Or S3 = 0 Then
'zapisz odczytana wartoϾ z klawiatury do
zmiennej key
Key = Pind And &B01111011
End If
Reset W1
Reset W2
Reset W3
Incr J
If J = 11 Then
'Je¿eli j=11 to
zmieñ na j=1
J = 1
End If
If J = 1 Then
'wyswietl punkt
tab(1)
If Tab(1) = 1 Then
'wartoϾ
Zapisywana Do Tablicy Oznacza :1 - œwieci
led czerwona,
Set W1 : Set Dr1
'2 -
œwieci led zielona
End If
If Tab(1) = 2 Then
Set W1 : Set Dg1
End If
End If
If J = 2 Then
'Zapis do drugiego
elementu tablicy
If Tab(2) = 1 Then
Set W2 : Set Dr1
End If
If Tab(2) = 2 Then
Set W2 : Set Dg1
End If
End If
………..
………..
If J = 9 Then
If Tab(9) = 1 Then
Set W3 : Set Dr3
End If
If Tab(9) = 2 Then
Set W3 : Set Dg3
End If
End If
If J = 10 Then
'J=10 jest zarezer-
wowana dla led pokazuj¹cej kolejnoœæ prze-
ciwnika
If P = 1 Then
'Wartoœæ P okreœla
którego przeciwnika dotyczy kolejka gry
Set W3
Reset W2
Reset W1
Else
Set W2
Reset W1
Reset W3
End If
Reset Kol
End If
Return
Listing 3
Sub Obs_klaw
'obs³uga oraz kon-
wersja wartoœci jak¹ zawiera zmienna key
If Key = 104 Then
'wartoϾ 104 oznacza
naciœniecie klawisza numer 2
Temp = 2
End If
If Key = 112 Then
Temp = 3
End If
If Key = 88 Then
Temp = 1
End If
………….
………….
If Temp <> 0 Then
'Je¿eli przycisk by³
ju¿ naciœniety to nie przypisuj zmiennym
tablicy nic
If Tab(temp) = 0 Then
Licznik = 0
Sound Portb.0 , 100 , 1000
'Wydaje dŸwiêk po ka¿dym naciœniêciu przy-
cisku
Tab(temp) = P
Flaga1 = 1
End If
Temp = 0
End If
If Flaga1 = 1 Then 'Je¿eli flaga1
ustawiona to zmieñ przeciwnika na poprzed-
niego
Reset Flaga1
If P = 1 Then
P = 2
Else
P = 1
End If
End If
End Sub
Zalacz:
'Przerwanie obs³ugi przycisku nowej gry
Set Flaga3
'Flaga3 okreœla
rozpoczêcie nowej gry
Waitms 250
Licznik = 0
P³ytka klawiatury z diodami wymaga bar-
dziej skomplikowanego monta¿u. W pierw-
szej kolejnoœci, po wlutowaniu mikrosty-
ków, nale¿y tak wyprofilowaæ kolorowe
diody LED, by znalaz³y siê nad przyciska-
mi, a ich naciœniêcie powodowa³o zadzia³a-
nie tych¿e przycisków. Po zmontowaniu
p³ytek nale¿y je z³o¿yæ w przys³owiow¹ ka-
napkê. Po poprawnym zmontowaniu uk³ad
powinien od razu poprawnie pracowaæ.
Uk³ad modelowy zosta³ zasilony napiêciem
6V z 4 ogniw 1,5. Próby, jakie przeprowa-
dzi³em, wykaza³y, ¿e gra tak¿e dzia³a po-
prawnie przy napiêciu zasilaj¹cym 3V, ale
dla wiêkszej jasnoœci diod nale¿y zmniej-
szyæ wartoœci rezystorów ograniczaj¹cych
R5-R7. Grê nale¿y obowi¹zkowo wyposa-
¿yæ w wy³¹cznik zasilania, poniewa¿ w sta-
nie IDLE pobór pr¹du nie jest pomijalnie
ma³y. Ca³y uk³ad nale¿y umieœciæ w jednej
z dostêpnych na rynku obudów. W przypad-
ku braku obudowy mo¿na wykonaæ j¹ z ka-
wa³ków laminatu, przy czym przyk³adowy
projekt laminatowej p³yty czo³owej znajdu-
je siê na rysunku we wk³adce. Wystarczy
wtedy wykonaæ boki oraz dno urz¹dzenia.
Nale¿y tak¿e schowaæ baterie zasilaj¹ce.
Obs³uga gry jest bardzo prosta i sprowadza
siê tylko do naciskania przycisków na wy-
znaczonej tablicy. Kolejka graczy jest poka-
zywana odpowiednim kolorem diody D10.
Po naciœniêciu przycisku na wyznaczonej
tablicy, naciœniêty przycisk przyjmuje kolor,
na jaki wskazywa³a dioda D10. Naciœniêcie
przycisku z diod¹ S10 uruchamia now¹ grê
oraz wychodzi ze stanu IDLE, podczas gdy
mikrokontroler siê w nim znalaz³. W przy-
padku remisu grê nale¿y rozpocz¹æ po naci-
œniêciu wspomnianego przycisku startu
(S10). Kolorom diod mog¹ byæ przypisane
odpowiednio kó³ko lub krzy¿yk, dlatego we
w³asnym zakresie nale¿y podj¹æ decyzjê, ja-
ki kolor diody bêdzie uwa¿any za kó³ko,
a jaki za krzy¿yk. Grê mo¿na, po zmianie
programu zawartego w mikrokontrolerze,
wykorzystaæ tak¿e jako dwie kostki szeœcio-
œcienne. Wyœwietlacz gry w sam raz siê
nadaje do tego celu. Jedn¹ kostk¹ mog³yby
byæ diody zielone, a drug¹ czerwone. Loso-
wanie oraz wybranie kostek do pokazania
umo¿liwia³by przycisk startu S10. W wyni-
ku braku pamiêci w mikrokontrolerze nie
uda³o mi siê zaimplementowaæ jako drugiej
rozrywki kostki do gry, oczywiœcie w jed-
nym mikrokontrolerze. Aby to da³o siê zro-
biæ, trzeba by wymieniæ mikrokontroler na
mikrokontroler o wiêkszej pamiêci, którym
mo¿e byæ znany 89C4051. Ma on 4k pamiê-
ci i z powodzeniem do gry „kó³ko i krzy-
¿yk” mo¿na dopisaæ implementacjê kostki
szeœcioœciennej. Przy zastosowaniu powy¿-
szego mikrokontrolera nale¿y pamiêtaæ
o zmianie obwodu zerowania na zalecany
dla rodziny mikrokontrolerów ’51. Mo¿na
by tak¿e wymyœliæ inne rodzaje gier, które
mog³yby byæ zaimplementowane do opisy-
wanego urz¹dzenia, oczywiœcie przy jego
ograniczeniach wyœwietlacza i klawiatury.
Mog¹ to byæ wszelkiego rodzaju gry zrêcz-
noœciowe, logiczne czy innego rodzaju. Pa-
miêæ zawarta w mikrokontrolerze AVR mo-
¿e wystarczyæ do realizacji ró¿nych gier.
Ale je¿eli oka¿e siê za ma³a, mo¿na zmieniæ
mikrokontroler na wspomniany 89C4051.
Mam nadziejê, ¿e mo¿na wymyœliæ jeszcze
wiele innych implementacji gier dla tego
urz¹dzenia.
Marcin Wi¹zania
20
Elektronika dla Wszystkich
Wykaz elementów
Rezystory
R1,R5,R6,R7 . . . . . . . . . . . . . . . . . . . . .220
Ω
R2,R3,R4 . . . . . . . . . . . . . . . . . . . . . . . .10k
Ω
Kondensatory
C1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4,7µF
C2,C3 . . . . . . . . . . . . . . . . . . . . . . . . . . .33pF
C4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47µF
C5 . . . . . . . . . . . . . . . . . . . . . . . . . . . .100nF
Pó³przewodniki
U1 . . . . . . . . . . . . . . . . . . . . . . . .AT90S2313
X1 . . . . . . . . . . . . . . . . . . . . . . . .Kwarc 8MHz
T1,T2,T3 . . . . . . . . . . . . . . . . . . . . . . .BC548
D1 – D10 . . . . . . . . . .LED 5mm dwukolorowe
Inne
S1 – S10 . . . . . .Mikrostyk o niskim przycisku
S11 . . . . . . . . . . . . . . . .Prze³¹cznik hebelkowy
Q1 . . . . . . . . . . . . . . . . . . . . .Membrana piezo
Z1 . . .Goldpin 1x15 oraz odpowiednie gniazdo
BT1 . . . . . . . . . . . . .Koszyk na baterie 4x1,5V
Komplet podzespo³ów z p³ytk¹ jest dostêpny
w sieci handlowej AVT jako kit szkolny AVT-3021
Rys. 2 i 3 Schematy monta¿owe