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).


Ei kommentteja:

Lähetä kommentti