Taas vaihteeksi tällainen joskus kauan sitten ostetuista komponenteista kyhätty, lähes ikuisuusprojektiin verrattavissa oleva viritys. Ebaystä (ei, en edelleenkään suosittele ostamaan netistä krääsää impulsiivisesti) löytyy halvalla kivoja ledimatriiseja (~1 e/kpl) ja jopa kaksivärisinä. Ostin noita joskus siinä toivossa, että a) saisin aikaiseksi jonkun ison hienon näytön jolla tekisi joskus jotain hienoa b) tekisin pitkän rivin noista ja laittaisin siihen ehkä jotain enemmän tai vähemmän hyödyllistä tekstiä rullaamaan.
En uskalla selailla sähköpostiarkistoista ensimmäistä kuittia noista, mutta on siitä hetki aikaa kun tätä projektia aloin suunnitella. Ensin tosiaan olisi tarkoituksena puuhastella kiltahuoneen seinälle jokin irc-ohjattava infotaulu n. 10-20 moduulista, jolla voisi ulkomaailma keskustella tuonne (esim. "Irkkiin sieltä sohvalta!" "Tulkaa syömään?" "Lol, jätkä on taas yksin siellä keskellä yötä" tms. olisivat käteviä ja hyödyllisiä viestejä). Kiltis-ulkomaailma-interface on toteutettu jo (webbikameroilla), mutta tällainen ulkomaailma-kiltis-suuntaan toimiva kommunikaatio puuttuu.
Projekti alkoi massiivisella suunnittelulla, pohdinnalla ja googlailulla, että riittäisivätköhän nuo 74hc595-shiftregbufferit ajamaan ledejä kun niiden speksattu virran-/tehonkesto on vähän eri luokkaa kuin mitä ledipaneelin kulutus kaikkien ollessa päällä. Kuitenkin jopa valmiina ostettavissa palikoissa ei aina välttämättä ole tehokkaampia buffereita (uln2803 tms.) niiden perässä. Tosin ne sitten eivät ajakaan ledejä kovin kirkkaasti kun ilmoittavat virrankulutukseksikin jotain suhteellisen pientä.
Päätin tutkia empiirisesti molempia vaihtoehtoja. Merkittävää kirkkauseroa tai 595:n lämpenemistä ei laajoissa testeissä havaittu. Siispä (lähinnä tilansäästön vuoksi - matriisimoduulit ovat kooltaan n. 3x3 cm ja olisi kiva mahduttaa piirilevykin pieneen tilaan, tästä enemmän myöhempänä) päätin jättää trankkubufferit pois. Ja maksaahan ne rahaakin. Toivottavasti 595:t eivät käryä sitten joskus vuoden käytön jälkeen. (Keskimääräistä kirkkautta voi tosin aina säätää softalla. 8 korkea*8 leveä*2 väriä*0.02 A/led on teoreettiset kaksi ja puoli ampeeria näyttömoduulia kohden -- onneksi tuossa tulee rullailemaan lähinnä tekstiä, eli virrankulutus tulee olemaan rutkasti vähemmän; luokkaa 20% tms.) Tästä vaiheesta ei lie vielä kuvia, kasasin vain näkkärille moduulin ja oheiselektroniikat sekä mielettömän määrän hyppylankoja. Testailuohjaus ammattimaisesti pc:n rinnakkaisportin kautta.
Kun proof-of-concept-testailut oli temppuiltu, siirryin piirilevyn suunnitteluun (Eaglella piirtelin, kun se on aika standardi, aika helppo ja ilmainen (pienille levyille)). En ole aiemmin raapustanut sillä juuri mitään, joten jälki voi olla vähän epäammattimaista. Ensin piirtelin parin moduulin tempun läpireikäkomponenteilla, kun smd-osia en vielä jaksanut miettiä. Myöskin kun tämä oli ensimmäinen kotona syövyttämäni piirilevy (viimein jaksoin vaivautua häsläämään senkin systeemin kasaan), niin hävyttömän ohuita vetoja en viitsinyt testailla aluksi.
Moduulit irroitettavasti headereissa kiinni, sillä tämä testilankku ei tule jatkuvaan käyttöön.
Alaosa levystä valottui turhan pitkään ja vedot olivat vähän epäluotettavia -- piti tinailla vahvikkeita. Pöytälampun kanssa on aina vähän arpomista, että kuinka kauas levyn laittaa ja valottaako 20, 22 vai 25 minuuttia. Liian pitkään niin lakka saa liikaa valoa jolloin kuparia syöpyy liikaa, kuten tässä kävi.
Haitek. Joku syvä ja kohtuullisen kapea kannu ikeasta, pari jotain karkkipurkkia, lipeää kehitykseen ja ferrikloridia itse syövytykseen. Valotuksen hoiti geneerinen 11W loisteputkipöytälamppu (ei kuvassa). Ei se tosiaan ole niin justiinsa.
Tästä otin videotakin. Näin kapealla näytöllä ei juuri saa rullailevasta graafiikasta selvää, mutta tilanne korjaantuu viimeistään sitten kun moduuleita on se kymmenen tai enemmän. Kännykameran videointilaatu ei myöskään ole mitään huippua.
Nyt kun on piirilevykuviotkin todettu toimivaksi sekä printteriporttipurkalla että erillisellä avr-ohjainmoduulilla, voisi alkaa miettiä sitä isompaa vehjettä. Noita tosiaan olisi hyvä saada useampi vierekkäin - vaikka se kymmenen. Jokainen erillinen luku on kuitenkin hankala erikoistapaus, joten sovitaan että olisi kiva saada vierekkäin N kpl, missä N joku järkevä kokonaisluku. Tehdään levy jokseenkin matemaattisen induktion periaatteella, eli vaikka sovitaan että saadaan yksi moduuli aina alkuun, ja jos on joku moduuli, niin sen perään saadaan aina toinen. Tästä seuraa ääretön määrä mahdollisia moduuleita.
Ensimmäinen moduuli on pieni erikoistapaus, koska se yhdistetään suoraan liittimeen, josta saadaan datat. Myös toinen moduuli poikkeaa muista hieman, sillä ennen sitä on tämä erikoistapausmoduuli. Muut sitten ovat kaikki samanlaisia, joita copypastetaan niin monta kuin huvittaa -- datat tulevat vasemmalta ja ne ketjutetaan oikealle edelleen. Teoriassa tätä voisi jatkaa ikuisuuksiin, mutta jännitehäviöt, ketjun datan syöttötaajuus yms. rajoittavat käytännön toteutusta jossain määrin. Eaglen ilmaisessa kevytversioissa on rajoitus 160*100 mm levylle, mutta piirilevykuvaa voi copypasteta kuvankäsittelyohjelmassa peräkkäin ja printata valotusmaskin siitä sitten.
Tässä vaiheessa olisi ehkä hyvä esitellä moduulien ohjaustekniikka ja kaapelissa kulkeva tieto. 74hc595 on siis shift register (suomeksi kai siirtorekisteri). Se saa tässä sarjamuodossa kellosignaalin kera bittejä, joista varastoi kahdeksan, ja pulpauttaa aina uuden bitin tullessa vanhimman ulos seuraavaa rekisteriä varten. Latch-signaalilla kytketään nämä varastoidut bitit ulostulonastoihin, jotka on siis tuplabufferoitu. Tuo wikipedia-artikkeli valottaa. Ledimatriisit ovat kaksivärisiä, ja koska sarakkeita on kahdeksan, yhden rivin näyttötieto vie 16 bittiä. Yksi 595 varastoi vasemman puoliskon ja toinen oikean. Kun näitä ketjutetaan peräkkäin, saadaan samaan signaaliin kaikkien moduulien rivitieto.
POV:n ansiosta riittää, että vain yksi rivi palaa kerralla (ledimoduulin matriisiluonteen takia kaikkia yksittäisiä pikseleitä ei voi ohjata samanaikaisesti -- vain rivejä ja sarakkeita voi; näyttöä multiplexataan). Buffereille syötetään yhden rivin pikselitieto, jonka jälkeen rivi sytytetään. Sitten ruvetaan siirtämään seuraavaa riviä, ja kun se on hoidettu, sammutetaan edellinen rivi ja sytytetään tämä seuraava, jne. Rivejä ajavat kaikille moduuleille yhteiset transistorit jotka sijaitsevat kontrollilevyllä (toistaiseksi), ja sarakkeissa on siis nämä SR:t.
Ohjauskaapelissa kulkee SR:ien kello-, data- ja latch-signaalit, käyttöjännite ja maa, sekä rivien jännitteet. Nämä on kaikki ketjutettava joka moduulille sellaisenaan, poislukien datasignaali, joka siirtyy aina jokaisen rekisterin ulostulonastasta seuraavan sisääntuloon. Pitänee jossain välissä miettiä korkean taajuuden ja häiriöiden jänniä tekijöitä.
No niin. Pienen pyörittelyn tuloksena tuli kohtalainen piirilevy smd-osilla (ah, pienempi ja vähemmän reikien porailua). Vielä en kehtaa alkaa puljaamaan kaksipuolisten levyjen kanssa, jotenka tein nuo yksipuolisina. Rivisignaalien ketjutus osoittautui merkittäväksi ongelmaksi, ja ne täytyi johdottaa joka moduulille erikseen hyppylangoilla. Kahdeksan hyppylankaa per moduuli - kamalaa. Ensi kerraksi kyllä puljaan kaksipuoliset levyt.
Yksi atmega8-mikrokontrolleri ohjaa koko läjää edellä kuvatulla SPI:llä. Toistaiseksi ihan pc sylkee näyttödataa kontrollerille rs232-sarjaväylän kautta. Mikrokontrollerin firmis ja pc:n ohjaussofta ovat aika tiukasti yhteen niputettua koodia, mikä tulee muuttumaan vielä mukavammaksi projektin kehittyessä. Tästä syystä en julkaise koodeja vielä; tämä koko teksti onkin lähinnä väliraportti. Myöskään piirilevyn projektitiedostoja en keskeneräisenä anna. Ketään kuitenkaan edes kiinnosta.
Ja sitten mitä kaikki varmasti ovat odottaneet - video!
Tarkkasilmäisimmät saattoivat huomata, että värit ovat käänteisesti suhteessa kahden moduulin testiin. Ohjauskoodibugi, bitit väärin päin... Huomionarvoista on esim. se, noissa tosiaan on vain kahta eri väriä, joista voi sotkea "neljää" eli pois päältä, punainen, vihreä ja pun+vihr=keltainen. Lisäksi idean eri värisävyjen pikselikohtaisesta ohjaamisesta hylkäsin heti alkuunsa, eli eri sävyjä on toistaiseksi tosiaan nuo neljä vain -- teksti-infonäytössä ei kyllä kukaan järkevä liukuvärejä kaipaakaan. Näin suuren määrän moduuleja ollessa kyseessä ja kun ohjauspiirejä on vain yksi, jo koko 10 moduulin mittaisen rimpulan ohjaaminen esim. 50 hertsin taajuudella vaatii yli 64 kilohertsin kelloa. Koska moduuleja tullee jokseenkin 20, väylänopeudeksi tulee ~128 kilohertsiä. Tähän saisi triviaalisti koko näytön kirkkauden säädön sammuttamalla rivin ohjauksen ennenaikaisesti (PWM).
Pikselikohtaisesti tähän kuluisi hävyttömästi enemmän aikaa tuon rivi kerrallaan -temppuilun sijaan -- pikseli buffereille, jokin aika päällä, jokin aika pois, seuraava pikseli.. missä päällä+pois-aika on jaettu esim. 256 väliin jos "tavallista" kirkkaussäätöä halutaan, joka yleensä on muuallakin käytössä. Tällöin tarvitaan karkeasti 8*8*2*256=32768 aikayksikköä tai kellopulssia jo yhden moduulin yhteen "frameen" -- on/off-säädöllä 8*8*2 pulssia, eli 256 kertaa vähemmän aikaa. Vaikka 256 sävyeroa voi olla vähän liioittelua, tulee silti ajankulutukseen melkoinen ero.
Tämän lisäksi itse asiassa pahin ongelma tulee siitä, että rivejä ohjatessa jokainen rivi on päällä kokonaan kerrallaan. Tällöin ledi on päällä kahdeksasosan (rivejä on kahdeksan) koko ruudun päivitysajasta. Jos halutaan sopivaa keskimääräistä kirkkautta, olisi sille annettava kahdeksankertainen virta. Jotkin ledit eivät tätä kestä. Pikselipohjaisesti yhdellä moduulilla joka ledi olisi päällä erikseen, eli 1/(8*8*2) eli 1/128 päivitysajasta ellei temppuile hankalasti. Tällöin näyttö olisi jo melkoisen himmeä.
Jos moduuleita on useampia, täytyisi niitä jokaista ohjata erikseen, tai ledin päälläoloaika laskisi aivan naurettavaksi. Tällöin tarvittaisiin jo suurin piirtein oma mikrokontrolleri joka moduulille tällaista temppukäsittelyä varten -- jee, rinnakkaisuutta. Kompromissiefektejä varten voisi toki kyhätä sarakekohtaisia himmennyksiä, mutta tällöinkin kirkkaus tulisi ongelmaksi nopean multiplexauksen takia. Voisi kyllä miettiä joskus ihan aitoja rgb-moduuleita ja erillisiä kontrollereita per paneeli sekä yhtä master-kontrolleria ohjaamaan näitä kaikkia sitten kun suuruudenhulluus saa nämä kaksiväriset tuntumaan tylsiltä.
Projekti ei ole kyllä vielä läheskään valmis. Alustavasti löytyy jonkinlainen skema ledimatriisista ja ajurilevystä jossa siis mukana riviohjaustransistorit (speksattu muistaakseni virralle 4 A, riittää useimmiten ainakin tähän tekstinäyttöön mutta naurettaviin tapauksiin tarvitsisi sitten järeämmät) seuraavaan versioon. Seuraavaksi sitten pyörittelemään ohjauslevylle ihan oikeasti piirilevyä sekä kaksipuolista levyä moduuliketjulle koska noita leipälevytemppuja ja hyppylankaviidakoita ei jaksa enää. Ohjaussoftat ovat luokkaa ihan tunkki mutta toimii, mitään modulaarisuutta tai konffattavuutta ei myöskään vielä ole. Päivitystä tulee kun tulee. Puuhastelen mitä milloinkin huvittaa, ja tämäkin projekti saattaa viivästyä jonkin toisen puuhan tai kouluhommien takia. Olisi erityisen hauskaa saada esim. assyille valmiiksi jonkinnäköinen ISO(hko) kaksiulotteinen (ts. moduulirivejä allekkain -- tästä syystä on kiva saada ohjauselektroniikka pienemmäksi tai yhtä suureksi kuin näyttö: rivejä saisi tasan suoraan allekkain ilman tuota ohjauselektroniikan vievää välitilaa) näyttö johon saisi jonkin hienon demon pyörimään. Saattaa olla vain toiveajatteluakin -- tosi iso vaatii mm. useamman ohjausväylän järkevän päivitystaajuuden saamiseksi yms. ja suunnittelu vie aikaa.
Joku voisi kysyä, että miksi tehdä tällainen näin käsin kun valmiina paketteinakin löytyy aivan vastaavia useamman moduulin näyttöjä. Jostain syystä on vain hauskaa toisinaan näpertää projekti ruohonjuuritasolta alkaen itse. Lisäksi nautin opettelusta ja oppimisesta, ja joka projektissa oppii jostain jonkin verran, ja mitä syvemmin perehtyy aiheeseen, sitä paremmin sen oppii. Aikaa tosin saa kulumaan merkittävästi, ja bisnesmaailmassa tällainen ei toimisi ollenkaan -- valmiit kokonaisuudet joissa on muutama moduuli maksavat alle kympin + vähän postikuluja (sure electronics), ja suunnitteluun menevät työtunnit maksaisivat työnantajalle merkittävästi enemmän. Harrastamisessa ja akateemisessa tutkimuksessa taas vähän eri asia. Lisäksi itse kyhääminen tuo aina jotain vapautta, kun valmiissa palikoissa on väkisinkin jonkinlaisia rajoittavia tekijöitä.
7 kommenttia
Oma kommenttisi
Mielipide tämän sivun asiasta? Kirjoita toki. Älä raapusta kuitenkaan ihan asiattomia juttuja.
Jos on yksityisempää asiaa, tarkkaa kysyttävää tai aihetta pidemmälle keskustelulle, käytä yhteydenottolomaketta kommentoinnin sijaan.
Hölmöt kommentit saatetaan moderoida pois jälkikäteen.
http://www.sureelectronics.net/goods.php?id=907
miten tuohon saisi niin että voisi ohjelmoida usbilla tekstin ja toimisi paristolla?