تحكم DIY للوحة LED على CPLD باستخدام تعديل BAM

منذ بعض الوقت ، شارك في مناقشة مشروع DIY لساعة ماتريكس LED.
وما أدهشني - تم استخدام مصفوفة 8x8 LED أحادية اللون القديمة بخطوة 5 ملم كجهاز عرض. علاوة على ذلك ، تم إنشاء لوحات دوائر مطبوعة معقدة بالنسبة لهم ، وتم عمل مؤشر ديناميكي ناعم. وهذا في الوقت الذي كانت فيه لوحات LED الملونة الكاملة 64 × 32 الجاهزة مع عرض 3 مم متوفرة منذ فترة طويلة بسعر 10-20 دولارًا. والتشكيلة العامة لهذه اللوحات كبيرة جدًا ولها درجة بكسل تتراوح من 2 إلى 10 ملم وتقريباً أي حجم.

في الوقت نفسه ، يعد استخدام مثل هذه اللوحات في تصميمات DIY أمرًا صعبًا للغاية - وحدات التحكم الجاهزة تكلف الكثير من المال وليس لديها واجهة برمجة تطبيقات عادية. من الصعب جدًا إجراء مسح سريع إلى حد ما للوحة على وحدات التحكم الدقيقة الشائعة الاستخدام في DIY. علاوة على ذلك ، يجب الحفاظ على الفواصل الزمنية بدقة عالية - وإلا يبدأ التفاوت الملحوظ في السطوع.

هناك حلول جيدة في Adafruit ، ولكنها كلها مكلفة للغاية ومعقدة.

بعد بعض التفكير ، ظهر الفكر - لماذا لا تصنع لوحة غير مكلفة للغاية ستكون جسرا بين لوحة بنس عادي مثل اردوينو ولوحة LED؟ بعد شهرين من الضجة ، ولدت شيئا يعمل.

توضح هذه المقالة الإصدار الثاني المحسّن من وحدة التحكم.

التحدي


كمهمة أساسية ، أردت أن أكون قادرًا على التحكم في لوحة بحجم إجمالي لا يقل عن 64x64 ، مع القدرة على العمل على الأقل في Highcolor (RGB565) مع الحفاظ على معدل تحديث شاشة مقبول (50 هرتز على الأقل). في الإصدار الأول من وحدة التحكم ، تم تنفيذ المهمة الأساسية بالكامل ، ولكن ظهرت فكرة تنفيذ المهمة بطريقة أخرى واعدة للغاية ، والتي ولدت منها النسخة الثانية.

شرح أساسي لتصميم لوحة LED نموذجية


واجهة إدخال HUB75:


في كل إدخال لون ، توجد سلسلة من السجلات من نوع HC595 (ولكن إصدارات 16 قناة خاصة لمصابيح LED). هناك العديد من السجلات التي تكفي لعرض اللوحة. تمزيق أذونات التمهيد المتوازي والإخراج لجميع السجلات. المدخلات ABCDE - هذا هو اختيار سلسلة - انتقل إلى وحدة فك الترميز التقليدية.

مبدأ العمل:

  • اضبط البيانات على مدخلات RGB ، انقر فوق الزر CLK. كرر حتى نقوم بتحميل الخط بأكمله
  • قم بإيقاف تشغيل المخرجات OE = 1 (حتى لا يكون هناك تداخل)
  • إعطاء وحدة فك الترميز رقم الصف المحمل
  • انقر فوق تحميل متوازي LAT - يتم نقل بيانات الخط إلى سجلات الإخراج
    تمكين المخرجات OE = 0
  • كرر الصف التالي

هذا مؤشر ديناميكي كلاسيكي. من الواضح أنه باستخدام هذه الطريقة في دورة واحدة كهذه ، يمكننا فقط تشغيل / إيقاف تشغيل كل مصباح LED محدد.

من أجل الحصول على تدرجات سطوع مع PWM الكلاسيكي ، يجب تكرار هذه الدورة N-1 مرات ، حيث N هو عدد تدرجات السطوع (256 لـ RGB888). وبالنظر إلى أنها لا تزال تومض في نفس الوقت - يجب القيام بكل هذا بسرعة كبيرة جدًا.

يوجد حل - تعديل زاوية البت (BAM). في هذه الحالة ، يتناسب وقت التوهج في كل دورة مع وزن البت المعروض. أي ، بالنسبة لـ RGB888 ، تحتاج فقط إلى 8 دورات عرض. أكثر تفصيلاً هنا .

استخدم الإصدار الأول من وحدة التحكم PWM الكلاسيكية ، التي فرضت قيودًا صارمة على عدد دورات المسح. في الإصدار الثاني ، تم تنفيذ BAM ، مما أعطى مكاسب هائلة في السرعة.

التنفيذ


كان من الواضح تمامًا أن وحدة التحكم الدقيقة التقليدية تسحب الألواح الصغيرة فقط - فالألواح الكبيرة ببساطة لا تملك ما يكفي من السرعة. لذلك ، لا غنى عن CPLD أو FPGA هنا - من المستحيل ماديًا إنتاج عشرات ميغابايت / ثانية على وحدات تحكم دقيقة منخفضة التكلفة.

كذاكرة ، أوصيت في منتدى IXBT بواسطة ذاكرة FIFO الرائعة جدا Averlogic AL422B ، والتي تحتوي على ما يقرب من 400 كيلو بايت من الذاكرة ويمكنها العمل بترددات تصل إلى 50 ميجا هرتز.

وبالنظر إلى أن متطلبي الرئيسي كان الحد الأقصى من التكلفة المنخفضة للمكونات ، بحيث يمكن الوصول إلى الوشاح النهائي من قبل الشركات المصنعة محلية الصنع ، تم اختيار Altera EPM3064 - CPLD مع 64 macrocells. في الوقت نفسه ، لا يسمح مثل هذا العدد الصغير من الخلايا الكبيرة بإنشاء لوحة قابلة للتكوين ديناميكيًا - يجب ترجمة التكوين مباشرة إلى CPLD.

→ تقع الدائرة الناتجة هنا

التفاصيل:

  • CPLD EPM3064ATC44-10 - سعر علي حوالي 13-15 دولارًا مقابل اثني عشر
  • FIFO RAM AL422B - سعر علي حوالي 15 دولارًا لكل دزينة
  • مذبذب بلوري 50 ميجا هرتز. يوفر المجلس للتثبيت في حالات DIP14 / DIP8 / 7050. سعر علي حوالي 6-7 دولارات لكل عشرة
  • 3.3V مثبت في حزمة SOT223. السعر في Chip and Dip - 40r apiece
  • موصل IDC-10MS. السعر في Chip & Dip - 3 p / piece
  • موصل IDC-16MS. السعر في Chip & Dip - 8 ص / قطعة
  • موصل IDC-14MS. السعر في Chip & Dip - 7 ص / قطعة
  • المكثفات 1 microfarad 0805 - 8 قطع من حوالي 1 ص / قطعة
  • مكثف 0.1 فائق التوهج 0805 - حوالي 1 ص / قطعة
  • المقاوم 10 كيلو 0805 - بنس واحد

يتم الحصول على المجموع بالتفصيل 1.5 + 1.5 + 0.7 = 3.7 دولارًا و 40 + 3 + 8 + 7 + 8 * 1 + 1 = 67 ص. كل ذلك معًا في حدود 5 دولارات - بنس واحد.

→ صورة اللوحة الأصلية هنا

→ أعدت ملفات جربر للطلب

تم إعداد اللوحة للنسخة الأولى ، حيث لم يكن هناك تحكم RE. لاستخدامه مع الإصدار الثاني ، يجب قطع وصلة المرور بين أطراف 23 و 24 من AL422B ورمي الأسلاك من المحطة 28 من EPM3064 (يتم إحضارها إلى كتلة المحطة الطرفية) إلى المحطة 24 من AL422B.

عند لحام اللوحة ، لا تنسى لحام وصلات الكهرباء على ظهر اللوحة.





الحسابات


حسابات المعلمات المطلوبة معقدة للغاية.

والحقيقة هي أنه في وحدة التحكم يتم تنفيذ عمليتين بالتوازي - تحميل بيانات السطر التالي / تشير إلى خط محمل بالفعل.

تبدأ العمليات في وقت واحد ، ولكنها تنتهي في أوقات مختلفة ، لذلك تنتظر العملية الأسرع إكمال عملية أطول.

← تم ​​عمل قرص Excel للحساب

بيانات المصدر:

  • CRYSTAL_FRQ (MHz) - تردد المولد (50 MHz)
  • PIXEL_COUNT - عدد وحدات البكسل في شريط التنزيل. مزيد من التفاصيل في قسم التبديل.
  • RGB_INPUTS - عدد مداخل RGB المستخدمة في واجهة HUB75E للوحة المستخدمة. 1 أو 2
  • BYTES_PER_PIXEL - بايت لكل بكسل. في حالتنا ، دائمًا 3 - RGB888
  • SCAN_LINES - عدد خطوط المسح في اللوحة المستخدمة. 8/16/32

المعلمات المحددة:

  • PRE_DELAY - التأخير من إشارة LAT حتى يتم تشغيل OE ، تم تعيينه في علامات التجزئة
  • PRESCALER - مسبق للعداد الرئيسي. أي إذا كانت قائمة الأسعار 8 ووزن البتة الحالية 4 ، فسيتم تشغيل OE لمدة 8 * 4 = 32 دورة
  • POST_DELAY - الحد الأدنى من التأخير من إيقاف تشغيل OE إلى إشارة LAT التالية ، المحددة في القراد

على سبيل المثال ، لدينا لوحة 32x32 بها 8 خطوط مسح ومدخلات RGB. تحتوي هذه اللوحة على موصلين HUB75E ، أي أنهما جسديان عبارة عن لوحين 32x16. نقوم بتوصيل هذه اللوحات في سلسلة ، أي منطقيا ستبدو هذه اللوحة مثل 64x16.

PRE_DELAY و POST_DELAY هما فواصل زمنية قبل تمكين الإخراج وبعده (OE) حتى تتمكن أجهزة الإرسال المتعددة من تبديل المخرجات والمفاتيح لفتح / إغلاق. بدونها ، ستكون هناك "حيل" من حرق وحدات البكسل إلى الخطوط المجاورة. يتم تحديد القيم تجريبياً للوحة معينة. عادة ما يكون 15 إجراءً كافيًا (تم وضعها في الإجراءات).

هذا يطرح سؤال اختيار prescaler - كيفية اختياره.

تمنحك القيمة المسبقة المنخفضة فترة عرض إطار قصيرة ، ولكنها تقلل من السطوع الكلي. تزيد القيمة العالية للعارض الأولي من وقت عرض الإطار ، أي عند تعدادها ، فإنها تومض الشاشة.

لنجرب PRESCALER = 1

نحصل على:

OE_EFFICIENCY - 8.3٪ ، أي أن اللوحة ستعمل فقط 8.3٪ من الحد الأقصى للسطوع
FRAMES_PER_SECOND - 2034 إطارًا في الثانية - ولكن معدل تحديث الصورة سيكون كبيرًا - أكثر من 2000 إطارًا في الثانية.

فقدان السطوع كبير جدًا بالفعل.

لنجرب PRESCALER = 16

نحصل على:

OE_EFFICIENCY - 72.9٪ أي ، ستعمل اللوحة بنسبة 72.9٪ من أقصى سطوع ممكن
FRAMES_PER_SECOND - 1117 - ومعدل تحديث الصورة جيد جدًا - أكثر من 1000 إطار في الثانية.
حسنًا ، إنه أمر طبيعي تمامًا - الكفاءة بأكثر من 50٪ أمر طبيعي تمامًا ومعدل الإطارات جيد جدًا.

القاعدة العامة هي PRESCALER أصغر بحوالي 8 مرات من المنتج PIXEL_COUNT * RGB_INPUTS

حسنًا ، استمر في العد والتحقق.

تبديل لوحات LED


جميع اللوحات متصلة في سلسلة. مخطط الاتصال: أولاً من اليمين إلى اليسار ، ثم من الأسفل إلى الأعلى. بمعنى ، نقوم أولاً بتوصيل الأفقي في سلسلة ، ثم إخراج الصف السفلي إلى مدخل الصف الثاني من الأسفل ، إلخ. إلى الصف العلوي.

يتمسك جهاز التحكم باللوحة السفلية اليمنى.

هناك لوحات تحتوي على مدخلين وموصل إخراج. هذه الألواح هي في الأساس مجرد تجميع ميكانيكي من لوحين رأسيًا. خففت كما لوئتين مستقلتين.

بعد التجميع ، نحتاج إلى حساب الطول الإجمالي للسلسلة بالبكسل - لهذا ننظر - كم عدد اللوحات الإجمالية في السلسلة وضرب هذا الرقم في عرض اللوحة بالبكسل. سيتعين بعد ذلك توجيه هذا الرقم إلى قيمة PIXEL_COUNT أثناء تهيئة CPLD وفي حاسبة التوقيت.

FPGA البرامج الثابتة


جميع الملفات اللازمة على جيثب . تحتاج إلى التنزيل مباشرة مع المجلد.

بعد التسجيل ، يجب تنزيل Quartus II 13.0sp1 وتثبيته من موقع Altera الإلكتروني. تحتاج إلى تنزيل هذا الإصدار بالضبط - لم تعد الإصدارات الأحدث تدعم سلسلة MAX3000. ليس من الضروري كسرها - يكفي إصدار إصدار الويب (المجاني). عند التنزيل ، تأكد من تحديد المربعات للحصول على دعم MAX3000 والمبرمج. فقط في حالة ، أحذرك - الحزمة كبيرة ، حول اثنين من العربات. ستحتاج أيضًا إلى Altera USB Blaster - السعر المعتاد لـ ali هو حوالي 3 دولارات.

افتح مشروع al422_bam.qpf. على اليسار ، افتح علامة تبويب الملف وافتح الملف al422_bam.v - هذا هو ملف المشروع الرئيسي. تحتاج فيه إلى تكوين المعلمات:

كم عدد إدخالات RGB على اللوحة - في اللوحات التي تحتوي على إدخال HUB75 ، يمكن أن يكون هناك إدخال واحد أو 2 إدخال RGB. لمعرفة عدد الإدخالات الممكنة بهذه الطريقة بالضبط - نأخذ عدد وحدات البكسل في اللوحة بشكل رأسي. اقسمها على عدد خطوط المسح (المشار إليها في تسمية اللوحة على أنها 8S ، على سبيل المثال). اقسم على عدد موصلات الإدخال (1 أو 2). على سبيل المثال - لدي لوحة 32x32 ومسح ضوئي 8S وموصلي إدخال - 32/8/2 = 2 - مما يعني إدخالين RGB.

`define RGB_outs 2 

عدد خطوط المسح على اللوحة - نظرًا لأن معيار HUB75E مدعوم ، يمكن أن يصل إلى 32x. عادة ما يكون عدد خطوط المسح في اسم اللوحة على شكل 8S / 16S / 32S ، على التوالي.

يجب أن يكون سطر واحد فقط بدون تعليق:

 `define SCAN_x8 1 //`define SCAN_x16 1 //`define SCAN_x32 1 

العدد الإجمالي لوحدات البكسل الأفقية في السلسلة. يتم اعتبار وحدات البكسل في سلسلة اللوحة بالكامل - راجع القسم أعلاه "تبديل لوحات LED"

 `define PIXEL_COUNT 64 

مراحل إشارات الخرج. التكوين الأكثر شيوعًا هو: OE نشط على مستوى منخفض (تمت إزالة التعليقات) ، يعمل CLK في المقدمة (التعليقات قيد التشغيل) ، LAT نشط على مستوى عال (التعليقات قيد التشغيل). جميع أنواع الخيارات الغريبة ممكنة. اكتشف أي واحدة لديك بشكل تجريبي فقط أو عن طريق إزالة الدائرة والبحث عن أوراق البيانات للرقائق المستخدمة).

 //`define LED_LAT_ACTIVE_LOW 1 `define LED_OE_ACTIVE_LOW 1 //`define LED_CLK_ON_FALL 1 

التأخير السابق واللاحق لإشارة OE بالنسبة إلى LAT والعارض الأولي للعداد الرئيسي. انظر أعلاه.

 `define OE_PRESCALER 16 `define OE_PREDELAY 31 `define OE_POSTDELAY 31 

الكل ، اضغط على ctrl-L - تم تجميع المشروع. إذا لم تفسد الأمر في أي مكان ، فسيكون هناك العديد من التحذيرات ، ولكن يجب ألا تكون هناك أخطاء. بعد ذلك ، نقوم بتوصيل اللوحة الملحومة بـ USB Blaster ، ونطبق الطاقة على اللوحة. في Quartus ، انتقل إلى أدوات - مبرمج. حدد USB-blaster في إعداد الأجهزة ، وانقر فوق ابدأ. هذا كل شيء ، برمجة CPLD.

جزء متحكم


إن إخراج البيانات إلى وحدة التحكم ، بشكل عام ، بسيط للغاية - نعيد تعيين عنوان الكتابة ثم نصدر بايتات البيانات بالتسلسل ، ونرسمها بإشارة WCLK. ويبدو أنه حتى arduinka عاديا يكفي للعمل. ولكن هناك مشكلتان:

أ) يستغرق الكثير من الذاكرة. حتى لوحة 32x32 الصغيرة في وضع RGB888 تتطلب 3 كيلو بايت من الذاكرة لمخزن مؤقت للشاشة. يحتوي Atmega328 القائم على أردوينو العادي على 2 كيلوبايت فقط من ذاكرة الوصول العشوائي. يمكنك بالطبع استخدام لوحة Mega استنادًا إلى Atmega2560 ، والتي تحتوي على ما يصل إلى 8 كيلوبايت من ذاكرة الوصول العشوائي ، ولكن حتى هذا لا يكفي للألواح ذات الحجم العادي - تتطلب لوحة 128 × 64 في وضع RGB565 ذاكرة 16 كيلوبايت.

ب) في عملية العمل مع AL422B ، حدث خلل لم يتم توثيقه في أي مكان - عند كتابة البيانات بسرعة أقل من 2 ميجابايت / ثانية ، لا يعمل عداد العناوين بشكل صحيح ويكتب البيانات "ليس هناك". ربما هذا خلل في حزبي. ربما لا. ولكن يجب التحايل على هذا الخلل. بالنظر إلى أن AVR8 يعمل بسرعة 16 ميجاهرتز ، يكاد يكون من المستحيل الحصول على البيانات منه بالسرعات المطلوبة.

الحل المقترح هو استخدام الأوشحة الرخيصة بناءً على وحدة تحكم 32 بت STM32F103C8T6. يكلف هذا الوشاح علي حوالي 2.5 دولارًا بالقطعة ، أو حوالي 1.7 دولارًا عند شراء اثني عشر ، أي أرخص من Arduino Nano. في الوقت نفسه ، نحصل على متحكم كامل 32 بت يعمل بسرعة 72 ميجاهرتز ولديه 20 كيلو بايت من ذاكرة الوصول العشوائي و 64 كيلو بايت من الفلاش (مقارنة مع 2 كيلو بايت / 8 كيلو بايت Atmega328 ، الموجود على نانو).

في الوقت نفسه ، تمت برمجة هذه اللوحات بنجاح كبير في بيئة Arduino. حول هذا هناك مقال جيد على مدار الساعة ، لذلك لن أكررها. بشكل عام ، افعل كل شيء كما هو موضح في المقالة.

في بيئة اردوينو ، اختر لوحة STM32F103C8 العامة ، المتغيرة STM32F103C8. تمر البيانات عبر DMA ، بحيث يمكنك استخدام أي خيار تحسين.

يحدث التبديل على النحو التالي:

مسمر بقوة في المكتبة:
A0..A7 → DI0..DI7 AL422B
B0 → WCLK AL422B
B1 → WRST AL422B

تم تعيينه في رسم تخطيطي لوحدة التحكم:
B10 → نحن AL422B

الأسلاك المشتركة:
G → GND

حسنًا ، لا تنس تزويد الطاقة 5V / GND من اللوحة إلى مسامير وحدة التحكم المقابلة.

خذ دبوس الموصل الموجود على وحدة التحكم من الدائرة .



جزء البرنامج


نظرًا لأن المهمة كانت جعل كل شيء بسيطًا وبأسعار معقولة قدر الإمكان ، فقد تم تصميم جميع البرامج لبيئة Arduino وتم تصميمها كمكتبة LED_PANEL .

تستخدم مكتبة LED-PANEL بنشاط مكتبة Adafruit GFX ، لذا يجب تثبيتها.

أوصي بشدة بعدم وضع مكتبة LED_PANEL في دليل المكتبات ، ولكن تركها في مجلد الرسم. والحقيقة هي أن هناك الكثير من المعلمات المرتبطة بالحديد ، وإذا كنت ترغب في نقل العمل إلى متحكم أكثر "سمينًا" ، فسيتعين عليك تغيير الكثير من الأشياء في الرمز نفسه.

تتم التهيئة تقريبًا بالشكل التالي:

 #include "LED_PANEL.h" #define width 32 #define height 32 #define bpp 3 #define scan_lines 8 #define RGB_inputs 2 #define we_out_pin PB10 LED_PANEL led_panel = LED_PANEL(width, height, bpp, scan_lines, RGB_inputs, we_out_pin); 

أي أننا نقوم بإنشاء مثيل من فئة LED_PANEL ، والتي نحدد لها المعلمات:

العرض - العرض الإجمالي للوحة بالبكسل (الإجمالي)
الارتفاع - الارتفاع الإجمالي للوحة بالبكسل (الإجمالي)
bpp - بايت لكل بكسل ، 3 لـ RGB888. يعمل إصدار BAM فقط في RGB888
scan_lines - عدد خطوط المسح هو 8/16/32. يجب أن يتوافق مع وضع وميض في وحدة التحكم.
RGB_inputs - عدد مداخل RGB في موصل HUB75 هو 1/2. يجب أن يتوافق مع وضع وميض في وحدة التحكم.
we_out_pin - دبوس يتم توصيل خرج WE به

يرجى ملاحظة أنه أثناء التهيئة ، يتم تحديد دبوس WE فقط. يتم تسجيل جميع الدبابيس الأخرى بشكل صارم في الرمز ، نظرًا لأنها مرتبطة بقنوات المؤقت المستخدم وقنوات DMA وسيتطلب تغييرها تغييرات كبيرة في الرمز.

بدء ومسح الشاشة في قسم الإعداد:

  led_panel.begin(); led_panel.clear(); 

يبدأ تهيئة الدبابيس اللازمة للإخراج ، ويربط جهاز ضبط الوقت و DMA
مسح يمسح العازلة

للرسم ، يمكنك استخدام جميع الإجراءات القياسية لمكتبة Adafruit GFX - من أبسط drawPixel إلى إخراج النص. لإخراج يتم رسمها إلى الإجراءات العازلة تستخدم:

 led_panel.show(); 

في هذا النموذج ، يبدأ show نقل البيانات إلى وحدة التحكم عبر DMA ويعيد التحكم على الفور. اكتشف ما إذا كان النقل قد انتهى بمساعدة دالة led_panel.OutIsFree () - إذا كان صحيحًا ، فقد انتهى النقل. هناك ميزة - إذا اتصلت تظهر عندما لم يكتمل النقل بعد - فسيتم تجاهلها ببساطة.

 led_panel.show(false); 

التناظرية من show () ، ولكن إذا اتصلت show (false) ، ولم يكتمل النقل بعد ، فسينتظر الإجراء حتى يكتمل النقل ، ثم يبدأ عملية نقل وعودة جديدة:

 led_panel.show(true); 

التناظرية للعرض (خطأ) ، ولكن إذا اتصلت بالعرض (صحيح) ، فبعد بدء عملية تحويل جديدة ، لن يعيد الإجراء التحكم حتى يكتمل النقل.

بشكل عام ، هذا كل شيء.



بعض الملاحظات على البرنامج:

أ) يتم إدخال تصحيح جاما عند إعادة حساب اللون من RGB565 (الذي تستخدمه المكتبة) باستخدام وظيفة ExpandColor. في جميع الحالات الأخرى ، يتم استخدام وظيفة النقل الخطي ، أي أن السطوع يتناسب طرديًا مع القيمة.
ب) يسمح لك البرنامج بتوصيل وحدات تحكم LED متعددة بلوحة تحكم دقيقة واحدة. للقيام بذلك ، أرسل خطوط ناقل البيانات و RST و CLK إلى وحدات التحكم بالتوازي. يتم اختيار وحدة التحكم المطلوبة عبر خط WE. في البرنامج ، تحتاج إلى إنشاء نسخة منفصلة من فئة LED_PANEL لكل وحدة تحكم ، ويجب أن يكون لكل مثيل خطوط WE مختلفة (المعلمة الأخيرة) أثناء التهيئة.

للقيام به


- التعامل مع "التقاط" الزهور في الصفوف المجاورة. يبدو أن الأسلاك سيئة للوحة نفسها (المفاتيح متناثرة) ، لكنك بحاجة إلى التحقق. وصلت للتو لوحة جديدة - سوف أتحقق ؛
- عمل نسخة جديدة من اللوحة - مع RE المطلقة بالفعل وإضافة محولات مستوى الإخراج في 5V ؛
- اجعل فئة META_LED_PANEL ، والتي ستسمح بدمج العديد من LED_PANELs في شاشة افتراضية واحدة - وهذا سيجعل من الممكن إنشاء شاشات كبيرة جدًا مع العديد من وحدات التحكم ؛
- في المستقبل ، انتقل إلى سلسلة CPLD أكثر قوة ، على سبيل المثال CycloneIV. سيؤدي ذلك إلى توسيع القدرات بشكل كبير مع الحفاظ على تكلفة منخفضة (EP4CE6E22 يكلف حوالي 5 دولارات للصينيين ، في حين أن هناك 100 مرة أكبر من الخلايا الكبيرة وحوالي 32 كيلو بايت من الذاكرة الداخلية). لكنني سأفعل ذلك يومًا ما لاحقًا. إذا أردت ذلك. لأن مثل هذه التطورات تستغرق الكثير من الوقت.

Source: https://habr.com/ru/post/ar409743/


All Articles