مضاعفة عرض ناقل البيانات مع الإخراج المتوازي والمنفذ التسلسلي Arduino.
توضح هذه المقالة طريقة مضاعفة استخدام المنفذ D الخاص بالمعالج الدقيق ATMEL 328P (Arduino NANO) من أجل توفير إخراج بايت بديل للعرض والتبادل عبر القناة التسلسلية.
جمعت بطريقة أو بأخرى جهازًا لرصد مستوى أول أكسيد الكربون (CO) من العناصر غير الضرورية - شاشة من Nokia N95 و Arduino NANO مع منافذ سيئة (D3 و D11 ، مكسورة بسبب ماس كهربائى غير ناجح إلى +400 فولت عند تصحيح مولد الجهد العالي) ، لوحات لعب لدغات الصوت وأول أكسيد الكربون الاستشعار MQ7. كل هذه التفاصيل بدرجة أو بأخرى كانت خاطئة (باستثناء المستشعر) ولا يمكن العثور عليها في أي مشاريع أخرى. الغريب ، اتضح أن الجهاز مفيد للغاية عند استخدام موقد في البلاد. تحول صيف عام 2019 إلى أن يكون غير ساخن ، ولقد قمت بتسخين الموقد كل يوم تقريبًا لمدة أسبوعين في يوليو ، حيث تم الجمع بين البهجة (التأمل على اللهب) مع مفيدة (إعادة تدوير أشجار القمامة المنشورة). لقد كان من السهل جدًا التحكم في أنظمة الاحتراق ، فقد انعكست جميع عمليات التلاعب باللافتات على الفور في قراءات الجهاز ، مما أتاح التحكم في الموقد بذكاء. لم يتم وصف الجهاز في هذه المقالة ؛ فهناك الكثير من هذه الأجهزة على الإنترنت لكل الأذواق. الميزة المميزة لجهازي هي وظيفة المراقبة المستمرة لصحة مستشعر CO بناءً على مقارنة المنحنى المرجعي المخزن والحصول عليه في الوقت الفعلي ، وكذلك معدل التفاعل العالي للتغيرات في مستوى CO المحققة من خلال مقارنة البيانات المخزنة في الدورة السابقة مع الحالية.
ينصب تركيز هذه المقالة على زيادة سرعة المعالج والعرض من خلال تبادل بيانات البايت المتوازي.
تتميز الشاشة بتبادل موازٍ للبايت ، وعلى الرغم من استخدام جميع الطرق المعروفة لي لزيادة سعر الصرف ، إلا أن الناتج عليها كان بطيئًا إلى حد ما. السبب الرئيسي هو الحاجة إلى إخراج بايتة من البيانات إلى وحدات بت مختلفة من المنافذ المختلفة ، نظرًا لأن Arduino Nano لا يحتوي على منفذ كامل كامل بعرض بايت واحد. يتطلب وضع الإخراج هذا وقتًا تقريبًا 8 مرات أكثر من كتابة بايت للسجل. يحتوي NANO على منفذ واحد كامل D ، ولكن يتم استخدام وحدات البت الأقل أهمية للمنفذ التسلسلي للجهاز ، والذي يتم من خلاله تحميل الرسومات في المعالج ويتم تبادل الرسم مع الجهاز المضيف.
لقد وجدت طريقة بسيطة نسبيًا لاستخدام إخراج عرض البايت. تتمثل هذه الطريقة في الاستخدام البديل للمنفذ D لإخراج البيانات إلى شاشة عرض وفي تبادل البيانات عبر قناة تسلسلية.
يمكن أن تزيد الطريقة المقترحة بشكل كبير من سرعة التبادل المتكامل مع الشاشة (حوالي 3 مرات وفقًا لقياساتي). تعني كلمة "متكاملة" أنه تم قياس إجمالي مرات تنفيذ عمليات عرض الشاشة على مستوى الماكرو. من المحتمل أن يعطي قياس الوقت على مستوى I / O الذري مكسبًا أكبر بكثير (في المنطقة من نفس الترتيب).
أجريت القياسات على نموذج تم تجميعه بشكل خاص (انظر الشكل 1) بالطريقة التالية:
- في برنامج الاختبار ، تم وضع الطوابع الزمنية مع الإخراج إلى الجهاز المضيف.
- تم توصيل الشاشة بأطراف D2 - D9 ، تم تحميل برنامج اختبار ، حيث تم إخراج البايت عن طريق توزيع البايتات بواسطة البتات.
- تم توصيل الشاشة بالمطاريف D0 - D7 ، وتم تحميل برنامج اختبار ، حيث تم إخراج البايت باستخدام أمر PORTD = البيانات.

الشكل 1. صور للتخطيط لاختبار إخراج المضاعفةالبرامج هي نفسها تمامًا ، حيث تم تبديل طريقة الإخراج عن طريق تغيير أسماء إجراءات SendDat و SendCom إلى SendDat1 و SendCom1 ، على التوالي.
تم تسجيل مخرجات البرنامج إلى شاشة السلسلة المدمجة في OneNote وتحليلها.
الشكل 2. قياس الوقت الذي يستغرقه لعرضه في وضع إخراج البايت
الشكل 3. قياس وقت الشاشة في وضع الإخراج بتيتم تلخيص نتائج القياس في الجدول 1.
الجدول 1. المكاسب المتكاملة في سعر الصرفعيوب الطريقة المقترحة هي الحاجة إلى استخدام أوامر إضافية للتبديل بين أوضاع العرض والتبادل عبر منفذ تسلسلي.
يمكنك أيضًا توقع بعض الصعوبات عند تلقي البيانات من الجهاز المضيف ، يكون الاستقبال ممكنًا فقط من خلال التضمين الواضح لوضع القناة التسلسلية ، والذي يتطلب تنظيمًا واضحًا يستند إلى الوقت للعمليات في المخطط.
أعطت دراسة دليل المعالج المعلومات التالية: إدراج وضع المنفذ التسلسلي يعترض التحكم في الأرجل D0 و D1 على مستوى الجهاز. هذا يعني أن محاولات التحكم في الأرجل من المخطط لن تعطي النتيجة المرجوة.
أظهرت دراسة أخرى لهذه المشكلة أنه إذا لم تقم بتضمين المنفذ التسلسلي في الرسم باستخدام الأمر Serial.open () ، فسيظل المنفذ D بأكمله تحت تصرف المستخدم. يمكنك وضع المنفذ في وضع الإخراج على جميع الأرجل باستخدام الأمر DDRD = 0xFF وإخراج البايت بالكامل باستخدام أمر PORTD = data في نفس الوقت ، حيث يحتوي متغير البيانات على بيانات المخرجات.
وضع المنفذ D في وضع الإخراج يكفي مرة واحدة (في الإعداد). لا يؤثر تشغيل وضع الاتصال التسلسلي اللاحق على وضع المنفذ D - يبقى في وضع الإخراج المتوازي 8 بت. عند تشغيل وضع التبادل التسلسلي ، سينتهي المطرافان D0 و D1 إلى وضعي الاستقبال والإرسال ، على التوالي. سيظهر "1" على دبوس D1 ، بغض النظر عن الحالة السابقة للبت D1 ، وسيكون هذا "1" موجودًا على هذا الدبوس طوال الوقت أثناء تشغيل وضع الإرسال التسلسلي ، باستثناء لحظات إرسال الرمز. عند إيقاف تشغيل وضع الإرسال التسلسلي ، ستذهب المخرجات D0 و D1 إلى حالة الإخراج وستظهر الإشارات من سجل الإخراج عليها. إذا كان في سجل المخرجات بدلاً من D1 يوجد "0" ، فسيتم إنشاء حافة سالبة عند الخرج ، مما يؤدي إلى إرسال الطابع الهامشي إلى القناة التسلسلية.
الآن لننظر في السؤال - ولكن هل سيمنع هذا الاستخدام للمنفذ D من تنزيل البرامج؟ عند تحميل البرنامج ، تتم إعادة تعيين المعالج بواسطة النبض الذي تم إنشاؤه بواسطة وحدة تحكم منفذ USB FT232RL (أو CH340 التناظرية الخاصة به) عند ضبط إشارة DTR. تنتقل إشارة DTR من 1 إلى 0 وتؤدي السقوط السلبي عبر المكثف إلى إعادة ضبط المعالج. بعد إعادة التعيين ، يقوم المعالج بتشغيل المنفذ التسلسلي ، ويقوم بتشغيل أداة تحميل التشغيل ، ويتلقى رمز البرنامج. لذلك - تغيير وضع تشغيل المنفذ D لا يتعارض مع التحميل العادي للرسم.
إذا تطلب الرسم الإخراج إلى المنفذ التسلسلي ، فسيكون الأمر Serial.open () كافياً قبل أوامر الإخراج.
ومع ذلك ، هناك دقة. يتمثل في حقيقة أن مدخلات RxD لرقاقة FT232RL تظل متصلة بمخرج TxD ويتم استلام البيانات التي يتم عرضها على الشاشة وإرسالها إلى الجهاز المضيف. هذه البيانات تبدو وكأنها ضوضاء ، رغم أنها في الواقع ليست كذلك (الشكل 4).
الشكل 4. عرض الشاشة في وضع الإخراج بايت دون حظرهناك طريقتان للتعامل مع هذه الإشارة غير الضرورية.
الطريقة الأولى هي البرمجيات. يتكون من حقيقة أن المخطط قبل الإخراج يستخدم الأمر Serial.println () لإنشاء سطر جديد قبل إخراج المعلومات المفيدة. سيسهل ذلك على الجهاز المضيف تحليل الخطوط الواردة وإبراز المعلومات المفيدة من المخطط.
الطريقة الثانية هي الأجهزة. يتم توصيل دخل RxD الخاص بـ FT232RL بإخراج TxD عبر المقاوم 1 kΩ. لمنع نقل المعلومات ، ما عليك سوى توصيل مدخلات RxD FT232RL بـ "1". لجعل هذا أسهل طريقة هي واحدة من استنتاجات اردوينو المجانية. لقد استخدمت إخراج D8. لأداء هذا الإجراء ، قمت باللحام على الطرف 7 من المقاوم RP1B بقيمة اسمية قدرها 1 كيلو أوم من الأسلاك مع موصل في النهاية ، بتمريره عبر الثقوب في اللوحة للتثبيت الميكانيكي. في الشكل 5 ، يظهر هذا الاتصال بخط أحمر ، ويبين الشكل 6 صورة لنقطة اللحام.
الشكل 5. جزء من دائرة اردوينو نانو
الشكل 6. مكان لحام سلك إضافي في اردوينو نانوتعمل هذه الآلية على النحو التالي: بعد إعادة التعيين ، تكون الضلع D8 في وضع إدخال عالي المعاوقة ولا تتداخل لوحة Arduino مع التشغيل العادي لآلية تحميل البرنامج في اللوحة.
عندما يكون من الضروري البدء في التحكم في الشاشة في الرسم ، يتم تبديل دبوس D8 إلى وضع الدبوس النشط ، ويتم ضبطه على "1" (هذا يمنع نقل البيانات من دبوس TxD Atmel328P إلى دبوس RxD FT232RL) وبعد ذلك يتم تنفيذ الأمر Serial.end () ؛ هذا الإجراء مهم ، لأنه بعد إيقاف تشغيل وضع الإرسال التسلسلي ، تظهر البتة D1 على دبوس TxD ، والتي يتم تخزينها في سجل إخراج المنفذ D من سجل البايت السابق في هذا المنفذ. إذا كانت البتة D1 هي "0" ، فعند إيقاف تشغيل وضع الإرسال التسلسلي ، فستتحول ساق المعالج من "1" إلى "0" وسيؤدي ذلك إلى إرسال حرف طفيلي على القناة التسلسلية.
أثناء عملية تصحيح الأخطاء ، اتضح أيضًا أنه كان علينا انتظار نهاية نقل المخزن المؤقت بأكمله إلى الجهاز المضيف قبل حظر القناة التسلسلية ، وإلا فستفقد بعض البيانات المرسلة.
عندما يحتاج الرسم إلى تمكين نقل البيانات عبر المنفذ التسلسلي ، فمن الضروري تشغيل وضع النقل التسلسلي وإيقاف حظر نقل البيانات التسلسلية عن طريق ضبط وضع القراءة على الرقم D8.
لتنفيذ هذه المهام ، تمت إضافة روتينين إلى المخطط:
void s_begin() { Serial.begin(115200); // TxD USART. TxD "1", RxD pinMode(8, INPUT); // RxD FT232RL "1", RxD FT232RL }
void s_end() { Serial.flush(); // pinMode(8, OUTPUT); // FT232RL "1" . D8_High; // Serial.end(); // . TxD RxD D0(RxD) D1(TxD) D }
يمكن إجراء برنامج اختبار كامل
هنا .