Matopeli


Matopeli

Yleistä

Matopeli (työnimi Snake) käyttää näyttönään 256 lediä, jotka on asetettu 16x16 -matriisiksi. Pelin ydin on PIC16F84-mikrokontrolleri, jonka ohjaamia neljää siirtorekisteriä (4094) käytetään näyttämään kuvaa ruudulla. Laitteen "rautapuoli" on siis tarkoitettu pelkästään kuvan esittämistä ja näppäinpainallusten välittämistä varten, joten ahkera koodaaja saa tehtyä sille lisääkin pelejä. Esimerkiksi tetris kävisi näyttötyypille hyvin. Alkuperäisen idean matopeliin on keksinyt Antti Gärding.

Laitteen suunnittelun lähtökohtana oli saada peli mahtumaan taskukokoon. Se aiheutti tarpeen jakaa laitteisto kahdelle piirilevylle: näyttölevy ja ohjainlevy, jotka molemmat ovat kaksipuoleisia. Pelin ensimmäisen version ohjainpiirilevy oli yksipuoleinen, mutta rivejä ohjaavat 16 transistoria oli erotettava vielä omalle pienelle piirilevylleen tilanpuutteen takia. Nykyisessä versiossa koko ohjausjärjestelmä on samalla levyllä.


Laitteen toiminta

PIC16F84:ssa on vain 13 I/O-nastaa, joten vapaasti määritellyn kuvan piirtämiseen 256 ledistä muodostuvalle näytölle tarvitaan jokunen muukin komponentti. Helpoin toteutus saatiin, kun sekä näytön rivejä että sarakkeita ohjaamaan pistettiin kaksi sarjaan kytkettyä 8-bittistä siirtorekisteriä (4094), jotka antavat PIC:n syöttämän sarjamuotoisen datan ulos rinnakkaismuodossa. Näin koko näytön ohjaamiseen tarvitaan vain kuusi I/O-nastaa

Rivejä ohjaavaan siirtorekisterilinjaan syötetään binääriluku, jossa vain yksi bitti on asetettu. Tällöin vain yhtä riviä ohjaava transistori johtaa kytkien kyseisen rivin ledien katodit maapotentiaaliin. Nyt sarakkeita ohjaavaan siirtorekisterilinjaan voidaan syöttää valitun rivin sisältöä vastaava bittisarja, ja kun siirtorekisterien ulostulot kytketään toimimaan, rivin ledit palavat halutunlaisesti. Kun kaikkia rivejä piirretään järjestyksessä tarpeeksi nopeasti, saadaan kuva syntymään.

Siirtorekisterien toimintaperiaatteen ansiosta riviohjaimen sisältöä ei tarvitse syöttää kokonaan uudestaan joka rivin piirtoa varten, vaan riittää, kun ennen ensimmäisen rivin piirtoa riviohjaimeen syötetään bitti 1, ja sen jälkeen syötetään bitti 0 aina, kun halutaan vaihtaa seuraavalle riville. Näin ykkönen kulkee koko linjaston läpi valiten yhden rivin kerrallaan piirrettäväksi.

Laitteen kokoonpano

Huomautuksia:

Matopeli-ohjelma

Kiinteät ominaisuudet: Koodista helposti muutettavat vakiot (osio VAKIOT lähdekoodin alkupuolella): Ongelmat ja huomautukset:

Kuvia:
Yleiskuva, kuvassa myös ulkoinen pelikortti.
Sisälmykset: Kuva1, Kuva2, Kuva3.

Tiedostot:
Ohjauselektroniikan kytkentäkaavio: snake_schematic.gif
Piirilevyjen maskit ja osasijoittelu: snake_pcb.zip
PIC:lle kirjoitettava ohjelma lähdekoodeineen: snake_software.zip
Ohjainpiirilevy Eaglen ymmärtämässä muodossa: snake.brd
Näyttöosan maskit PSP-kuvatiedostona, joka sisältää näytön valinnaiset osat eri kuvatasoina (layers) ja mahdollistaa esimerkiksi toiskätisen näppäinten asettelun: snake_display+buttons+ctrl.psp

Kysymyksiä, kommentteja ja ehdotuksia saa pistää sähköpostilla, osoitteet löytyvät allekirjoittaneen kotisivulta.

Päivitetty: [12.10.2003]

Tuomas Tuononen