[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!
Itselläni on käytössä htpc kone vdr-softalla, ja koneessa on kiinni 