AmbiHDMI - Ambilight-klooni HDMI-liitännällä, osa 1

[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!

Tämähän vaikuttaa mielenkiintoiselta :slight_smile: Itselläni on käytössä htpc kone vdr-softalla, ja koneessa on kiinni DF10CH atmolight valo-ohjain. Toimii hienosti htpc:n kanssa, mutta harmittaa kun blu-ray -soittimen kanssa ei saa valoja toimimaan.

Heh, vanhan koulun läpijuotettavilla komponenteilla. :slight_smile:

Sain eilen juotettua kasaan AmbiHDMI:n toisen levyn, eli HDMI-vastaanottimen. Pelkkien virtojen kytkemisen jälkeen ei vielä paljon eloa näkynyt, kaikki lähdöt on ilmeisesti korkeaimpedanssisessa tilassa eikä oskillaattori pyöri. Resetissä lähtee oskillaattori käyntiin, eli ilmeisesti vastaanotin on virransäästötilassa resetin jälkeen. Pitäis I2C:llä herättää se toimintatilaan. Pitänee viikonloppuna katsoa jos saisi I2C-jutustelua käyntiin.

Jep, ja tuo levy on melko iso (100x150mm). En ole oikein löytänyt koteloa tuolle, joten levy on velcrolla telkkarin takana kiinni :slight_smile:

Hoi!

Hienoa että joku sai aikaan vihdoin HDMI-liitännäisen mallin!
LiveLight projekti on kiertänyt sen kaukaa mahdollisen kaupallistamisen takia. Kannattaapi olla tarkkana ja lukaista seuraava patentti joka pitää kilpailijoiden ambilight töllöt pois markkinoilta:

Ilmeisesti patentti kieltää siis muilta väri-informaation purkamisen “videosignaalista” :confused:

Mutta jälleen kerran - kun joku rakentaa jotan kivaa itselleen on siihen suuryritysten paha puuttua :wink:

Jahka pääset ohjelmoimaan, kannattaa käydä vilkaisemassa LiveLight purkin uusimpia lähdekoodeja, löytyy varmasi hyödyllisiä algoritmeja (kuten nopea bitwise keskiarvo smoothing arvoja tallentamatta)!

Jään innolla seuraamaan mihin järjestelmäsi kehittyy! Kannattaa myös vilkaista I2C-ohjattavaa RGB LED-nauhaa. On vähän kalliimpaa mutta voit jättää puolet komponenteista pois eikä tarvitse huolehtia PWM nopeuksista kun nauhassa on itsessään kahden LED:in välein prossu.

Kyseisellä nauhalla toteutettu iBelight youtube.com/watch?v=S4a9Qlwk8kA

Erittäin mielenkiintoinen projekti. Ensimmäisenä tulee mieleen, että mitä mahtaa tapahtua HDCP puolella tuolle HDMI signaalille?

Käsittääkseni tuosta ADV7611 on olemassa HDCP yhteensopiva versio, mutta sen myynnissä on rajoituksia (ei käsittääkseni muille kuin yrityksille jotka ovat lisensoineet ko. tekniikan).

Datalehti kertoo että ADV7611:ssa on sisäänrakennettuna tarvittavat HDCP-purkumekanismit ja -avaimet, joten pitäisi onnistua myös salatun sisällön käyttäminen. Tosin itselläni ei ole mitän käytännön informaatiota tästä, ja HDCP on todo-listalla viimeisenä, joten ei kannata vielä pidättää hengitystä. :slight_smile:

P.s. viime viikko meni ulkomaanreissulla joten en ole edistynyt HDMI-laudan kanssa vielä mihinkään.

Minä oon kanssa tästä ehdottoman kiinnostunut jos ja kun informaation pystyy purkamaan suoraan HDMI:stä ilman tietokonetta. Ihan mahtavuutta joka on pakko saada! :slight_smile:

analog.com/en/audiovideo-pro … oduct.html

ez.analog.com/thread/11340

Tuossa muutama linkki asiaan liittyen. Piiristä siis kahta eri versiota, josta toista ilman HDCP avaimia myydään niille jotka eivät ole tota HDCP lisensoineet. Ilman HDCP toki laite toimii salaamattomilla signaaleilla, mutta käytännössä silloin laitetta ei voi käyttää esim. Bluray soittimien taikka Full HD digiboksien kanssa, taikka minkään muun lähteen kanssa, joka vaatii toimivan HDCP linkin (myös tietokoneen Bluray soittimet). Käytännössä XBMC ja VLC esim. toimivat toki.

Projekti on hieno ja tuon asian vain sen takia esille, että jos kaikki muuten lähtee rokkaamaan ongelmitta ja projekti onnistuu, niin ei sitten tule lopussa yllätyksenä tämä että käyttö ei ehkä onnistukaan suunnitellulla tavalla.

Miten laite on tarkoitus kytkeä HDMI signaaliin kiinni, tuleeko se toiseksi näytöksi jollain tapaa (lähteessä kaksi ulostuloa) vai tuleeko se HDMI kaapeliin välille ottaen sisään sen mitä esim. digiboksi lähettää ja työntää sen sitten eteenpäin telkkarille?

copter: Kiitoksia selvitystyöstä, eli tällä laitteella ei siis HDCP:tä pureta. :stuck_out_tongue:

Prototyyppivaiheessa pitää käyttää erillistä HDMI-splitteriä jolla saadaan yksi signaalilähde jaettua kahteen, mutta jos/kun projekti vaikuttaa toimivalta niin oli tarkoitus laittaa samaan soppaan myös HDMI-lähetin, jolloin laite toimii passthru-periaatteella.

Blu-ray-leffat kun on pois suljettuja, niin mahdollisia käyttökohteita on edelleen esimerkiksi pelikonsolit ja normaali digi-TV. Tietty tietokone on myös mahdollinen kuvalähde.

Nyt kun mielikuvitus rupesi taas lentämään niin voisinpa avata yhden paneelivikaisen Acerin LCD-näytön ja katsoa mikä vastaanotin siellä on, näyttö kun lupaa olevansa HDCP-yhteensopiva…

Edit: Tarkistin vielä, omat osani ovat tyyppiä ADV7611BSWZ-P eli niissä ei ole HDCP-avaimia.

On olemassa “HDCP Stripper” laitteita joilla voi tuon HDCP suojauksen poistaa. Niistä kaiketi toimivin on HDFury4, jota saa tilattua mm. Ruotsista ja Briteistä. Ovat käsittääkseni suosittuja PS3 pelaajien kesken, koska PS3 ei suostu työntämään HD laatuista kuvaa vanhempiin televisioihin ja projektoreihin, joissa ei ole HDCP tukea.

3dfury.co.uk/3dfury–hdfury4-1-p.asp

Laite siis tulee HDCP suojattuun signaaliin kiinni, purkaa HDCP suojauksen ja sitten työntää halutussa formaatissa (tässä tapauksessa DVI) puretun signaalin eteenpäin. Eli jos saat tuon korttisi toimimaan suojaamattomalla signaalilla, niin tuon boksin avulla sitten sitä voi käyttää myös muiden lähteiden kanssa.

Koska laite tulee myös analogista ulostuloa (VGA), niin laite voi myös toimia splitterinä siten että HDMI otetaan boksista ulos AmbiHDMI:lle ja sitten kuva otetaan VGA:n kautta telkkarille. VGA pystyy kuljettamaan 1080p signaalia ongelmitta. Jos taas puolestaan kuva halutaan digitaalisena telkkarille saakka, niin sitten lähteen perään pitää laittaa splitter, josta toinen haara menee suoraan telkkarille ja toinen HDFury4:n kautta AmbiHDMI:lle. Tässäpä vielä visualisoituna (jotenkin)

Digitaalinen kuva:

Lähde -> HDMI Splitter -> HDMI Stripper -> AmbiHDMI -> Televisio / Projektori

Analoginen kuva:

Lähde -> HDMI Stripper -> (HDMI) AmbiHDMI -> (VGA) Televisio / Projektori

Itselläni on käytössä viritinvahvistin, jossa on kaksi HDMI ulostuloa sisäänrakennettuna, joten käytännössä tällöin mitään splitteriä ei tarvita vaan AmbiHDMI voidaan heittää suoraan kiinni toiseen ulostuloon tuon stripperin kautta.

Toki tässä projektissa se ultimate outcome voisi olla sen stripperin sisällyttäminen laitteeseen taikka murrettujen salausavainten käyttö jollain toisella piirillä jota saa ostettua, koska kyse ei ole kaupallisesta tuotteesta:

schneier.com/blog/archives/2 … p_key.html

Lisäys: Niin noista konsoleista vielä sen verran, että PS3 tosiaan vaatii tuon HDCP tuen myös pelaamiseen (sekä tietysti Bluray soittoon). X360 puolestaan ei vaadi HDCP pelaamista varten, mutta leffojen katseluun puolestaan vaatii (DVD ja esim. NetFlix).

Tuollainen HDCP Stripper vaikuttaa näppärältä laitteelta. Pitäisi tehdä salapoliisityötä ja selvittää saisiko esim. Kiinasta tilattua HDCP-avaimet sisältäviä vastaanotinpiirejä, siellä kun ei pahemmin välitetä tekijänoikeuksista ja lisenssiasioista.

Tässäpä vielä mielenkiintoista faktaa HDMI:stä Olimexin blogikommenteista:

Ehdottomasti kannattaa selvittää mitä Kiinasta voisi saada. Olen itse näiden samojen asioiden kanssa tapellut joskus aikoinaan ja sen takia tänne kirjoittelinkin, kun “varoitusvalot” syttyivät heti artikkelin luettuani.

HDCP on todella syvältä harrastelijoiden kannalta, mutta toisaalta onhan siinä tehty aikoinaan katteetonta kehitystäkin salauksen muodostamiseksi ja nyt sitten siitä kerätään rahaa jälkikäteen, joskin varmaan jo tehdään voittoa.

Tuohon voisi mainita, että turha yrittää salaamatonta toistoa Vista / Win7. Ainakin 1080p matskulla Win7 (MPC-HC softa) tiputti output reson alle 720p, kun laitto lähtöksi jonkun muun kun winikan default devicen tai Direct X.

Toi mukava kun haali osas kunnolla scaalata ylös 1080p resolle, mutta jos toi sattu oleen valittuna ja katoit jotain 1080p kamaa, niin winikka scaalas sen alas, kun ei ollut enää luotettava video stream polku.

Linuxilla taitaa olla OK.

HDMI:n rojatien ja muiden maksujen takiahan BeagleBoardissakin on (virallisesti) DVI-D HDMI-liittimellä. Video kun niissä on periaatteessa sama, HDCP:tä tai ääntä se ei kuitenkaan osaa.

Itse “isännän avain”
thepiratebay.se/blog/183

Asiaa HDCP:n murtamisesta:
lwn.net/Articles/407568/

Tekijänoikeuslaki

finlex.fi/fi/laki/ajantasa/1961/19610404

Olkaas nyt varovaisia. Onhan esimerkiksi DVD:n CSS salauksen murtamisestakin tullut useita tuomioita.

Ai Suomessakin? :astonished:

Tais olla just ton “vahvojen” salauksien purkamisesta keskusteleminen laitonta.

Edit:
Tuossa jotain infoa aiheesta
fi.wikipedia.org/wiki/Lex_Karpela

Hmm… Tuolta en ainakaan löytänyt mitään keskustelukieltoa. Suomessahan ei taida rikoksen suunnittelu olla edes laitonta?

Niin, onko Suomessa tosiaan joku tuomittu tuosta DeCSS algosta?