Avoimen lähdekoodin käsikonsoli V1

26/12/2018


Huomio!

Piirilevyllä on muutama virheellinen kytkentä. Vasen nappi oli kytketty ADC7 ja ylös oli kytketty ADC6 pinneihin, jotka eivät toimi digitaalisina sisääntuloina.

Korjasin nyt nuo viat ja tein uuden piirilevyn jossa on kaksi ylösvetovastusta näille pinneille. Lisäsin myös samalla muutaman kiinnitysreiän kotelointia varten.


Halusin parannella aikaisempia käsikonsoliversioita, joten aloin koodaamaan modulaarista pelimoottoria. Urakka tökkäsi tosin jo heti ensimmäisessä vaiheessa: en saanut piirrettyä karttaa. Pelimoottorin ideana on siis "tile based engine", joka lukee kartan bittikarttamuotoisesta taulukosta. Kartta sisältää siis grafiikat ja törmäykset, jolloin peliin on mahdollista tehdä hyvinkin monipuolisesti tasoja hyvin pieneen tilaan.


Päivitys 5.1.2019

Uusi modulaarinen pelimoottori toimii jo kohtalaisen hyvin. Ainoa ongelma on pelaajan kiihtyvyydestä johtuva uppoaminen maahan.


Aluksi suunnittelin käsikonsolin. Alunperin en edes ajatellut, että haluaisin tehdä sellaisen PCB:lle, mutta päätin tilata ne yhtä aikaa kotimaatiolevyjen kanssa, jolloin postituskulut olivat jo maksettuna ja piirilevyt sai kohtalaisen halvalla. Käsikonsolissa on hyvin pieni 0,96-tuumainen OLED-näyttö (SPI), ATmega328P prosessorina ja mahdollisuus laittaa NRF24L01 langaton moduuli moninpelien mahdollistamiseksi.

Ohjelmisto

Uusi versio pelimoottorista (Visual Studio) lötyy täältä: https://github.com/Teneppa/openTileEngine

Vanhemmat koodit löytyvät täältä: https://github.com/Teneppa/handheld_open_source

Käsikonsoliin on kuitenkin olemassa jo aikaisemmin koodaamani softa, jossa on huikeat kuusi peliä, josta yksi on kesken. Koodi on alunperin tarkoitettu STM32-pohjaiseen käsikonsoliin, mutta sen voi kääntää myös ATmega328P:lle. Koodi löytyy samasta GitHub linkistä nimellä mushroom_mcp_continued_v10_converted. Koodi toimi muinoin mcp23017-e/sp -laajennuspiirin avulla, mutta muutin koodin käyttämään pinnejä suoraan Arduinosta. Voit vaihtaa pinnit mihin vain io.h -kirjastosta.


Piirilevy

Suunnittelin kyseisen piirilevyn EasyEDA:lla. Piirilevyn tiedostot löytyvät alla olevasta linkistä jos haluat valmistaa itsellesi tällaisen. Suosittelen JLCPCB:tä lämpimästi. Laatu on erinomaista ja hinta kohdillaan.

Laitoin projektin julkiseksi EasyEDA:ssa. Tästä linkistä löytyy piirilevy ja kytkentäkaavio käsikonsoliin: https://easyeda.com/laurilateemu8/k-sikonsoli-oled

Näitä piirilevyjä on vielä muutama ylimääräisenäkin, jos joku on kiinnostunut. Huomasin vasta nyt että näytön- ja isp-liittimen neliö, jonka kuuluisi merkata liittimen ensimmäistä pinniä oli väärällä puolella. Ei mikään suuri ongelma, mutta helpompi kytkeä oikein kun merkinnät on kunnossa.

Korjasin nuo merkkaukset julkiseen EasyEDA-projektiin.


BOM

Tässä on vielä lista osista, joita tarvitset konsolin rakentamiseen:

  • ATmega328P (TQFP-32)
  • 8 kpl 6 x 6 x 6 mm nappeja
  • 16 MHz kristallioskillaattori
  • 2 kpl 22pF 0603 kondensaattoreita
  • Jokin SPI-liitännällä varustettu näyttö. Itse käytän SSD1306-ohjainpiirillä varustettua monokromaattista OLED-näyttöä. Se on aika pieni, sillä se on vain 0,96" ja resoluutiokin on vaivaiset 128x64. Resoluutio kyllä riittäisi hyvin, kun kyseessä on Arduino, mutta kokoa saisi olla reilusti lisää.

Tarvitset myös ohjelmoimiseen ISP-liittimeen menevän ohjelmointilaitteen. Olen itse käyttänyt USBTinyISP -ohjelmointilaitetta Adafruitin laitteisto-ohjaimilla. Voit käyttää vaikka toista Arduinoa tai ostaa virallisen AVRISP mkII -ohjelmointilaitteen.

Jos haluat konsolille langattomat ominaisuudet, tarvitset vielä nämä osat:

  • NRF24L01+ radiomoduuli
  • AMSD1117-3.3 (3,3 V regulaattori)
  • 1206 680 nF kondensaattorin tasaamaan virransyöttöä. Arvolla ei ole juurikaan väliä ja voit kolvata kondensaattorin vaikka suoraan radiomoduuliin kiinni. Radiomoduuli vaatii kuitenkin melko vakaan virransyötön, joten hanki kuitenkin edes kohtuullinen kondensaattori sitä varten.

Konsolin yläreunoissa on myös paikat vastuksille ja ledeille. Aika tarpeettomat, mutta ainakin paikka löytyy jos haluat asentaa ne. Isommat paikat on 1206 kokoa ja pienemmät ovat 0603 kokoa. Ei ole mitään väliä kumpaan laitat ledin, kunhan etuvastus on oikean kokoinen. Muista kuitenkin kytkeä ledi oikein päin, ettet polta sitä.