هدية الحبيب في 14 فبراير من مهندس إلكتروني

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

ولكن نظرًا لأن: الهدية ليست باهظة الثمن مثل الاهتمام باهظ التكلفة ، سنحاول الاستثمار في الوقت المناسب. أقدم انتباهكم إلى "Heart v1.0"



تم اختراع الفكرة الأساسية للجهاز بشكل جماعي مع فريقي من أجل "شجرة عيد الميلاد v1.0". باختصار ، مجموعة من الوظائف:

- تهنئة منقوشة على القلب
- مدعوم بشاحن الهاتف (موصل microUSB)
- إضاءة خلفية RGB مع القدرة على تسجيل ملفات التعريف الوامضة التي يمكن تبديلها بواسطة زر
- وضع الإضاءة الليلية
- ذاكرة مدمجة لتسجيل التحيات. عند توصيله بجهاز كمبيوتر ، يتم تعريفه على أنه محرك أقراص محمول.

بعد مناقشة / ابتهاج حول الوظيفة الكامنة ، قررنا القيام بذلك - لم يشك أحد بعدًا في الوقت الذي يتطلبه القلب ...

حديد


كما اتضح - أبسط جزء من القلب. كانت الخطوة الأولى هي رسم مخطط هيكلي للجهاز:



تم أخذ التفاصيل من تلك الموجودة في مستودعاتنا ، وتم استخدامها أيضًا أكثر من مرة في الأجهزة. وفقًا للمخطط ، يمكننا أن نقول: أرخص MK مع USB على اللوحة STM32F042F6P6 ، LDO - XC6206P332MR بسيط ، ذاكرة SPI 32 ميجابت في الثانية W25Q32FVSSIG (تم وضع قطعتين على اللوحة ، ولكن في النهاية تم لحامها) ، RGB28 LED LED WS2812.

رسم تخطيطي:



الحد الأدنى من التفاصيل وأهم الحسابات الخاطئة هو الأمل في أن يعمل WS2812 بشكل طبيعي من مستوى 3.3V (Slavik! نعم ، لقد فعلت ذلك مائة مرة ... قال الكثير).

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



فيل


تذكر ، لقد ذكرت الأمل الخجول في أن تعمل WS2812 من 3.3V؟ لذلك لن يكون !!! بتعبير أدق ، يبدو أن كل شيء يعمل كما كان قبل بدء التبادل عبر USB. في الوقت نفسه ، بدأت القناة الزرقاء بالفشل. بحثنا عن مشكلة في البرنامج لفترة طويلة ، معتقدين أنه لم يكن هناك ما يكفي من موارد المعالج ، ولكن بعد ذلك قمنا بسحب ساق PB1 إلى 5V من خلال المقاوم 1kΩ وعمل كل شيء بوضوح. في نفس الوقت ، أصبح مستوى log.1 حوالي 4.3V. أفهم أن هذا ليس جيدًا ، ولكن لم يكن هناك خيار. تحول المجلس إلى "مزرعة جماعية" أنيقة نوعًا ما:



عضو الكنيست لينة


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

ومع ذلك ، يتوفر 32 كيلو بايت في وحدة التحكم الدقيقة الخاصة بنا ، وستستغرق البرامج الثابتة أكثر من النصف بقليل ، لذا فمن المنطقي تخزينها في تسلسلات الذاكرة المتبقية لثلاث بايت (RGB) ، والتي يتم إرسالها بدورها إلى إدخال LED. الضغط على الزر سوف يدور حول التسلسلات التي يتم تسجيلها في فلاش MK.

هنا نواجه المشكلة الأولى: LED WS2812 متطلب للغاية على فترة ومدة النبضات ، في حين أن وقت النبض (0.4-0.8 ميكرومتر) صغير بما يكفي للمعالج الذي يعمل بسرعة 48 ميجاهرتز. بالإضافة إلى ذلك ، يجب أن نأخذ في الاعتبار أنه بالإضافة إلى التحكم في LED ، سيتعين على دائرتنا الدقيقة أيضًا خدمة الاتصال بجهاز الكمبيوتر عبر USB وقراءة / كتابة ذاكرة فلاش.
لحسن الحظ ، يعتبر هذا الصمام الثنائي شائعًا للغاية ويتم وصف العديد من طرق تنفيذ البروتوكول الخاص به على الإنترنت ، بما في ذلك على وحدات التحكم الدقيقة STM. لقد اخترنا ، ربما ، واحدة من أصعبها من حيث التنفيذ ، ولكن أيضًا في نفس الوقت الأكثر فعالية من حيث وقت وحدة المعالجة المركزية - مؤقت DMA +. يكتب DMA مباشرة إلى منفذ GPIO ، يتحكم المؤقت في قنوات DMA. نظرًا لأن DMA تكتب إلى المنفذ بالكامل مرة واحدة ، فلن تعمل لاستخدام دبابيس المنفذ الأخرى كمخرج. هذا هو السبب في اختيار دبوس PB1 للتحكم في LED. من الناحية الإيديولوجية ، كل شيء بسيط ، لكن كان علي أن أتعامل مع التطبيق إلى حد كبير إذا لم يكن للمكتبة الرائعة التي كتبها مارتن هوباشيك ونشرها على github. بعد قليل من الانتهاء تحت MK الخاص بنا والطريقة المحددة لتخزين تسلسلات RGB ، نحصل على LED يعمل.

ذاكرة فلاش


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

لذلك ، يجب التعرف على القلب كمحرك أقراص فلاش في أي من أنظمة التشغيل الشائعة ، دون الحاجة إلى تثبيت برامج التشغيل. لذلك ، سنستخدم فئة USB تسمى "جهاز تخزين كبير السعة" ، حيث توفر لنا مكتبة أجهزة STM32 USB حلًا جاهزًا. توقف! جاهز ؟؟؟؟ الآن دعنا نرى.

نقوم بإنشاء مشروع في STM32CubeMX ، ونجمع بين طرق القراءة / الكتابة لذاكرة فلاش spi والمكالمات المقابلة في وحدة تخزين USB كبيرة الحجم ونجد مشكلتين في وقت واحد: لا يريد محرك أقراص USB المحمول إزالته بأمان و "الاختناق" عند محاولة كتابة شيء أكثر من النص "مرحبًا العالم "في ملف README.txt.

من السهل حل المشكلة الأولى - تحتاج إلى تنفيذ معالجة SCSI المفقودة للأمر StartStopUnit. والثاني هو أكثر صعوبة في الحل. حجم كتلة نظام الملفات (بطبيعة الحال ، مع مساحة 8 ميجا بايت فقط ، سنستخدم Fat16) هو 512 بايت. لا يمكن محو الذاكرة إلا في كتل 4k. سيتعين علينا حجز أحد الكتل للتخزين المؤقت (لا يمكننا تحمل 4 كيلو بايت من ذاكرة الوصول العشوائي مع 6 كيلو بايت المتوفرة). أي ، لكتابة 512 بايت ، عليك نسخ 4 كيلو بايت ومسح 4 كيلو بايت ونسخها مرة أخرى. علاوة على ذلك ، إذا كان الملف كبيرًا بما فيه الكفاية ، فإن نظام التشغيل يريد الكتابة إلى محرك الأقراص 64 كيلوبايت في المرة الواحدة ، ولا يمكن لوحدة التحكم الخاصة بنا التعامل مع مثل هذه الكمية الكبيرة من البيانات في الوقت المناسب ، نظرًا لأن محرك الأقراص المحمول المستخدم ليس هو الأسرع أيضًا. بشكل عامبينما يكتب جهاز التحكم ببطء البيانات 256 بايت في المرة الواحدة (حجم صفحة الذاكرة) ، فإن نظام التشغيل (على الأقل Fedora ، الذي تم اختبار كل هذا عليه) تمكن بالفعل من تحديد أن محرك الأقراص قد مات الشجعان.

من المحتمل أن يشير الخبراء إلى حل أكثر أناقة للمشكلة ، ولكن "سنذهب في الاتجاه الآخر". ستتم قراءة ذاكرة الفلاش عبر واجهة جهاز التخزين الضخم وفي هذا الوضع ستضع نفسها على أنها للقراءة فقط (في نفس الوقت ، يمكن "سحب القلب" بسهولة من الكمبيوتر دون أي "استخراج آمن" ، ولكن خوفًا من إفساد نظام الملفات) ، سنكتبها عبر منفذ com الظاهري (يُعرف أيضًا باسم فئة أجهزة الاتصال). من خلال الواجهة نفسها ، سنكتب تسلسلات RGB الخاصة بنا في نهاية ذاكرة MK.

سيتم تحديد وضع التمهيد (سعة تخزين كبيرة أو CDC) عند التحميل بالضغط على الزر (أو لا).
في أقرب وقت ممكن من فعله (كما هو الحال دائمًا ، تم إنفاق معظم الوقت والقهوة على هاتين الكلمتين). نعيد القراءة والكتابة إلى واجهة MSC ، لأنه تبين أن macOs في وضع القراءة فقط يرفض التعرف على محرك أقراص USB المحمول - لا يهم ، هنا نقوم بخداع نظام التشغيل وسنعيد "النجاح" إلى أي طلب كتابة دون القيام بأي شيء (مرة أخرى ، حل من فئة "وإن لم يكن أنيقًا ، ولكنه رخيص ومبهج"). النقطة صغيرة - برنامج للكمبيوتر الشخصي.

جهاز كمبيوتر ناعم


نظرًا لأنه تقرر التهيئة والوميض عبر واجهة cdc ، فلا يمكنك ببساطة سحب الملفات وإفلاتها باستخدام الماوس وتحتاج إلى تطبيق خاص سيكون قادرًا على القيام بذلك. مهمتها الرئيسية: تزويد المستخدم بفرصة إنشاء صورة قرص ، وتحميل ملفات المستخدم هناك وكتابة هذه الصورة إلى ذاكرة فلاش. يجب أن يوفر التطبيق أيضًا واجهة لإنشاء / قراءة / كتابة تسلسلات RGB.

يجب أن يكون التطبيق عبر النظام الأساسي ، وهنا مكتبة Qt لإنشاء واجهة رسومية و ChaN FatFS لإنشاء وإدارة صورة قرص تأتي لمساعدتنا. يتوفر تبادل البيانات مع الجهاز من خلال منفذ com في Qt من أحدث الإصدارات "من خارج الصندوق" (وحدة QSerialPort) ، ونستخدم QTreeView مع نموذج العنصر الموروث من Qab abstractItemModel ، حيث يتم تنفيذ عمليات السحب والإفلات بالإضافة إلى ذلك (السحب والإفلات ، أي ما تقوله) بالماوس "مريحة ومألوفة عندما يتعلق الأمر بالملفات / المجلدات). لإنشاء تسلسلات RGB ، يمكنك استخدام QListWidget (لعرض تسلسل الألوان) ، ومكتبة QtColorWidgets (بواسطة Mattia Basaglia) لاختيار الألوان ، وفئة QEasingCurve المضمنة في Qt للانتقال السلس (أو العكس التشنجي) بين الألوان وإنشاء تأثير قوس قزح.

النتيجة: يحتوي التطبيق على علامتي تبويب:

1) "التخزين" للملفات



2) "LED" لإدارة تسلسلات RGB



حوار لإنشاء تسلسلات RGB:



يعمل مربع الحوار في ثلاثة أوضاع:

أ) RGB - يسمح لك بتحديد انتقالات بين لونين محددين في تدوين RGB.
ب) HSV - نفس الشيء ، ولكن في تدوين HSV - فائض التدفق مألوف أكثر للعين البشرية ، على وجه الخصوص ، يتيح لك وضع "HSV" + "Iterate-> HUE" إنشاء أقواس قزح.
ج) مخصص - يسمح لك هذا الوضع بتعيين كل لون من التسلسل يدويًا. من المستحيل عمل تسلسلات كبيرة كهذه ، ولكن من المريح جدًا إبعاد قلبك لفترة (ضبط اللون على "أسود").

وأخيرًا ، تعريف أجهزتنا كمحرك أقراص محمول في Windows / macOs / Linux (Gnome):







الخلاصة


وبعد كل العمل المنجز والنص المكتوب ، وجدت أنني لم ألتقط صورة عادية واحدة للقلب نفسه. لذلك ، أرفق خيار "كيف حدث":





في الواقع ، يبدو رائعًا (خاصة مع النقش). أحب أحبائك !!!

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


All Articles