FPGA आधारित Ambilight क्लोन कैसे बनाएं?


10

कुछ त्वरित पृष्ठभूमि:
Ambilight कुछ Philips टीवी पर एक प्रणाली है जो स्क्रीन पर रंग की जानकारी का विश्लेषण करती है और फिर प्रदर्शन के पीछे कुछ LED को दीवार पर स्क्रीन के रंग को प्रोजेक्ट करने के लिए सेट करती है। यह एक सुंदर निफ्टी प्रभाव है। अब इस प्रणाली के क्लोन हैं जो वीडियो को संसाधित करने और एलईडी को नियंत्रित करने के लिए एक पीसी का उपयोग करते हैं। मुझे यह थोड़ा

अटपटा लगता है - एक पूरी मशीन का उपयोग करके कुछ एल ई डी नृत्य करने के लिए ... मैं एक अनएन्क्रिप्टेड प्रक्रिया करने के लिए बन्नी के एनटीवी को संशोधित करना चाहूंगा।एचडीएमआई वीडियो फ़ीड और कुछ एलईडी ड्राइव। मुझे पता है कि NeTV को अन्य उद्देश्यों के लिए डिज़ाइन किया गया है, लेकिन मुझे लगता है कि इसे अपने लक्ष्य को प्राप्त करने के लिए संशोधित किया जा सकता है। मैं अंतर्निहित लिनक्स सबसिस्टम की परवाह नहीं करता, I2C स्पूफिंग, वीडियो ओवरले, आदि। इस बिंदु पर, मैं एचडीसीपी एन्क्रिप्टेड धाराओं के साथ काम करने से चिंतित नहीं हूं।

NeTV योजनाबद्ध

NeTV स्रोत कोड

FPGA ब्लॉक आरेख NeTV ब्लॉक आरेख
यह बन्नी की प्रस्तुति स्लाइड्स में से एक ब्लॉक आरेख है। स्लाइड सेट के बाकी यहाँ है

स्लाइड दिखाते हुए HSYNC, VSYNC, PIXCLK
यह स्लाइड का अर्थ है कि वीडियो पिक्सेल वास्तव में डिकोड किए गए हैं (जरूरी नहीं कि डिक्रिप्ट किए गए हों )

अंत में ... मेरे कुछ विचार और प्रश्न:

  1. क्या यह मेरे इच्छित हार्डवेयर पर किया जा सकता है? यदि "हाँ", जारी रखें! यदि "नहीं", मुझे बताओ कि मुझे और क्या चाहिए!

  2. क्या मैं बिना किसी बाहरी मेमोरी के वीडियो जानकारी संसाधित कर पाऊंगा? ऐसी कोई मेमोरी नहीं है जिसे FPGA सीधे एक्सेस कर सकता है, जहां तक ​​मैं बता सकता हूं। यह संभवतया इस बात पर निर्भर करता है कि मैं वीडियो डेटा को संसाधित करने के लिए किस एल्गोरिदम का उपयोग करता हूं - जितना संभव हो उतना कम FPGA ब्लॉक रैम का उपयोग करने के लिए, मैं अनुमान लगा रहा हूं कि मैं पूरी तरह से स्टोर करने के बजाय आने वाले पिक्सेल के कुछ प्रकार के 'पुनरावृत्ति योग' का उपयोग करना चाहता हूं। चित्र डेटा का फ्रेम और फिर रंगों का औसत। इस एल्गोरिथ्म को लागू करने के संबंध में कोई संकेत? इसकी शुरुआत कैसे करें, यह मेरी सबसे बड़ी बाधा है।

  3. मैंने स्रोत कोड की जांच की है कि मुझे वीडियो डेटा में 'टैप' कहां करना चाहिए।
    यह उपयुक्त स्थान जैसा दिखता है:
    डीवीआई डिकोडर के ब्लॉक आरेख
    मुझे पता है, यह छवि लंबी है - यह सबसे अच्छा है जिसे मैं पढ़ने के लिए स्पष्ट कर सकता हूं। उसके लिए Xilinx के उपकरण को दोष दें!
    यह टीएमडीएस डेटा लेने के लिए लगता है और प्रत्येक रंग के लिए 8-बिट आउटपुट करता है।

  4. मुझे एलईडी ड्राइवर के लिए किसी प्रकार की राज्य मशीन चाहिए - हर घड़ी चक्र, यह वीडियो डेटा को संसाधित करने के लिए मेरे द्वारा बनाए गए मॉड्यूल से पिक्सेल जानकारी प्राप्त करता है।

क्षमा करें यदि यह चिंताजनक है या लंबा है - मैं पूरी तरह से कोशिश कर रहा हूं ... मुझे इसके साथ जमीन पर उतरने में कुछ मदद चाहिए। यह एक FPGA परियोजना पर मेरा पहला प्रयास है - कुछ कह सकते हैं कि यह एक शुरुआत के लिए बहुत मुश्किल है, लेकिन मैं कहता हूँ ... कहीं से शुरू होगा :) पढ़ने के लिए धन्यवाद।


1
NeTV एचडीएमआई स्ट्रीम को डिकोड नहीं करता है। यह एचडीसीपी वार्ता प्रक्रिया का अनुसरण करता है और मैच के लिए नई धारा को एन्क्रिप्ट करता है; मुझे नहीं लगता कि आप इससे वीडियो जानकारी प्राप्त कर पाएंगे।
akohlsmith

क्या आप पोस्ट कर सकते हैं (प्रासंगिक लिंकैटिक्स के लिए लिंक)? इसके अलावा, प्रासंगिक एचडीएल मॉड्यूल की घोषणा से मदद मिलेगी।
drxzcl

1
@AndrewKohlsmith, इसलिए टीवी के अंत में ओवरलेइंग की जाती है? वाह, मुझे नहीं पता था कि एचडीएमआई ऐसा कर सकता है!
drxzcl

1
मुझे यकीन नहीं है कि अगर आप बाहरी मेमोरी फ्रेम बफर का उपयोग किए बिना आपको सब कुछ करने में सक्षम होंगे, लेकिन वैसे भी, आप किस रंग विश्लेषण का उपयोग करने की योजना बना रहे हैं? यदि यह एफएफटी है, तो इसमें कुछ समय लगेगा और मुझे यकीन नहीं है कि परिवेश प्रकाश वीडियो के रंग में बहुत देर नहीं करेगा। मैं कहूंगा कि सबसे पहले एचडीएमआई से डेटा प्राप्त करने की कोशिश करें और जांच करें कि क्या आप इसका विश्लेषण कर सकते हैं। जैसे एक कम-पास फ़िल्टर करें और परिणाम को आउटपुट करें।
सुकरात

1
मैं पढ़ याद है इस पहले जब NeTV बाहर आया था। उस पोस्ट के अनुसार, बनी एक मुश्किल ओवरले योजना का उपयोग करती है जिसे स्रोत एचडीएमआई को डिक्रिप्ट करने की आवश्यकता नहीं होती है; वह जरूरत पड़ने पर इसे फिर से एनक्रिप्ट कर देता है। एन्क्रिप्टेड धाराओं की कोई डिकोडिंग नहीं है।
MNG

जवाबों:


7

मैं अपने जवाब को पूरी तरह से dvi_decoder मॉड्यूल के कोड और प्रलेखन पर आधारित कर रहा हूं , और यह मानकर कि यह वास्तव में विज्ञापित के रूप में काम करता है। यह फ़ाइल ऐप नोटों में IP की संशोधित (संशोधित?) प्रतीत होती है , स्पार्टन -3 ए FPGAs में टीएमडीएस I / O का उपयोग करके वीडियो कनेक्टिविटी और / या स्पार्टन -6 एफएक्सए में एक टीएमडीएस वीडियो इंटरफ़ेस लागू करना । ये ऐप नोट महत्वपूर्ण विवरणों से भरे हुए हैं, और मेरा सुझाव है कि आप उन्हें ध्यान से पढ़ें।

जैसा कि आपने प्रश्न में संकेत दिया है, मैं मान लूंगा कि आप अनएन्क्रिप्टेड स्ट्रीम का इलाज कर रहे हैं, यह गैर-एचडीसीपी स्ट्रीम है। मुझे पूरा यकीन है कि NeTV प्रोजेक्ट की जानकारी को HDCP को डिक्रिप्ट करने के लिए अनुकूलित किया जा सकता है, लेकिन इसमें अतिरिक्त कार्य की गैर-तुच्छ राशि शामिल होगी और आपके अधिकार क्षेत्र के आधार पर संदिग्ध कानूनी आधार पर होगी।

ऐसा लगता है कि आप dvi_decoder ब्लॉक के आउटपुट से आपको आवश्यक डेटा प्राप्त करने में सक्षम होंगे। ब्लॉक तारों का उपयोग करके 24-बिट रंग की जानकारी का उत्पादन करता है red, greenऔर blue, पिक्सेल घड़ी के लिए सिंक किया गया है pclk। आउटपुट hsyncऔर vsyncउपयोगकर्ता को एक पंक्ति / स्क्रीन के अंत में क्रमशः अलर्ट करते हैं। सामान्य तौर पर, आपको इन आउटपुट का उपयोग करके फ्लाई औसत पर करने में सक्षम होना चाहिए।

आपको अनुवाद करने के लिए कुछ बुनियादी तर्क की आवश्यकता होगी hsync, vsyncऔर पिक्सेल घड़ी को एक (एक्स, वाई) स्थान में। बस दो काउंटर, एक के लिए Xऔर एक के लिए तत्काल YXहर पिक्सेल घड़ी में वृद्धि । Xशून्य पर रीसेट करें hsyncYहर पर इंक्रीमेंट hsyncYहर पर शून्य पर रीसेट करें vsync

का उपयोग करते हुए red, green, blue, Xऔर Y, आप मक्खी औसत पर कर सकते हैं। के साथ तुलना करके Xऔर Y, आप यह निर्धारित कर सकते हैं कि प्रत्येक व्यक्ति को किस बॉक्स में योगदान देना चाहिए, यदि कोई हो। एक संचय रजिस्टर में रंग का मान योग। औसत मूल्य प्राप्त करने के लिए, आपको पिक्सेल की संख्या से रजिस्टर में मूल्य को विभाजित करना होगा। यदि आप स्मार्ट हैं, तो आप यह सुनिश्चित करेंगे कि पिक्सल की संख्या दो की शक्ति है। फिर आप बस रजिस्टर के MSB को तार कर सकते हैं जो भी आप ड्राइव करना चाहते हैं।

क्योंकि हम संचय करते समय डिस्प्ले ड्राइव करना चाहते हैं, हमें डबल बफरिंग करने की आवश्यकता होगी। इसलिए हमें प्रति घटक प्रति बॉक्स दो रजिस्टरों की आवश्यकता होगी। यदि आप 25-एलईडी स्ट्रिंग का उपयोग कर रहे हैं, तो इसका मतलब है कि आपको 25 * 3 * 2 = 150 रजिस्टरों की आवश्यकता होगी। यह थोड़ा बहुत है, इसलिए आप रजिस्टरों के बजाय ब्लॉक रैम का उपयोग करना चाह सकते हैं। यह सब आपकी सटीक आवश्यकताओं, प्रयोग पर निर्भर करता है!

मुझे लगता है कि आप एक मूल स्ट्रिंग का उपयोग कर रहे होंगे जैसे कि मूल adafruit प्रोजेक्ट किट में उपयोग किया गया है । आपको यह पता लगाने में सक्षम होना चाहिए कि एसपीआई का उपयोग करके आसानी से रजिस्टरों में मूल्यों से इसे कैसे ड्राइव किया जाए।

Dvi_decoder मॉड्यूल किट का एक काफी जटिल टुकड़ा है। मेरा सुझाव है कि आप ऐप नोट्स का विस्तार से अध्ययन करें।

एक तरफ के रूप में, यदि आपने अभी तक इस परियोजना में उपयोग के लिए एक एनटीवी नहीं खरीदा है, तो मैं आपको डिजिलेंट के एटलस बोर्ड पर एक नज़र डालने की सलाह देता हूं । दो एचडीएमआई इनपुट और दो एचडीएमआई आउटपुट के साथ, यह इस तरह की परियोजनाओं के लिए बनाया गया दर्जी प्रतीत होता है।


एनपी, शांत सवाल के लिए धन्यवाद। यदि आप इस परियोजना के साथ किसी विशेष समस्या में भाग लेते हैं, तो दोबारा पोस्ट करने के लिए स्वतंत्र महसूस करें।
21

Btw, (और यह सवाल के दायरे से बाहर है) क्या आपने अपेक्षाकृत गोमांस वाले माइक्रोकंट्रोलर सिस्टम से चीज चलाने पर विचार किया है? रास्पबेरीपी जैसा कुछ लगभग 6 गुना सस्ता है और एक ही समय में वीडियो को प्रदर्शित करने और वीडियो प्रदर्शित करने में सक्षम होना चाहिए।
drxzcl

अभी भी मेरे JTAG टूल के आने का इंतज़ार किया जा रहा है ताकि मैं चिपस्कोप के साथ डिबग कर सकूं ... इस जवाब को स्वीकार करने जा रहा हूं; यह इस समस्या को हल करने के लिए एक मौलिक दृष्टिकोण देता है। @drxxcl मुझे पहले से ही अपने अधिकार में मिला है। RaspPi एक दिलचस्प सुझाव है, लेकिन वीडियो स्रोत के रूप में hdmi का उपयोग करना असंभव है।
dext0rb

क्या आपको कभी यह काम करने के लिए मिला? मुझे एक राइट-अप / वीडियो देखना अच्छा लगेगा!
drxzcl

नहीं वास्तव में नहीं। : | मैंने एक आधे गधे वाले एलईडी ड्राइवर को बनाया है , लेकिन इसे और अधिक प्राप्त करने का समय नहीं है। उम्मीद है कि जल्द ही।
dext0rb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.