keskiviikko 6. heinäkuuta 2016

I2C konsoli

Minulle on jäänyt lapsuudesta jonkinlainen kaipuu yksinkertaiseen, mukanakannettavaan ja ohjelmoitavaan tietokoneeseen jossa patterit kestää ja johon sovellusten kehitys ei vaadi massivisia SDK:ita, pitäisi murehtia skaalautuvuudesta erilaisille näytöille yms.. Tai sitä että omat piirustukset näyttävät kehitysvammaisen töherryksiltä korkearesoluutisoisilla näytöillä. Muutaman pikselin kokoista retrografiikkaa tumpelompikin osaa piirtää.

Käytin aikoinaan lapsuudessani psion series 3c (https://en.wikipedia.org/wiki/Psion_Series_3#Psion_Series_3c) PDA:ta. Psion oli mahtava, sille pystyi kirjoittamaan basic-ohjelmia, (myös piirtämään grafiikkaa). Akkuna toimi kaksi AA-paristoa jotka kestivät viikkoja. Olin pienenä kovakin häxöri, ainakin John Connorin veroinen  (joka tosin käytti Atari Portfoliota https://en.wikipedia.org/wiki/Atari_Portfolio)
Ainut puute oli lähinnä se että sopivaa linkkikaapelia ei ollut saatavilla enkä sellaista silloin osannut tehdä, joten ohjelmia ei saanut talteen.

Myöhemmin sain rippikoululahjaksi TI-86 graafisen laskimen... ja joo siis erosin kirkosta myöhemmin. TI-86 kulki mukana paremmin kuin psion ja paristot kestivät pidempään. Tein lukioaikoinani sillä kaikenlaista hyödyllistä, kuten lukujärjestysohjelman (ja "navigointikartan" jotta löytäisin oikean luokan), pari seikkailupeliä yms..hauskaa. Tämä oli siis aikaa ennen ifooneja ja androideja.

Olin aiemmin hassutellut 128x64 kokosen LCD:n bananapi:n kanssa (arduinon toimiessa sovitimena).  Kerron jossain toisessa postauksessa tarkemmin kokeilustani (webbikameran kuva lcd-näytölle, chip8, ohjelmananageri emu yms) Valitettava puute tuossa LCD-mallissa on vaadittavien kontrollilinjojen määrä. Vaikeuttaa johdotusta ja vaatii väliin elektroniikkaa kun io-pinnejä ei esim raspberryn tapauksessa ole tuhlattavaksi.

Mielessä kyti ajatus näyttö+näppisyhdistelmästä, jonka voisi tökätä sulautettuun tietokoneeseen (tai vaikka mikrokontrolleriin), verkkoasetusten, retropelien, emulaattoreiden (TI86, telmac yms), yms "erikoissovellusten" käyttämiseksi.

Henkilökohtaisesti retroilu ei pahemmin napostele. Ymmärrän toki retropelien pelailun, mutta että alkaisi nostalgiapärinöissä vääntämään koodia commodorelle, dosboxille tai graafiselle laskimelle ei todellakaan tunnu mielekkäältä.  Varsinkin kun nykyään on fiksumpia ja tuottavampia kieliä mitä esim basic tai OPL.


Retrofiilistelyssä sensijaan mennään kiintoisalle alueelle, kun mietitään mitä on jätetty taakse. Ja mitä asioita voisi käyttää parantamaan nykypäivän elämää. Ah, miten voisikaan yhdistää käyttöliittymien yksinkertaisuuden (ei mitään tyylihipströintiä), matalankynnyksen ohjelmankirjoituksen  (taskulaskinappien kehitys oli helppoa ja nopeaa).  Mutta kuitenkin niin että käytössä olisi nykypäivän mahdollisuudet (ohjelmointikielet, valmiit ohjelmat ja kirjastot, oheislaitteet, SDR)?

Skrollissa mainostettu pico8 sensijaan on perus retroilusta askel haluamaani suuntaan. Eli alusta johon on matala kynnys kehittää softaa. Pico8 menee suljetun sorsan sekä keinotekoisen rajoittamisen kanssa hieman metsään. Tavoitteena on tietokone, ei pelkkä pelikone.

Eräänlainen fallout henkinen pipboy hakusessa siis.

Käytössäni on 3d tulostin ja saatavilla on halpaa elektroniikkaa. Miksipä en yrittäisi? Katsotaan mitä saan aikaan. Dokumentoin prosessin eri vaiheita itseäni varten ja siltävaralta jos joku hakee ratkaisua teknisiin ongelmiinsa googlella. Ties vaikka tästä kehittyisi ajansaatossa kilpaileva, katu-uskottavampi open source vaihtoehto jollekkin naurettavalle hipsteri-solu machinesille

http://www.solu.co/

Ostoksia

Ebaystä bongasin i2c liitäntäisen oled-näytön. 0.96" tuumaa, näyttönä UG-2864HSWEG01, jota ohjaa SSD1306 driveripiiri. Hintaa toimituksineen alle 5e

Kytkis menee neljällä piuhalla ja pari kolmekymmentä mA maksimikulutus on varmaan alle banana/raspberrypi:n 3.3v kiskon maksimivirran. (mikään ei kuitenkaan ole ylikuumennut kun näytön kytkin)

Samantien i2c väylään ajattelin lisätä myös näppäimistön. IO-expanderiksi valikoitui edullinen PCF8574. (DIL kotelo 30snt 10kpl:n erässä ostettuna)

Itse näppäimistö olisi mallia "matriisi. Näemmä edullisesti sai 4x4 näppäimistöjä (reilu 80snt/kpl). Toki sitä olisi voinut ostaa kasan tactileswitchejä ja kolvailla ne näkkärille. Olisi työlästä ja se tarkoittaisi hyppylankahässäkkää.

Osat tulivat. Mitä nyt oled näytön piikkirima oli puhkaissut pakkauksen ja osassa 6kpl erää osa näppäimistöistä tuli pintaliitosmallisilla ja toiset läpijuotetuilla napeilla.

Kytkennän kasaamiseen käytin 2x8cm koekytkentälevyä.

Matriisinäppäimistö

En ala avaamaan tässä perusasioita, mitä matriisinäpäimistö tarkoittaa.
https://en.wikipedia.org/wiki/Keyboard_matrix_circuit
http://www.dribin.org/dave/keyboard/one_html/

Lukekaa tuolta vaikka kummittelusta (ghostingista). En kuitenkaan nähnyt tarpeellisena diodien lisäämistä kytkinmatriisiin. Tämä siksi että pyrin suunnittelulla välttämään tilannetta jossa näppäimistössä ei tarvitsisi painaa kahta useampaa näppäintä samanaikaisesti

Skannaavissa näppäimistöissä on myös riskinsä, että virta ohjautuu sarakkeita skannatessa vcc:ssä olevalta sarakkeelta sarakkeeseen, kun painetaan viereisiä nappeja. Onneksi PCF8574 on vain "jäykkä 0" ja "löysä 1" :D jolloin piirin IO pinnin käräyttäminen muilla io-pinneillä tulee mahdottomaksi eikä täten vastuksia tarvita

Oheinen kuva datalehdestä auttaa selittämään asiaa



GPIO-expanderin pinnillä on kaksi tilaa
0) Pinniä vedetään "jäykästi" maahan. Tällöin pinnin arvoksi ei voida lukea muuta kuin nolla
1) Alasvetävä trankku avautuu ja 0.1mA virtalähde syöttää pinniin virtaa eli irtonainen pinni nousee kohti käyttöjännitettä. Pinnin arvoksi voidaan lukea 0 tai 1 riippuen vetääkö joku muu sitä maahan.

Ei ole 1,0,hi-Z. Mutta sopii tähän hyvin.  Itseasiassa käy helpommin kun ei tarvitse miettiä kolmen tilan kanssa :)

Palaan aiheeseen myöhemmin softaosiossa.

Näppislayout

Alkuperäinen idea oli käyttää yhtä 4x4 näppistä ja toteuttaa 70-luvun henkinen heksanäppäimistö.
Heksakoodien syöttely tai muutaman näppäimen käyttö olisi rajannut käytön retropeleihin (joita ei oikeasti jaksa tahkota muutamaa tuntia max kerrallansa, yksinkertaisiin valikoihin tai retrotietokonekäyttöön..

Tekstarityyliin komentojen naputtelu taasen olisi turhan hidasta ja vaatisi syöttöä avustavaa softaa (näytää ruudulla mikä merkki valittuna)

Haaveissa on kuitenkin se että käyttöliittymää voisi jotenkin käyttääkkin. Kirjoitella viestejä, antaa käynnistettäville palvelinsoftille parametrejä, editoida  asetuksia yms...

Kaksi 4x4 näppistä riittäkööt. Ja kummallekkin oma io-expanderi niin kummitteluriski pienenee. Varastin ideoita hieman kalq-näppäinasettelusta.
Lopullinen softa tulee tukemaan helposti konffittavia näppäimistöjä.

Eli laitteessa on oikean ja vasemmanpuoleinen näppäimistö.
Oikeanpuoleisella komennetaan ja vasemmanpuoleisella syötetään tietoa. Ennen näppäimistön rakentamista hahmottelin alustavasti näppäimistöasettelun, jotta varmistuisi että näppäinasettelu on mielekäs

Syöttönäppis, oletuksena

Chip8 peleihin, navigointiin ja valikoissa seikkailuun
123C
456D
789E
A0BF

Komentonäppis

VasNapOikNapMATHSYMB
ONOFFSHIFTGREEKSCROLL
DELEXITHELPFKEYS
BKSPTABSPACEENTER

Opettelun yksinkertaistamiseksi komentonäppis pysyy staattisesti samana.
Syöttönäppiksen funktio pysyy muuttuneena sen ajan kun nappia painetaan.

Suunnittelin että ONOFF näppäin joko sammuttaisi laitteen torkkutilaan tai sitten vain kytkisi ruudun pois päältä esimerkiksi jos laitteisto toimii akuilla.

HELP nappi taasen tarjoaisi on-screen helpin näppäimistä (siinä sovelluksessa jossa nyt ollaan).

EXIT poistuu ajettavasta ohjelmasta

Syöttönäppis: SCROLL

VASENYLÖSOIKEAPGUP
HOMEALASENDPGDOWN
ZoutZinThreshold-Threshold+
ZfitMENUPREVNEXT
Scroll toiminnolla on mahdollisuus rullata ruutua, jossa voi olla enemmän pikseleitä mitä näytössä suurempi kuin  näyttö. Threshold kertoo miten linuxissa pyörivä taustaohjelma päättää miten sisäisesti harmaasävykuvaksi muutettua kuvaa pitää kynnystää jotta sen voisi esittää kaksivärisenä.

Menu/prev/next

Syöttönäppis: FKEYS

F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
CONT-
CONT+
VOL-
VOL+
Kontrastin/kirkkauden whatever säätö. Lisäksi mahdollisuus muuttaa äänikortin antaman mökän tasoa.

Syöttönäppis: VasNap

m
b
w
h
p
space
x
c
r
y
s
z
d
n
f
v

Kalq näppäimistöstä pöllitty vasen puoli. Sekä oikean että vasemmanpuoleisen kalq näppäimistön tapauksessa spacen mielekkyys kyseenalaistuu, kun space löytyy jo oikeanpuoleisesta näppäimistöstä Vasta käytönnön näpyttely paljastaa, miten hyvin toimii vai hankaloittaako komentonäppiksen napinpaino komentonäppiksen spacen painoa.

Syöttönäppis: OikNap

g
t
o
j
i
e
space
u
k
a
l
q
ö
ä
ü
ß

Näppäimistöleiskassa huomioidaan suomen ja saksankieli. Ruotsinkieltä ei isänmaallisista syistä tueta joten å jää puuttumaan.  Saksalaisista kirjaimista ß ja ü. Pitäähän saksan perussanastoon kuuluvat fürer ja scheiß kirjoittaa oikein :)

Sovelluskohtaisesti näppäimistössä voi toki olla toimintoja, kuten kreikkalaiset kirjaimet

Syöttönäppis: Math

+
-
*
/
<
>
(
)
[
]
{
}
|
&
^
!

Syöttönäppis: SYMB

?
;
:
=
@
,
.
~
\
%
#
$
_
"
'
EUR

Mekaniikka

Elektroniikka sanelee tässätapauksessa muodon, minkälainen kotelo harakanpesälle tarvitsee tehdä.
Alkuperäinen ajatus oli jotakuinkin tämännäköinen TODO. kuva

Koska kyseessä on kumminkin yksittäiskappale, joka on epäsymmetrinen ja varsin epämääräisen muotoinen  (näppis vinossa, näyttö vinossa, epämääräinen johtohärdelli). Fiksuinta lienee aloittaa suunittelu paloittain ja sovitella osia toisiinsa.

Epämääräisten harakanpesien tapauksesa elektroniikalle kannattaa tehdä jonkinlainen raami tai kiinnitysmekanismi.  Kulmareikiä ei piirilevyhärdellissä ollut, joten päätin että levy puristuisi reunoistaan koteloon.



Tuon kotelon ideana on, että keskellä oleva evä loksahtaisi näppäimistöjen väliin ja vaakasuoraan menevät harjanteet painautuisivat piirilevyn pintaan napin jalkojen väliin. Päätyosa pur

Seuraavaksi päällepainettavan kopan suunnitteluun

Kehitettäessä 3d pikamalleja, joskus on vain helpointa ajan, muovin ja hermojen säästämiseksi printata mallista mittojen kannalta kriittinen osa ja kokeilla että se sopii. Minkowskin operaatiota käytettäessä kun välillä lipsahtaa ajatusvirhe mittojen osalta, toleranssien kanssa on voinut käydä erehdys yms. En ole siis koneinssi eikä itselläni ole yhtäkään mekaniikkasuunittelukurssia käytynä. Siispä:




Printtasin sivuviipaleen. Huomioita:
1)edustalla  liikaa 2.5mm
2)kohoumaa pitäisi työntää eteen 1.8mm
4)Reunus 2mm turhan syvä (joo, minkowski... koettakaa puolipallolla)
3)Taakse tarvitaan tukitapit, jotka ottaa vastaan kotelon takaseinän (seinä noin3mm levee,  8.2-8.5 pitkä)

Sitten tulostin samanlaisen kappaleen korjailtuna.
Totesin että nyt riittää ja laitoin kappaleen tulostumaan

1h ja 20min jälkeen printteristä pullahti kappale. Nuo hiusmaiset höntyvät viittaavat liian kuumaan printauslämpöön. Ajan PLA:ta turhan kuumana 200c. Tämä johtuu siitä että printterini muovinsyötössä on ollut käsittämättömiä ongelmia (asiasta lisää jossain muussa postauksessa) ja olen pitänyt päätä toistaiseksi vähän kuumemmalla jotta muovi olisi juoksevampaa.

Kansi naksahti paikalleen kivasti. Kaapelina käytän vanhaa, dyykattua cd-rom aseman ja äänikortin välistä kaapelia, jonka pinnijärjestys on vaihdettu sopimaan bananapi:n rimaan (3.3v SCL SCA ja maakarva erikseen).


sunnuntai 3. heinäkuuta 2016

Aloitus

Man kans intte blogi kertoo kolmekymppisen miehen projekteista jotka eivät mene ihan "so där" kuten strömsössä. Eli menevät lähes aina jokseenkin prypäleeksi.

Blogin aloittaminen on lykkääntynyt lähinnä laiskuuden ja muiden kiireiden myötä (kuten eräs koko talon kattanut homeremppa). Silti harrasteblogin pitäminen olisi fiksua. Esimerkiksi työpaikkaa hakessa törmäsin useasti kysymykseen "no mitä sitten olet harrastellut".."löytyykö sulta githubista jotain".. ööö....  Olen toki menneisyydessä koodaillut ja rakennellut kaikkea pientä. Moni projekti on jäänyt vaiheeseen muun muassa sen takia että myös vapaa-aikani pyöri (ja pyörii vieläkin jonkinverran) työasioiden ympärillä.

Vaikka sitten sainkin työpaikan (joka on ihan 5/5 paikka).  Mieleen työhaastatteluista jäi kaivelemaan se, että niin moni puuhasteluni ja kokeiluni jää unholaan ja pölyttymään viimeistään heti sen jälkeen kun sen saa valmiiksi (tai totean että tuli paske tai että ei kannata), Blogi voisi tuoda myös motivaatiota asioiden githubbiin lataamiseen, monesti pidän ohjelmakoodejani, 3d malleja ja suunitelmiani hirveänä 4PI avaruuskulmaan airburstaavana ribalepaskana. Samalla pystyisin harjaannutamaan dokumentointitaitojani.

Dokumentoinnilla en tosiaan tarkoita sellaista stereotyyppistä narisella äänellä puhuvan, standardinmukaisen paperinkuivan virkamies-insinöörin tekemää dokumentaatiota.  Vaan lähinnä miten minimaalisesti ja mahdollisimman tyylikkäästi saisi välitettyä projektissa olleita ajatuksia ja kokemuksia.  Hyvässä lykyssä joku lukijoista saa apuja tai inspiraatiota omiin työ tai harrasteprojekteihinsa.

Blogissa julkaistut harrasteprojektit pysyttelevät tarkoituksella pois päivätyöhöni liittyvistä asioista jo ihan ammattietiikan ja lain näkökulmastakin. Enhän halua auttaa kilpailijoita tai paljastaa yrityksen suunittelemia peliliikkeitä.  Hieman overläppiä tulee tietenkin linuxin, ohjelmointikielivalikoiman ja ohjelmien osalta... mutta kun kerran niitä käytetään toisin niin menee otsikon  "ammattitaidon kehittäminen" alle ;)

En myöskään kerro työnantajastani mitään, sillä blogini tulee liikkumaan jossain määrin viihdyttävyyden takia "lain rajamailla". Ja monesti . Alla esimerkki siitä mitä käy kun kampissa pyöritetään infotaulussa wintöötin päällä VNC:tä  (EI NÄIN LAPSET!). Joko minä olen äärimmäisen lahjakas häxöri tai infotaulujen toteutus on sysipaska. En sitten tiedä mitä hauskaa löytyisi jos pääsisi nettiyhteyteen..tai vaikka leikkimään jollain NFC devkitillä ja tuolla taululla.

VNC kaatunut, klikka ok, ruudulle pomppaa työpöytä, käynnistä paint... olisi sieltä valikosta löytynyt on screen keyboardia ja komentokehoitettakin. Joko minä olen häxöri tai systeemi on paskasti toteutettu
Myös muuta arveluttavaa materiaali tulee oleman tarjolla blogissa tai mahd muussa "anonyymimmässä" foorumissa.  Painotan kuitenkin että olen henkeen ja vereen allignmentiltani Chaotic-Neutral, joten evilit tarkoitusperät joiden ainut ja pääsiallinen tarkoitus on esimerkiksi ihmisten nirhaaminen ei missään tapauksessa tule kysymykseen.
(kukkahattutädeille: http://tvtropes.org/pmwiki/pmwiki.php/Main/CharacterAlignment)

Omistan myös Prusa i3 tulostimen. Sillä tulee aika-ajoin tulostelua. Esimerkkinä lahjaksi tulostettu saippuapumppuörkki. Päästä kun painaa niin nenästä pursuaa saippuaa. (asetonilla silotettu ABS ei ole ehkä kaikista hygieenisin ratkaisu... kun näin jälkikäteen ajattelee.. lol)

Päähän jäi tilavuutta liikaa ja nyt nenä tiputtaa

CSG operaatioilla saa myös osaamattomampikin tehtyä suht näyttävää taidetta
Eli tuosta saippuapumppuörkistä voisi todeta blogin otsikkoon viitaten: PRYPÄLEEKSI MENI!