LED-matriisinäytön korjausta

(0 comments)

Lednäyttö toiminnassa
Jokin aika sitten hacklabille ilmestyi iso ledinäyttö. Nyt näyttö on korjattu ja otettu käyttöön.

Kyseisen led-näytön tutkiminen alkoi purkamisella, sillä näytöstä ei juurikaan ollut tietoa saatavilla internetistä. Näytön valmistaja on Mobitec ja näyttö on tarkoitettu käytettäväksi mm. joukkoliikenteessä. Liitäntöinä näytössä oli 2 paksua kaapelia ja 4 signaalijohdinta, mutta näistä ei vielä pystytty paljoa päättelemään. Mitatessa resistanssia virransyötöksi olettettujen paksujen johtimien välillä saatiin tulokseksi 0 ohm, joka viittasi oikosulkuun. Tätä tuki myös näytön taakse spraymaalilla kirjoitettu teksti "Rikki/Romu". 

Kun näyttö saatiin auki lukuisien torx-ruuvien poistamisen jälkeen, takapaneelin alta paljastui suuri määrä piirilevyjä ja johtoja. Piirilevyt tunnistettiin neljäksi hakkurimoduuliksi, kontrolleriksi ja kahdeksaksi LED-näyttöpaneeliksi. Hakkurimoduuleiden datalehtiä ei ollut suoraan saatavilla, mutta mallimerkinnöistä voitiin päätellä syöttöjännitteen olevan 24 V, lähtöjännitteen 3.3 V ja tehon 65 W. Kaikki hakkurimoduulit oli kytketty rinnakkain, ja moduuleita testatessa toisistaan irroitettuna selvisi, että vain yksi näistä oli toimiva -- loput olivat joko oikosulussa tai täysin mykkiä. Koska korvaavia moduuleita ei ollut saatavilla ja näyttöä haluttiin käyttää 24 voltin ajoneuvojärjestelmän ulkopuolella, päätettiin näyttöä syöttää suoraan verkkovirtahakkurilla. 

Hakkurimoduulien yhteistehoksi muodostui 260 W. Olettaen näytön ottavan täyden tehon saatiin kokonaisvirraksi laskettua 260 W / 3.3 V = 78.8 A, eli varsin hurja lukema. Suoraan tälläisillä spekseillä olevaa virtalähdettä ei löytynyt tarvikehyllyistä, mutta tehokas 40 A 5 V Meanwell-hakkuri sen sijaan löytyi. Hakkurien tyypillisestä toteutustavasta johtuen on varsin helppoa muuttaa niiden jännitettä, ja kyseisessä hakkurissa olikin valmiiksi trimmeri jännitteen säätämiseen. Säätöalue ei kuitenkaan ollut aivan riittävä, mutta lisäämällä ylimääräinen vastus ennen potentiometriä, saatiin lähteen sisäistä jännitteenjakajaa muutettua niin, että 3.3 V lähtöjännite vastaa lähteen 2.5 V referenssijännitettä. Jostain syystä hakkuri ei kuitenkaan suostunut laskemaan jännitettä alle 3.6 V, mutta todettiin että tämä on todenäköisesti juuri ja juuri elektroniikan toleranssien sisällä. Myöskin alhaisella jännitteellä ja isoilla virroilla johdoissa tapahtuu häviöitä, joten korkeampi lähtöjännite kompensoi häviöitä.

Uusi hakkuri ei mahtunut enää näytön sisään, mutta tälle laserleikattiin ja 3D-tulostettiin ulkoinen puoliavoin kotelointi. Näytöstä vedettiin ulos riittävän paksut kaapelit. Kun käyttöjännitepuoli oltiin saatu kuntoon, voitiin siirtyä näytön ohjauselektroniikan tutkimiseen.

Ohjainkorttia tarkastellessa havaittiin, että näytön älynä toimii AVR-mikrokontrolleri. Ohjainkortilla on myös pieni hakkuri, joka nostaa näytön 3.3 V syöttöjännitteen AVR:n käyttämäksi 5 voltiksi. Kontrollerikortilla on myös koodikytkin sekä punainen nappi, jota painamalla näytölle ilmestyi firmwaren versiotieto sekä koodikytkimestä valittu osoite. Itse LED-paneelit on näytössä ketjutettu leveillä lattakaapeleilla, ja ensimmäinen paneeli kytkeytyy kontrolleriin. LED-paneeleissa on ledien tarvitsemat driver-piirit ja siirtorekisterit, joilla yksittäiset ledit voidaan ohjata päälle tai pois. Viimeisessä paneelissa on myös valovastus, joka säätää LED-ajureiden virtaa. Kontrollerikortin ulkoiseksi väyläksi paljastui RS485, sillä kortilla oli MAX485-piiri, joka kytkeytyi suoraan ulkoisen datakaapelin johtimiin. RS485 on paljon teollisuudessa ja automaatiossa käytetty sarjaväylästandardi, jossa kahdella virtasilmukkaparilla voidaan siirtää sarjadataa pitkiäkin matkoja häiriöttömästi. RS485-ohjaus kuitenkin vaatii kumpaankin päähän väyläajurit ja sopivan vuonohjauksen. Näyttö kokeiltiin kytkeä itsetehtyyn RS422 - TTL -UART-adapteriin, mutta dataa ei tällä saatu liikkumaan, joten joko kaapeloinnissa tai jommassa kummassa väyläajurissa oli vikaa. Tätä tarkemmin tutkimatta päätettiin poistaa MAX485 piiri, ja kytkeä johtimet suoraan AVR-mikrokontrollerin UART-nastoihin, jolloin saatiin suoraan TTL-yhteensopiva sarjaväylä käyttöön. Näyttö myös vaati 24 V herätevirran kytkemisen yhteen ohjausjohdoista, jotta näytölle saataisiin kuvaa. Tämä ohitettiin juottamalla hyppylanka 5 V jännitekiskosta suoraan herätevirran jännitteenjakajan keskelle.

Kontrolleri kytkettiin tietokoneeseen USB - TTL -UART-adapterilla, ja näytölle kokeiltiin ajaa suuri määrä satunnaista bittivirtaa, mutta sarjaportista ei saatu vastausta eikä näytölle ilmestynyt kuvaa. Tämä tarkoitti sitä, että joko kontrollerissa on jotain vikaa (epätodennäköistä, sillä nappia painamalla saatiin näyttö heräämään), tai että näyttö käyttää edistyneempää protokollaa. Koska näytön mukana ei tullut alkuperäistä ohjausyksikköä, ei voitu näytön protokollaa haistella sarjaväylästä esille. Myöskään kyseisellä näytölle ei suoraan ollut tarjolla tietoa, josta protokolla olisi voitu päätellä. Protokollan reverse-engineeraaminen olisi ollut mahdollista myös lukemalla AVR:n ohjelmamuisti tietokoneelle käyttäen ISP- tai JTAG-väylää -- olettaen että suojaus-fuseja ei ole asetettu --, mutta internet-hakukoneen käyttö teki tämän tarpeettomaksi.

Pienen hakusession jälkeen paljastui, että samalla valmistajalla on ollut myös vanhemman tekniikan FlipDot-matriisinäyttöjä samaan käyttötarkoitukseen. Näiden käyttämä protokolla oli saatu selville, joten tätä päätettiin testa myös ledinäytölle. Protokollan perusteella laadittiin sopiva datapaketti sisältäen vaadittavan komennon ja tarkastussumman, ja kun tämä syötettiin näytölle, siihen ilmestyi annettu teksti!
Hakusessiota jatkamalla löytyi lopulta GitHubista valmis Python-toteutus FlipDot-näyttöjen ohjaukseen: https://github.com/bjarnekvae/pymobitec-flipdot, ja tätä soveltaen saatiin tietokone juttelemaan näytölle haluttua sisältöä.

 

Koska näyttöä ohjaamaan ei haluttu jättää pysyvästi tietokonetta, hankittiin tätä tehtävää varten Raspberry Pi Zero W. Zero W:ssä on sisäänrakennettu langaton verkko sekä yllinkyllin tehoa muuttamaan haluttua informaatiota näytölle sopiviksi sarjamerkeiksi. Zero W haluttiin integroida osaksi näyttöä niin, että ulkopuolisia kytkentöjä tai laitteita ei tarvita näytön käyttämiseksi. Koska näytön alkuperäinen kontrolleri oli kiinnitetty pieneen irrotettavaan huoltoluukkuun, asennettiin myös Raspberry Pi samalle alustalle. Tämä kuitenkin tarkoitti sitä, että langattoman verkon kuuluvuus vaimentuisi huomattavasti metallikotelon sisällä. Zero W -levyllä on sopivasti testausta varten tarkoitettu kohta pienelle RF liittimelle, ja liittimen asentamalla ja yhtä vastusta siirtämällä saadaan ulkoinen antenni liitettyä käyttöön levylle integroidun sijaan. Tällöin antenni voidaan viedä ulos kotelosta kaapelilla. Liittimen asentamisen ja johdon kytkemisen jälkeen porattiin reikä näytön yläreunaan, johon johdossa oleva SMA-liitin kiinnitettiin. Ohjainkorttia muokattiin hieman lisäämällä yksinkertainen jännitteenalennin sarjaväylään, jolloin saatiin suojattua Raspberry Pin GPIO/UART, sillä nämä eivät kestä 3.3 V suurempaa jännitettä. Myös virransyöttö otettiin näytön 3.3 V lähteestä ja liitettiin kontrollerin liittimeen hyppylangalla.

Kun antenni oli liitetty, käyttöjärjestelmä Raspbian asennettu muistikortille ja näyttöön kytketty virrat, olikin varsin helppoa asentaa tarvittavat Python-kirjastot ja luoda pieni testiohjelma, joka näyttää kelloa ja tekstiä näytöllä käyttäen pymobitec-flipdot ja pyserial -kirjastoja. Näyttö on kytketty hacklabin langattomaan verkkoon ja löytyy lähiverkosta osoitteesta trehacklab@trehacklabled.local, johon voidaan kytkeytyä SSH:lla. Näyttö kuitenkin kaipaa jatkokehitystä erilaisen informaation näyttämiseksi, ja ehdotuksia sovellusideoista on jo saatu -- esimerkisi tekstin lähettäminen näytölle Matrix-keskustelukanavabotin kautta. Myös näytön lopullinen asennuspaikka on vielä hakusessa, mutta eiköhän se ennemmin tai myöhemmin nosteta seinälle, ja näin se muodostuu pysyväksi osaksi hacklabin kalustoa. 

Current rating: 4.7

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required