Do czego to s³u¿y?
Jest to elektroniczna kostka do gry. S³u¿y do-
k³adnie do tego, do czego s³u¿y zwyk³a kost-
ka szeœcioœcienna, tylko, ¿e... gada. Nie doœæ,
¿e gada to jeszcze odtwarza dŸwiêki miesza-
nia oraz rzutu kostk¹. Wszystkie te dŸwiêki
nale¿y nagraæ samemu i gdy tylko siê znudz¹
mo¿na je zmieniæ.
Kostka ta mo¿e siê przydaæ w ró¿nych sy-
tuacjach. WyobraŸmy sobie taki przyk³ad:
znajdujemy siê w Egipcie, w piramidzie. Na-
gle gaœnie latarka i zapadaj¹ egipskie ciem-
noœci, a my akurat teraz mamy wielk¹ ocho-
tê zagraæ w jak¹œ grê planszow¹. Wszystko
jest OK, ale nie widaæ kostki! W takiej sytu-
acji uratuje nas kostka, któr¹ s³ychaæ.
Jak to dzia³a?
Schemat ideowy przedstawiony zosta³ na rysun-
ku 1. Uk³ad nie nale¿y do skomplikowanych.
Jest to typowa aplikacja magnetofonu
cyfrowego ISD1420 (ewentualnie
ISD1416) pracuj¹cego w trybie opera-
cyjnym. Magnetofonem steruje mikro-
kontroler AVR AT90S2313. Element
ten wybrano z kilku powodów:
- umo¿liwia on wyjœcie z trybu uœpie-
nia dziêki przerwaniu zewnêtrznemu,
- znikomy pobór mocy przez proce-
sor oraz ISD w uœpieniu (dziêki temu
mo¿na zrezygnowaæ z wy³¹cznika
zasilania),
- wewnêtrzny uk³ad Power On Reset
pozwala na rezygnacje z kilku ele-
mentów (zmniejszenie uk³adu),
- bardzo wa¿na sprawa: pakiet BA-
SCOM AVR niewiele ró¿ni siê od
BASCOM 8051, wiêc nie ma wiêk-
szych problemów z napisaniem pro-
gramu.
Uk³ad wykorzystuje dziewiêæ ak-
tywnych wyprowadzeñ mikrokontro-
lera. Piêæ z nich steruje procesorem
dŸwiêku. Do jego sterowania wykorzystano
nastêpuj¹ce sygna³y: PLAYE – zbocze opada-
j¹ce na tym wyprowadzeniu inicjuje odtwa-
rzanie; REC – stan niski jest warunkiem na-
grywania komunikatu; A0 – gdy na tej koñ-
cówce znajduje siê stan H dzia³anie uk³adu
ISD jest przyspieszone oko³o 800 razy,
umo¿liwia to szybkie znalezienie odpowie-
dniego komunikatu, jeœli znamy tylko kolej-
noœæ w jakiej wszystkie komunikaty s¹ u³o-
¿one; A4 – gdy H - ka¿de odtwarzanie zaczy-
na siê w miejscu gdzie zakoñczy³o siê po-
przednie; w przeciwnym razie odtwarzanie
zaczyna siê na pocz¹tku pamiêci; LED – to
wyjœcie ma podwójn¹ funkcjê: w trybie od-
twarzania pojawiaj¹ siê tutaj ujemne impulsy
za ka¿dym razem, gdy dojdziemy do koñca
aktualnie odtwarzanego komunikatu; w try-
bie odtwarzania wystêpuje tutaj stan niski,
a pojawienie siê stanu wysokiego œwiadczy
o przepe³nieniu pamiêci.
Na schemacie znajduj¹ siê jeszcze dwa
przyciski: Losuj – w trybie losowania przy-
cisk ten budzi procesor z trybu uœpienia i ini-
cjuje losowanie. Po jego naciœniêciu odtwa-
rzany jest dŸwiêk losowania. Po puszczeniu
koñczy siê losowanie, odtwarzany jest jeden
z dŸwiêków tocz¹cej siê kostki a na koñcu
s³owo okreœlaj¹ce iloœæ oczek. W trybie na-
grywania jego krótkie naciœniêcie odtwarza
aktualnie obrabian¹ próbkê dŸwiêku. Jego
przytrzymanie d³u¿ej ni¿ sekundê powoduje
zatwierdzenie dŸwiêku i przejœcie do nastêp-
nej próbki, co jest sygnalizowane migniê-
ciem diody. Przycisk Prog – ma znaczenie
tylko w trybie programowania. Jest dostêpny
19
Elektronika dla Wszystkich
GG
GG
aa
aa
dd
dd
aa
aa
jj
jj
¹¹
¹¹
cc
cc
aa
aa
kk
kk
oo
oo
ss
ss
tt
tt
kk
kk
aa
aa
Rys. 1 Schemat ideowy
★★
★★
★★
3
3
0
0
1
1
1
1
dopiero po otwarciu obudowy. Jego naciœniê-
cie powoduje rozpoczêcie nagrywania
dŸwiêku na aktualnej pozycji. Nagrywanie
jest sygnalizowane œwieceniem diody.
Zwora „Prog.” normalnie powinna byæ
zwarta. W³¹czenie zasilania przy rozwartej
zworce powoduje wejœcie w tryb programo-
wania, o czym poinformuje nas trzykrotne
miganie diody LED.
To tyle czêœci sprzêtowej. Ca³a reszta kry-
je siê w oprogramowaniu. W dalszej czêœci
artyku³u nie bêdzie prezentowania kodu
Ÿród³owego. Z grubsza opisano tylko zasadê
dzia³ania programu.
Po starcie i po inicjacji zmiennych, które
tego wymagaj¹, sprawdzany jest stan zworki
i podejmowana jest decyzja w jakim trybie
uruchomiæ kostkê. Tryb programowania jest
wzglêdnie ³atwy do analizy. Tryb losowania
natomiast jest trudniejszy ze wzglêdu na wy-
korzystanie kilku przerwañ, bez których nie-
które czêœci kodu nie maj¹ sensu. Poni¿ej
wyjaœniono tylko czêœæ kodu, pracuj¹c¹ pod-
czas losowania.
Na pocz¹tku aktywowane jest przerwanie
Int0 i ustawiane jest do reagowania na po-
ziom niski. Po tej czynnoœci procesor jest
usypiany. Z uœpienia, wed³ug dokumentacji,
mo¿na go wybudziæ poprzez: przerwanie
watchdoga, przerwanie zewnêtrzne ustawio-
ne na wyzwalanie poziomem lub poprzez re-
set. Uk³ad watchdog jest wy³¹czany ju¿ na
starcie programu, wejœcie reset nie jest
w ogóle pod³¹czone. Wykorzystujemy wiêc
drug¹ mo¿liwoœæ – do wejœcia Int0 pod³¹czo-
ny jest przycisk Losuj. Jego naciœniêcie spo-
woduje przejœcie do obs³ugi przerwania,
gdzie w tym momencie nic siê nie dzieje.
Program od razu opuszcza podprogram, a ca-
³a „akcja” spoczywa na pêtli g³ównej. Teraz
ustawiona zostaje zmienna bit_losowanie, Ti-
mer0 zostaje uruchomiony – dziêki niemu
odbywa siê losowanie, Int0 przestawione zo-
staje tak, aby nastêpna reakcja nast¹pi³a przy
puszczeniu przycisku – zdarzenie to zostanie
obs³u¿one w procedurze przerwania dziêki
ustawionej zmiennej bit_losowanie. Po od-
tworzeniu dŸwiêku mieszania program ocze-
kuje na zwolnienie przycisku, przy czym je-
œli sta³o siê to wczeœniej natychmiast odtwa-
rzany jest jeden z dŸwiêków upadaj¹cej kost-
ki a nastêpnie s³owo okreœlaj¹ce iloœæ oczek,
która „wypad³a”.
Komentarza wymaga jeszcze zakres lo-
sowanej liczby, który wynosi 0 – 23. Naj-
m³odszy bit decyduje o tym, który dŸwiêk
stukania bêdzie odtwarzany. Po podzieleniu
przez dwa otrzymujemy numer odtwarzane-
go komunikatu. Oznacza to, ¿e komunika-
tów jest 12. Dlaczego? ¯eby by³o ciekawiej:
du¿o t³umaczy tabela 1, w której przedsta-
wione jest to, co powinno znajdowaæ siê
w pamiêci ISD. Powtarzaj¹ce siê numery
oczek powoduj¹, ¿e raz us³yszymy na przy-
k³ad „dwa oczka’, kiedy indziej „dwa”.
tabela1
0
„jeden“
1
„jedynka“
2
„dwa oczka“
3
„dwójka“
4
„trójka“
5
„trzy oczka“
6
„czwóreczka“
7
„cztery“
8
„piêæ“
9
„pi¹tka“
10
„szeœæ oczek“
11
„szucha“
12
Mieszanie
13
Stuk 1
14
Stuk 2
W tabeli 1 w¹tpliwoœæ mo¿e wzbudziæ
rozmieszczenie komunikatów – na koñcu
umieszczone s¹ dŸwiêki odtwarzane na po-
cz¹tku. Powoduje to nieco zak³óceñ przez
przed³u¿enie czasu przewijania. Zwiêksza
jednak wygodê programowania. Po s³owach,
raczej standardowej d³ugoœci, mo¿emy eks-
perymentowaæ z ró¿nymi wersjami dŸwiê-
ków mieszania oraz tocz¹cych siê kostek.
Monta¿ i uruchomienie
P³ytka drukowana jest widoczna na rysunku 3.
Zosta³a ona przystosowana do obudowy KM-
22. Obudowa KM-22 sk³ada siê z dwóch
identycznych czêœci. Jedn¹ z nich potraktuje-
my jako „czêœæ górn¹”, drug¹ jako „doln¹”.
Z górnej czêœci nale¿y usun¹æ bolce podtrzy-
muj¹ce p³ytkê oraz miejsca na œruby. Nastêp-
nie wykonujemy otwory pod przycisk Loso-
wania i pod diodê. Mo¿na w tym celu pos³u-
¿yæ siê p³ytk¹ drukowan¹ jako wzorem.
Monta¿ p³ytki drukowanej nie jest typo-
wy. Na p³ytce zamontowano niektóre z ele-
mentów miêdzy nó¿kami scalaków. Pod-
stawki pod uk³ady scalone bêd¹ konieczne,
trzeba jednak je odpowiednio przygotowaæ –
polega to na usuniêciu wewnêtrznego
wzmocnienia. Mo¿na te¿ zamiast podstawek
DIP u¿yæ z³¹czy SIP (taka jednorzêdowa
precyzyjna podstawka). Monta¿ nale¿y roz-
pocz¹æ od dwóch zworek. Nastêpnie montu-
jemy przygotowane podstawki i prawie do
koñca dzia³amy standardowo – montuj¹c
elementy o coraz to wiêkszych gabarytach.
Koñczymy na po³¹czeniu kabelkami punk-
tów A z A’ i B z B’. P³ytkê mamy gotow¹.
Gotowa p³ytka bêdzie zbyt wysoka, aby
da³a siê zamkn¹æ w obudowie. Bolce oraz
wypustki na œruby w czêœci dolnej nale¿y
spi³owaæ lub przyci¹æ o oko³o 2-3mm. Do-
brze jest na tym etapie sprawdziæ czy wszy-
stko ju¿ pasuje. Gdy obudowa daje siê ju¿ za-
mkn¹æ, p³ytkê przykrêcamy dwoma blacho-
wkrêtami. Z boku nale¿y wypi³owaæ niewiel-
ki rowek, przez który „przejdzie” kabelek do
g³oœnika. G³oœnik przyklejamy na zewn¹trz
obudowy. Œwietnie do tego nadaje siê klej na
ciep³o z pistoletu.
Uk³ad zasilany jest z trzech baterii R03 -
inaczej AAA. Wymaga to jednak samodziel-
nego stworzenia uchwytów pod baterie, co
przedstawia rysunek 2. Rysunek a) pokazuje
ogóln¹ idee zamocowania jednej baterii; b)
widok z boku na ustawienie baterii wzglê-
dem uk³adu; c) widok z góry razem z uk³a-
dem po³¹czeñ. S¹ to po prostu blaszki przy-
klejone do obudowy mocnym klejem. Nie-
wielka iloϾ miejsca zmusza do umieszczenia
jednej baterii wy¿ej od pozosta³ych.
Nauka mówienia
Jeœli zasilanie jest w³¹czone - wy³¹czamy je.
Czekamy a¿ kondensatory roz³aduj¹ siê
(mo¿e to potrwaæ kilka sekund). Usuwamy
zworkê Prog i ponownie za³¹czamy uk³ad.
20
Elektronika dla Wszystkich
Rys. 2 Mocowanie baterii
Rys. 3 Schemat monta¿owy
Wejœcie w tryb programowania zostanie za-
sygnalizowane trzykrotnym migniêciem dio-
dy. Teraz pos³uguj¹c siê wczeœniej wspo-
mnian¹ tabel¹ 1 tworzymy kolejne dŸwiêki.
Interfejs jest w miarê prosty. Przycisk Prog –
nagrywanie, Losuj – (krótkie naciœniêcie) od-
twarzanie aktualnego dŸwiêku, (przytrzyma-
nie a¿ do migniêcia diody LED) zatwierdze-
nie i przejœcie do nastêpnej pozycji, Zworka
Prog – zerowanie licznika pozycji. Jeœli LED
zgaœnie podczas nagrywania, znaczy to
o przepe³nieniu pamiêci. Jeœli podczas próby
zatwierdzenia mignie cztery razy oznacza to,
¿e nastêpna próbka jest 15 – a taka nie istnie-
je, w zwi¹zku z czym nie mo¿na jej obrabiaæ.
Rada: nie œpiesz siê! 20 sekund to du¿o
jak na 14 komunikatów. Du¿o lepiej brzmi¹
s³owa wypowiadane wyraŸnie i w miarê po-
woli ni¿ szybkie.
Przyjêty sposób programowania umo¿li-
wia zmianê próbek od wybranego momentu.
Na przyk³ad, jeœli bêdziemy chcieli zmieniæ
dŸwiêki losowania i stukania nie musimy
w tym celu zmieniaæ dŸwiêków okreœlaj¹-
cych iloϾ oczek. Wystarczy wszystkie je
„zatwierdziæ”.
Uwaga: Odtworzenie komunikatu, który
nie koñczy siê znacznikiem EOM (mo¿e siê to
zdarzyæ na przyk³ad jeœli nagrywanie zakoñ-
czy³o siê z powodu przepe³nienia pamiêci), lub
próba przewiniêcia (zatwierdzenia) takiego ko-
munikatu spowoduje zawieszenie siê progra-
mu, poniewa¿ bêdzie on oczekiwaæ na ujemny
impuls na wyjœciu LED U1, który nigdy nie
nadejdzie. Jedynym wyjœciem z tej sytuacji jest
wy³¹czenie i ponowne w³¹czenie zasilania.
Parê uwag koñcowych
(niekoniecznie) na serio
W modelu pojawi³ siê pewien problem: gdy
zasilanie „padnie” podczas odtwarzania uk³ad
mo¿e nagraæ jakieœ bzdury do ISD. Jest to
prawdopodobnie spowodowane tym, ¿e zasto-
sowany mikrokontroler AT90S2313-10 pracu-
je poprawnie przy napiêciu 4-6V, a resetuje siê
przy 2,2V. Aby tego unikn¹æ mo¿na u¿yæ
uk³adu AT90S2313-4. Bêdzie to wymaga³o
zmiany kwarcu na 4MHz, lecz nie powinno to
mieæ wiêkszego wp³ywu na dzia³anie uk³adu
(nie trzeba bêdzie zmieniaæ programu).
Mo¿na spróbowaæ tak¿e podj¹æ siê skon-
struowania gadaj¹cej planszy do gry, gadaj¹-
cych pionków oraz gadaj¹cej latarki, która
poinformuje nas, ¿e zgas³a i przynajmniej bê-
dziemy mieli w tej sprawie jasnoϾ.
Chêtnie poznam posiadacza s³uchaj¹cej
kostki.
Rados³aw Koppel
Uwaga! Plik Ÿród³owy programu i pro-
gram wynikowy (bas i bin) mo¿na œci¹gn¹æ
ze strony internetowej www.edw.com.pl/
library/pliki/gadkosrk.zip
21
Elektronika dla Wszystkich
Wykaz elementów
R1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100k
Ω
R2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10k
Ω
R3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2,2k
Ω
R4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5,6k
Ω
C1,C4 . . . . . . . . . . . . . . . . . . . . . . . . . . . .10µF/16V
C2,C3,C5 . . . . . . . . . . . . . . . . . . . . . . . . . . . .220nF
C6 . . . . . . . . . . . . . . . . . . . . . . . .100nF ceramiczny
C7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220µF/16V
C8,C9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33pF
D1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .dioda LED
U1 . . . . . . . . . . . . . . . . . . . .ISD1420 (ew. ISD1416)
U2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .AT90S2313
X1 . . . . . . .niskoprofilowy rezonator kwarcowy 6MHz
S1 . . . . . . . . . . . . .miniaturowy przycisk z klawiszem
S2 . . . . . . . . . . . . . . . . . . . . . . . . . . .µSwitch 1mm
Z2 . . . . . . . . . . . . . . . . . . . .2x Goldpin z jumperem
Komplet podzespo³ów z p³ytk¹ jest
dostêpny w sieci handlowej AVT jako
kit szkolny AVT-3011