Led Cube!

Ledejä, ledejä ja vielä vähän ledejä. Mikäs olis sen hienompaa kuin ledikuutio.

Mikä h*lvetin ledikuutio?

Asia vaatinee hitusen selitystä. Nimensä mukaisesti ledikuutio on kuutio, joka koostuu ledeistä. Boooring. Homma muuttuukin mielenkiintoiseksi vasta silloin, kun mukaan ympytään kasa elektroniikkaa ja näyttävät valoefektit!

Ideahan ei ole kovinkaan uusi ja netti niitä muutaman jo pitää sisällään. Parin viime vuoden aikana, kun jonkun tekemään kuutioon on törmännyt, niin mielessä pyörähtänyt, että siistihän semmoinen ois. Ajatukseksi aina vaan jäänyt. Paitsi kunnes tammikuussa hetken mielijohteesta kliksuttelin Ebaysta pussillisen ledejä ja muuta roinaa.

Mitä isompi kuutio, sitä hienommat efektit! Joten päädyin sitten 8x8x8 kokoluokan kuutioon. Eli ledejäkin uppoaa vain se 512 kipaletta.

Ennen kuin mitään aletaan tekemään, niin sovitaan muutama asia:

  • Juosten ei kusta
  • Mitataan kahesti, leikataan vaan kerran
  • Ei reikälevyä
  • Ei edes itse syövytettyjä piirilevyjä

Reikälevyn kanssa on tullut, niin monesti hajoiltua, että en ees ymmärrä kuka sitä haluaa käyttää. Toiseksi kaikki reikälevyviritykset näyttävät aina ihan hirveiltä. □

Itsetehdyt piirilevyt eivät ole niin virhealttiita, kun reikälevy, mutta edelleen ne näyttävät ihan kauheilta ja muutenkin kaksipuoleisten levyjen teko on pepusta. Kun iTead:lta saa sopuhintaan levyjä teetettyä, niin mikä estää tekemästä kunnolla asioita.

Mites koko roska sitten toimii. Tapoja on varmasti yhtä monta kuin on tekijöitä. No ei kyl ihan, mut mut. Lähtökohtaisesti pitäisi pystyä ohjaamaan 512:sta lediä. Eli tarvittaisiin 512 ulostuloa.  Ei kuulosta järkevältä.

Täytyy tulla toimeen vähemmällä. Voidaan pudottaa 512 ulostuloa kuuteenkymmeneenneljään ja multipleksata eri kerrokset.

Mikä h*lvetin multipleksaus?

Multipleksaus yksinkertaisuudessaan on sitä, että työnnetään monta signaalia yhtä jaettua väylää pitkin.

Tarvitaan vähemmän pinnejä, mutta nopeus kärsii.

Teoriasta käytäntöön. Miten tätä sovelletaan ledikuutiossa. Kuten aikaisemmin tuli selväksi, yhden kerroksen ohjailuun tarvitaan 64 ulostuloa. Se on vielä ihan toteutettavissa oleva määrä. Joten pidetään aina yhtä kerrosta päällä kerrallaan ja sitten siirrytään seuraavaan.

WTF! Eihän kukaan halua kahtoa, kun yksi kerros kerrallaan palaa. Hienous onkin siinä, että kerrosten vaihto hoidetaan niin nopeasti, että  ihmissilmä näkee kaikkien kerrosten palavan yhtä aikaa.

Yllä oleva kuva koittaa vähän selkeyttää miten ledit kytketään toisiinsa. Yksinkertaisuudessaan:

  • Jokaisen kerroksen katodit yhteen: 8 kpl
  • Jokaisen pystyrivin anodit yhteen: 64 kpl

64 ulostuloa on silti aika paljon, kun AVR:n valmistamissa mikrokontrollereissa yleensä IO-pinnejä on neljästä kolmeenkymmeneenkahteen. Tarvitaan siis lisää.

Pelastus on shiftrekisterit. Mukavat pikkuiset piirit, joilla sarjamuotoinen data saadaa rinnakkaiseksi. Shitrekistereitä pystyy vielä ketjuttamaan näppärästi. Eli parilla mikrokontrollerin ulostulolla saadaan teoriassa n kappale ulostuloja.

Shiftrekisteri vaatii siis kolme pinniä, jotta niihin saadaan dataa syötettyä. Datapinni heiluu kellon tahdissa sen mukaan, mikä on bitin tila ja lopuksi vedetään latchpinni ylös. Tämän vaikeampaa niiden ohjailu ei ole. Tällä simulaattorilla voi aikansa kuluksi leikkiä.

Ledien lisäksi kliksuttelin itselleni 8-bittisiä shiftrekistereitä (74HC595). Joita tarvitaan (yllätys yllätys) kahdeksan kappaletta (8*8 = 64).

Nyt saadaan 64 lediä syttymään parilla mikrokontrollerin ulostulolla. Vielä tarvitsee pystyä valitsemaan, mikä kerros on päällä. Yksinkertaisimmillaan homma hoituu kasalla transistoreja. Jokaiselle kerrokselle oma transistori, joka kytkee kerroksen katodit maahan. Jotta voidaan ohjailla kahdeksaa transistoria, niin tarvitaan taas kahdeksan ulostuloa. Yksi shiftrekisteri hoitamaan niiden ohjailun. Jälkeenpäin ajateltuna ei kaikista paras tapa, mutta siitä lisää myöhempänä.

Yksinkertaistettuna hardware näyttää tältä, mutta ei siinä vielä kaikki. Tulevaisuutta ajatellen kuutiota olisi myös kiva ohjailla tietokoneella. Joten mukaan heitetään myös USB-tuki ja ympärille tarvitaan hitusen muutakin elektroniikkaa.

Rauta tarvitsee aina myös softan ja mitä softan tarvitsisi tehdä. Yksinkertaisimmillaan sytyttelee ledejä tiettyjen sääntöjen mukaan. Monimutkaisemmin:

Yhden illan luonnos softasta ja sen ominaisuuksista. Paperillahan kaikki näyttää hienolta, mutta kaikki pitäisi vielä toteuttaakin. Se kuution teoriasta. Annetaan kuvien puhua toteutuksen puolesta.

Ledejä, siitähän se kaikki alkaa. Jokainen ledihän on ensimmäiseksi testattava. Mikä ois sen hienompaa, kuin keskellä kuutiota oleva rikkinäinen ledi.

Sapluuna pitää ledit paikoillaan ja varmistaa varmasti saman kokoiset kerrokset. Jokaisen kerroksen katodit siis yhteen.

Ensimmäinen kerros valmiina ja liian monta vielä edessä. Kelataan vähän eteenpäin.

Kun kaikki kahdeksan kerrosta on saatu valmiiksi, niin ne pitää vielä liittää toisiinsa. Ihanaa. Eli jokaisen pystyrivin anodit yhteen. Uuden kerroksen jälkeen tietenkin jokainen ledi testataan jälleen. :3

Näin parissa sekunnissa (lue: päivässä) kuutio kasassa. Eipä se vielä kovin kummoinen ole.

Seuraavaksi se tarvitsisi elektroniikkaa ympärilleen.

Koko projektin aivot. AVR ATmega328p. Hurjilla spekseillä:

  • 32 kilotavua ohjelmamuistia
  • Huikea kahden kilotavun RAM

Kyllä, suurin määrä RAMia mitä kasibittisissä AVR:ssä on.  Kontrolleri sykkii huikeaan 14.7456 MHz taajuudella. 328p tukis kyllä ihan 20 MHz asti, mutta 14,7 MHz on kiva magic kellotaajuus, jolla uart-tiedonsiirrossa saadaan errorit minimiin.

Ei kovin tehokkaalta kuulosta. Tosin kahdella megahertsillä on saatu ihminen kuuhun.

Aika siis avata KiCad ja alkaa suunnittelemaan kytkentäkaaviota. Kuutio tulee koostumaan kahdesta osasta: ohjaimesta ja shiftrekistereistä.

Kytkennästä yleiskuvan saa tuosta. Sama löytyy PDF:nä lopusta.

Loputkin raudasta paljastuu. Poweri hoidettu lineaariregulla. Hakkuri olisi toki parempi, mutta regulaattori vie vähemmän tilaa ja tässä se on tarpeeksi yksinkertainen. Shiftrekisterien kytkentäkaaviossa ei ole mitään ihmeellistä. Joten saatte tyytyä pelkkään 3D-kuvaan, jonka tarjoaa KiCad!

Ohjaimen ensimmäinen versio. (Vedot hävinneet johkiin) Näytti sen verran rumalta, että päätin painaa deleteä ja tehdä uusiksi.

Heti parani. Tilaus iTead:lle menemään ja sit odotellaan se kuukausi tai pari.

Shiftrekisterien piirilevyt saapu. 50mm x 50 mm levyyn niitä mahtui kaksi kappaletta.

Yksi koottuna. Näitähän tarvitaan kahdeksan. Kivaa toistoa kokoaminen…

Jokainen shiftrekiseri tietenkin pitää testata. Kaikki toimii kerrasta. Reikälevy, ei tule ikävä.

Ohjainkortin piirilevy. Komian valkoinen. iTead:lta tilatessa tulee aina kymmenen satsi, että näitä on pari ylimääräisinä, jos joku haluaa.

Kaikki oli vielä siististi järjestyksessä.

Parin tunnin kolvaushuurujen hengittelyn ja testailujen jälkeen ohjainkortti on kasassa.

Kuutio tarvitsee myös jonkinlaisen alustan/telineen. Kynä ja paperi olisi ollut ihan liian ilmeinen vaihtoehto suunnitteluun.

Alumiinia, pleksiä, paljon reikiä.

Kotelon rakentelusta ei kuvia jostain kumman syystä tullut otettua. Tosin eipä siinä kauheasti kuvattavaa ole. Jokainen varmaan osaa kuvitella, kun leikellään pala alumiiniä, jonka jälkeen sitä hiukan taivutellaan.

Yksittäiset osaset alkaa olemaan valmiita. Vielä pitäisi saada kaikki yhteen nippuun.

Shiftrekisterit kiinni kuutioon. Rimaliittimet on siitä mukavat, että kaiken saa helposti myös irti, jos jotain hajoaa.

Taikaa! Se alkaa heräilee henkiin hiljalleen.

Tältä näyttää kotelon pohja. Ammattimainen eristys ;) Regulaattorin hukkalämpö johdetaan suoraan koteloon. Eipä tarvitse erillistä siiltä.

Palaset yhteen! Täytyy sanoa. Komia se on :3

Jotain olennaista vielä puuttuu. Efektit! Käytössä ei ole mikään neliydin prossu. Joten kovin raskasta reaaliakasta laskentaa ei voi tehdä. Myöskään muistia ei ole tuhlattavaksi. Joten kauheasti ei voida esilaskea. Sopivasti siis molempia.

Multiplexing!

Kuutio on helppo ajatella kolmiulotteisessa koordinaatistossa, jossa piste (0, 0, 0) on vasemmanpuoleinen etummainen alanurkka.

Loppu onkin sitten lähes pelkkää matematiikkaa. Esimerkiksi “3D sini”.

Latex formula

Koko efektin saa puettua yhdeksi kauniiksi funktioksi. Siniä, neliöjuurta ja potenssia. CPU tykkää varmasti! Matemaattisesti kompakti, mutta homma käy raskaaksi laskea. Kuvaajaa, kun hetkenaikaa tuijottaa huomaa, että se on symmetrinen. Eli tarvitsee laskea vain neljäsosa ja peilata. Toinen asia millä voidaan asiaa helpottaa on esilaskenta. Sillä
Latex formula
voidaan helposti esilaskea taulukkoon. Homma ei kuitenkaan vielä ole tässä. koko roska pitää vielä skaalata kuutiolle sopivaksi.

Latex formula

Lisää kivaa. Kosiniaaltoja.

Latex formula

Tai vaikkapa pallo.

Latex formula

Periaatteessahan mielikuvitus on vain rajana. USB-tuki, kun mahdollistaa efektien laskennan tietokoneella ja mikrokontrollerin vastuulle jää ainoastaan ledien sytyttely. Eikä efektien pidä olla matemaattisesti simppelisti ilmaistavana. Voidaan vaikka raakakoodata jokanen frame, mutta olisko siinä mitään järkeä?

Showtime!

 Ohan se.

Jotain voisi aina tehdä paremmin ja näin jälkiviisaana tuli huomattua parikin juttua.

  • Transistoreille voisi uhrata kontrollerista yhden kokonaisen portin. Jolloin säästettäisiin hiukan aikaa, kun ei tarvitsisi shiftrekisterille dataa työntää.
  • Hakkuri virtalähteenä

Mutta näillä mennään, ja hyvin toimii.

“Eppur si muove!”

This entry was posted in Jotain aivan muuta and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *