[size=150]1. Johdanto[/size]
Philipsin kehittämä Ambilight on tekniikka, jossa television taakse on sijoitettu tusina RGB-LEDejä. Näiden LEDien tehtävänä on valaista television taustalla oleva seinä värillä joka vastaa ruudulla näkyviä värejä. Näin saadaan silmien rasitusta vähennettyä ja lisäksi efekti parhaimmillaan lisää esim. elokuvan mukaansa tempaavuutta.
[size=150]2. Klooni ja sen rakentaminen[/size]
Ambilight-klooneja on netissä kolmetoista tusinassa. Resepti on yksinkertainen: Arduino ohjaamassa pulssinleveysmodulaatiolla RGB-ledejä jotka sijoitetaan telkkarin tai PC:n monitorin taakse. VLC:n plug-in tai joku muu vastaava ohjelma ottaa ruutukaappauksia parikymmentä kertaa sekunnissa ja laskee keskiarvot eri LEDeille. LEDien kirkkaudet pusketaan sarjaliitännän kautta Arduinolla ja voila – Ambilight klooni on syntynyt. Esimerkkinä tällaisesta ratkaisusta on Ruuvipenkissäkin kehuja kerännyt LiveLight-projekti.
Edellisen kaltainen ratkaisu toimii mainiosti yhdellä ehdolla: että kuvalähteenä on tietokone. Kukapa haluaa katsoa esimerkiksi televisiota olohuoneessa HTPC:n TV-virittimen kautta kun suurella todennäköisyydellä vierestä löytyy myös tallentava digiboksi jota on paljon helpompi käyttää kaukosäätimellä. Alkuperäinen Philipsin Ambilight toimi millä tahansa kuvalähteellä.
Historia tuntee ainakin yhden itsenäisesti toimivan Ambilight-kloonin, Chameleonin. Chameleonin oli tarkoitus toimia itsenäisesti komposiitti tai S-video -liitännöistä. Projekti kuitenkin kuoli jo prototyyppivaiheessa viisi vuotta sitten.
Itse olen pohtinut modernin, itsenäisen Ambilight-kloonin ideaa jo pidempään. Nykyään mikrokontrolleritkin menevät jo 150 MHz:n paremmalla puolella kellotaajuuksissa, joten monimutkaisia FPGA-virityksiä (kuten Chameleonissa) ei enää tarvita. Periaatteessa tarvitaan vain HDMI-vastaanotin, mikrokontrolleri ja RGB LEDit. Käytännössä tarvitaan hieman enemmän, mutta ei paljon.
[size=150]3. AmbiHDMI[/size]
Oma projektini on nimeltään AmbiHDMI. Sen ideana on toteuttaa itsenäisesti toimiva Ambilight-klooni joka ottaa kuvadatan suoraan HDMI-liitännästä ja tukee resoluutioita aina 1080p-teräväpiirtoon asti. Järjestelmän sydämenä on ADV7611 joka on Analog Devicesin HDMI-vastaanotin. Päämikrokontrollerina toimii STM32F4 joka toimii 168 MHz:n taajuudella.
Projekti on jaettu kahteen osaan, ja myös tämä artikkeli tullaan jakamaan kahteen osaan. Ensimmäinen osa on itse AmbiHDMI-prosessointilevy jolla on HDMI-vastaanotin ja mikrokontrolleri. Toinen osa, johon keskityn tässä artikkelissa, on RGB LED-ohjaus ja sen piirilevy. Ensimmäinen osa tulee myöhemmin, kunhan saan ohjelmiston siinä toimimaan. Piirilevy on jo osaksi kasattuna.
Systeemi on siis modulaarinen. RGB-levy, joka sisältää yhden RGB LEDin, AVR ATtiny13A-mikrokontrollerin ja kolme N-kanavaista MOSFETtiä hoitaa valaistuksen. AVR:n kellotaajuus on 9,6 MHz (Fosc) jonka muodostaa sisäinen kalibroitu RC-oskillaattori.
RGB-levyllä on kolme liitintä. Vasemmalla on IN, keskellä ICSP jolla ohjelmoidaan AVR ja oikealla OUT.
[size=150]4. Toiminta[/size]
IN- ja OUT-liittimet ovat täsmälleen samat ja niiden kautta RGB-levyjä voi ketjuttaa peräkkäin niin monta kuin tarvitsee. Niissä kulkee +5V ja maadoitus sekä keskellä data. Data on yksinkertainen 9,6 kbps nopeudella liikennöivä yksisuuntainen RS232-tyyppinen linkki. Ohjausviestit ovat nelitavuisia: ensiksi tulee laiteosoite (0-255) ja sen perään kolme kirkkaustietoa (R, G ja B, kaikki 0-255). RGB-levyn havaitessa data-väylässä ns. start-bitin (linja tippuu alatilaan) se aloittaa vastaanoton. Jos ensimmäinen tavu vastaa levyn omaa osoitetta, se kaappaa myös seuraavat kolme tavua ja asettaa ne RGB-LEDin kirkkaustiedoiksi.
LEDin kirkkautta ohjataan pulssinleveysmodulaatiolla (PWM). Metodi on sama kuin LiveLightissä. Jokaiselle osavärille on oma N-kanavainen MOSFET, joka katkoo maadoitusta yhteisanodi-LEDille. ATtiny13A:ssa on vain yksi ajastin, mutta enempää me ei tarvitakaan. Ajastin liipaistaan Fosc/256 kertaa sekunnissa. Ajastimen ylivuoto aiheuttaa keskeytyksen jossa hoidetaan varsinainen PWM-ohjaus. Globaali muuttuja sisältää PWM-indeksin jota kasvatetaan yhdellä jokaisella keskeytysfunktion ajokerralla. Jos muuttuja nousee 256:n, se nollataan. Keskeytyksessä verrataan PWM-indeksiä jokaisen värikanavan indeksiin. Värikanavan ollessa suurempi kuin PWM-indeksi, pidetään MOSFET johtavassa tilassa. Kun/jos indeksi kasvaa suuremmaksi, MOSFET lakkaa johtamasta.
Laskennallinen PWM-taajuus on Fosc/256/256, eli n. 146 Hz. Ihmissilmä ei huomaa tällä taajuudella vilkkumista.
Video RGB-levyn testauksesta on saatavilla tästä osoitteesta: http://entropia.1g.fi/kuvat/Projektit/AmbiHDMI/MVI_5772.MOV
[size=150]5. Lopuksi[/size]
RGB-levy on yksinkertainen ja hoitaa hommansa. Koska järjestelmä on modulaarinen, voidaan koko RGB-levy korvata paremmalla versiolla jos ongelmia ilmenee.
Toinen osa, jossa käsittelen 80% koko projektin työpanoksesta, tulee myöhemmin. En osaa sanoa millä aikataululla, mutta seuraavien viikkojen aikana. Jos sinulla on parannusehdotuksia tai muita kommentteja projektiin liittyen, sana on vapaa!