FPGA tabanlı Ambilight klonu nasıl oluşturulur?


10

Bazı hızlı arka plan:
Ambilight , bazı Philips TV'lerde ekrandaki renk bilgilerini analiz eden ve ardından ekranın rengini duvara yansıtmak için ekranın arkasına bazı LED'ler ayarlayan bir sistemdir. Oldukça şık bir etki. Videoyu işlemek ve LED'leri kontrol etmek için bir PC kullanan bu sistemin klonları var. Bunu biraz aşırıya

kaçıyorum - bazı LED'leri dans etmek için tüm bir makineyi kullanarak ... Bunnie'nin NeTV'sini şifresiz bir şekilde işlemek için değiştirmek istiyorumHDMI video bazı LED'leri besler ve sürer. NeTV'nin başka amaçlar için tasarlandığını biliyorum, ancak hedefime ulaşmak için değiştirilebileceğini hissediyorum. Altta yatan Linux alt sistemi, I2C kimlik sahtekarlığı, video yer paylaşımı vb. İle ilgilenmiyorum. Bu noktada HDCP şifreli akışlarla çalışmakla ilgilenmiyorum.

NeTV şemaları

NeTV kaynak kodu

FPGA Blok Diyagramı NeTV Blok Şeması
Bunnie sunum slaytlarından birinden bir blok diyagramdır. Slayt setinin Gerisi burada .

HSYNC, VSYNC, PIXCLK gösteren slayt
Bu slayt, video piksellerinin aslında kodunun çözüldüğü ( şifresi mutlaka çözülmeyecek ) anlamına geliyor .

Sonunda ... bazı düşüncelerim ve sorularım:

  1. Bu benim istenen donanımımda yapılabilir mi? "Evet" ise, devam edin! "Hayır" ise, bana daha ne ihtiyacım olduğunu söyle!

  2. Harici bellek olmadan video bilgilerini işleyebilecek miyim? Anlayabildiğim kadarıyla FPGA'nın doğrudan erişebileceği bir bellek yok. Bu muhtemelen video verilerini işlemek için hangi algoritmayı kullandığım - mümkün olduğunca az FPGA Blok RAM kullanmak için, bir bütün depolamak yerine, gelen piksellerin bir tür 'yinelemeli toplanmasını' kullanmak istediğimi tahmin ediyorum. resim verilerinin karesi ve ardından renklerin ortalaması. Bu algoritmanın uygulanmasıyla ilgili ipuçları var mı? Bununla nasıl başlayacağım en büyük engelim.

  3. Kaynak kodunu video verilerine nerede 'dokunmam' gerektiği konusunda araştırdım.
    Bu uygun noktaya benziyor:
    DVI Kod Çözücünün Blok Şeması
    Biliyorum, bu görüntü uzun - okumayı netleştirirken yapabileceğim en iyisi. Bunun için Xilinx'in suçu!
    Bu, TMDS verilerini alıyor ve her renk için 8 bit çıktı veriyor.

  4. LED sürücüsü için bir tür durum makinesine sahip olmalıyım - her saat döngüsü, video verilerini işlemek için oluşturduğum herhangi bir modülden piksel bilgilerini alır.

Bu garip veya uzunsa üzgünüm - kapsamlı olmaya çalışıyorum ... Sadece bununla başa çıkmak için biraz yardıma ihtiyacım var. Bu bir FPGA projesinde ilk denemem - bazıları yeni başlayanlar için çok zor diyebilir ama ben ... bir yerden başlamalıyım :) Okuduğunuz için teşekkürler.


1
NeTV, HDMI akışının kodunu çözmez. HDCP müzakere sürecini takip eder ve yeni akışı eşleştirmek için şifreler; Bundan video bilgisi alabileceğinizi sanmıyorum.
akohlsmith

Lütfen ilgili şemaları yayınlayabilir misiniz? Ayrıca, ilgili HDL modüllerinin bildirimi de yardımcı olacaktır.
drxzcl

1
@AndrewKohlsmith, böylece kaplama TV sonunda mı yapılıyor? Vay canına, HDMI'nın bunu yapabileceğine dair hiçbir fikrim yoktu!
drxzcl

1
Harici bellek çerçevesi arabelleği kullanmadan ihtiyacınız olan her şeyi yapıp yapamayacağınızdan emin değilim, ama yine de hangi renk analizini kullanmayı planlıyorsunuz? FFT ise, biraz zaman alacak ve ortam ışığının video rengine çok geç kalmayacağından emin değilim. Öncelikle HDMI'dan veri almaya çalışın ve analiz edip edemeyeceğinizi kontrol edin. Örneğin düşük geçişli bir filtre yapın ve sonucu alın.
Sokrates

1
Ben okumuştum bu NeTV çıktığında geri. Bu gönderiye göre Bunnie, kaynak HDMI'nın şifresini çözmeyi gerektirmeyen zor bir kaplama düzeni kullanıyor; gerektiğinde yeniden şifreler . Şifreli akışların kodu çözülmez.
mng

Yanıtlar:


7

Cevabımı tamamen dvi_decoder modülünün koduna ve belgelerine dayandığım ve aslında reklamı yapıldığı varsayılıyor. Bu dosya, uygulama notlarında IP'nin (değiştirilmiş?) Bir kopyası gibi görünüyor Video Bağlantısı Spartan-3A FPGA'larda TMDS I / O Kullanımı ve / veya Spartan-6 FPGA'da bir TMDS Video Arayüzü Uygulaması . Bu uygulama notları önemli ayrıntılarla doludur ve bunları dikkatlice okumanızı öneririz.

Soruda belirttiğiniz gibi, şifrelenmemiş akışları, yani HDCP olmayan akışları tedavi ettiğinizi varsayacağım. NeTV projesindeki bilgilerin HDCP'nin şifresini çözmek için uyarlanabileceğinden oldukça eminim, ancak önemsiz miktarda ek iş gerektirecek ve yargı alanınıza bağlı olarak şüpheli yasal nedenlerle olacaktır.

İhtiyacınız olan verileri dvi_decoder bloğunun çıktılarından elde edebileceğiniz anlaşılıyor. Blok çıkışları 24 bit renkli teller kullanarak bilgi red, greenve bluepiksel saatine senkronize edilir pclk. Çıkışlar hsyncve vsynckullanıcıyı sırasıyla bir satırın / ekranın sonuna kadar uyarır. Genel olarak, bu çıktıları kullanarak anında ortalama yapabilmeniz gerekir.

Sen çevirmek için bazı temel mantığı gerekir hsync, vsyncbir (X, Y) konuma ve piksel saati. Sadece biri için Xdiğeri için olmak üzere iki sayacı başlatın Y. Artım Xher piksel saatinde. Konumunda Xsıfıra sıfırlayın hsync. YHer artış hsync. YHer sıfıra sıfırlayın vsync.

Kullanılması red, green, blue, Xve Y, sen sinek ortalamasının alınmasını yapabilirsiniz. İle karşılaştırarak Xve Y, herhangi eğer, her bir piksel katkıda bulunması gerektiğini kutusuna belirleyebilirsiniz. Renk değerlerini toplama kaydında toplayın. Ortalama değeri elde etmek için, kayıttaki değeri piksel sayısına bölmeniz gerekir. Akıllıysanız, piksel sayısının ikinin gücü olduğundan emin olursunuz. Daha sonra sadece kaydın MSB'lerini sürmek istediğiniz şeye bağlayabilirsiniz.

Birikimi yaparken ekranları sürmek istediğimiz için, çift tamponlama yapmamız gerekecek. Bu nedenle, bileşen başına kutu başına iki kayda ihtiyacımız olacak. 25 ledli bir dize kullanıyorsanız, bu 25 * 3 * 2 = 150 kayıtlara ihtiyacınız olacağı anlamına gelir. Bu biraz, bu yüzden kayıtlar yerine blok ram kullanmak isteyebilirsiniz. Her şey tam gereksinimlerinize bağlıdır, deney!

Orijinal adafruit proje kitinde kullanılan gibi bir ledli dize süreceğinizi varsayıyorum . SPI kullanarak kayıtlardaki değerlerden nasıl kolayca sürüleceğini anlayabilmelisiniz.

Dvi_decoder modülü oldukça karmaşık bir kittir. Ben uygulama notları ayrıntılı incelemenizi öneririz.

Bir yana, bu projede kullanmak için henüz bir NeTV satın almadıysanız, Digilent'in Atlys panosuna da göz atmanızı tavsiye ederim . İki HDMI girişi ve iki HDMI çıkışı ile, bu tür projeler için özel yapılmış gibi görünüyor.


NP, güzel soru için teşekkürler. Bu proje ile ilgili herhangi bir sorunla karşılaşırsanız, tekrar yayınlamaktan çekinmeyin.
drxzcl

Btw, (ve bu sorunun kapsamı dışındadır), göreceli bir mikrodenetleyici sistemden bir şeyi sürmeyi düşündünüz mü? RaspberryPi gibi bir şey yaklaşık 6 kat daha ucuzdur ve ledleri sürüp videoyu aynı anda gösterebilmelidir.
drxzcl

yine de JTAG aracının gelmesini bekliyorum ki ChipScope ile hata ayıklayabilirim ... bu sorunu çözmek için temel bir yaklaşım ortaya koymaktadır. @drzxcl zaten elimde netv var. RaspPi ilginç bir öneri, ancak hdmi'yi video kaynağı olarak kullanmak imkansız.
dext0rb

Hiç işe yaradın mı? Bir yazma / video görmek isterim!
drxzcl

Hayır gerçek değil. : | Yarım yamalak bir LED sürücüsü yaptım , ancak daha fazla girmek için zamanım olmadı. Umarım yakında.
dext0rb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.