أفر. دورة تدريبية

29.03.2024

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

مصفوفة لوحة المفاتيح.
رسمتها لكم في الصورة الأولى. كما ترون، هناك صفوف وأعمدة. تشير الدوائر إلى الأزرار. يتم تمكينها بحيث يتم إغلاق الصف إلى العمود عند النقر فوق الزر.

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

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

يعمل على النحو التالي.

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

الآن نقرأ القيمة بأكملها من منفذ القراءة مرة واحدة. إذا لم يتم الضغط على أي زر في العمود A، فستكون جميع الأزرار في المنفذ. ولكن إذا قمت بالضغط على أي زر من العمود A، فسيتم إغلاق السطر A على الفور من دبوس المنفذ هذا. في السطر A لدينا حاليًا 0، وهذا يوفر صفرًا عند مخرجات المسح لوحدة التحكم. ولذلك، فإن دبوس المنفذ المقابل سيكون له أيضًا 0
لذلك، إذا تم الضغط على زر، على سبيل المثال، 6، فإن السطر P1 سيكون 0.

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

يمكنك اكتشاف الضغط المتزامن على العديد من الأزرار - ما عليك سوى التحقق ليس بالبايت، ولكن ببت معين.

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

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

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

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

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

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

السمات المميزة:

  • لوحة مفاتيح مكونة من 64 مفتاحًا على شكل مصفوفة مقاس 8 × 8
  • لا توجد مكونات خارجية مطلوبة
  • الخروج من وضع السكون بالضغط على الزر
  • سهولة التكامل مع التطبيقات الأخرى
  • الاستهلاك المنخفض
  • خوارزمية البرمجيات المضادة للارتداد
  • دعم وظائف الأزرار البديلة، والتي يمكن إزالتها بسهولة لتقليل حجم البرنامج
  • يمكن استخدام رمز البرنامج بواسطة أي متحكم AVR يحتوي على 17 سطرًا على الأقل من منافذ الإدخال / الإخراج وله مقاطعة لتغيير حالة الخطوط (حاليًا هذا هو ATmega162 وATmega169 فقط)
  • يمكن تعديل الكود بسهولة لاستخدامه في وحدات التحكم الدقيقة الأخرى التي تستخدم المقاطعة الشائعة (راجع مثال التطبيق "AVR240: 4 x 4 Keypad - Wake-up on Keypress")

مقدمة

يصف مثال التطبيق هذا برنامج تشغيل واجهة مصفوفة لوحة المفاتيح 8 × 8. تم تصميم مثال التطبيق للاستخدام في الأجهزة ذاتية التشغيل. يقضي متحكم AVR معظم وقته في وضع السكون، ولا يتم تنشيطه إلا عند الضغط على أزرار لوحة المفاتيح. بعد ذلك، يتم فحص مصفوفة لوحة المفاتيح ومعالجة المعلومات وإعادتها إلى وضع الاستهلاك المنخفض.

كما أن الجهاز الموضح في مثال التطبيق هذا يدعم وظائف بديلة قابلة للبرمجة بواسطة المستخدم مثل Caps Lock وCtrl- وShift- وAlt-. يقدم تطبيق الاختبار مصفوفة لوحة مفاتيح مقاس 4 × 4، حيث يمثل كل مفتاح رقمًا واحدًا وثلاثة رموز. تتيح لك الأزرار البديلة تحديد وظيفة الزر الذي تضغط عليه.

الشكل 1. تطبيق الاختبار

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

يعتمد الجهاز الموضح في مثال التطبيق هذا على وحدة التحكم الدقيقة ATmega162. ومع ذلك، بعد تعديلات طفيفة، يمكن استخدام رمز البرنامج في وحدة التحكم الدقيقة ATmega169.

مبدأ التشغيل

يظهر في الشكل 2 اتصال أزرار مصفوفة لوحة المفاتيح مقاس 8 × 8. عند الضغط على زر، يتم توصيل الصفوف والأعمدة المقابلة. عند النقر فوق الزر الأيسر العلوي، يتم إغلاق العمود الموجود في أقصى اليسار والصف العلوي.


الشكل 2. توصيل مصفوفة لوحة المفاتيح

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

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


الشكل 3. فك التشفير الخاطئ عند الضغط على الأزرار في وقت واحد

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

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

أزرار بديلة

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

يتم أخذ الأزرار البديلة في الاعتبار فقط عند الضغط على الأزرار الرئيسية. في هذه الحالة، تسمى الأزرار البديلة "طلقة واحدة".

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

يؤدي استخدام مبدأ الضغط المتسلسل بدلاً من الضغط المتزامن على الأزرار إلى تجنب المشكلات المرتبطة بفك التشفير الخاطئ. إذا تم الضغط على عدة أزرار في نفس الوقت، فسوف يتجاهلها التطبيق ببساطة.

ترتد الاتصال

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


الشكل 4. ترتد الاتصال

تطبيق

يستخدم هذا التنفيذ متحكم ATmega162. تم إدراج توصيات الترقية إلى وحدة التحكم الدقيقة ATmega169 في نهاية هذا المستند.

تتصل لوحة المفاتيح بمنفذين 8 بت لوحدة التحكم الدقيقة AVR. تم تكوين منفذ واحد (المنفذ D) لتشغيل جميع الخطوط كمخرجات وهو متصل بصفوف مصفوفة لوحة المفاتيح. تم تكوين المنفذ الآخر (المنفذ C) لتشغيل جميع الخطوط كمدخلات وهو متصل بأعمدة مصفوفة لوحة المفاتيح. يمكن رؤية ذلك بمزيد من التفصيل في الشكل 2. عند مسح مصفوفة لوحة المفاتيح، يجب أن يحافظ المنفذ المستخدم كمخرج على المخرجات منخفضة، ويجب أن يحتوي المنفذ المستخدم كمدخل على مقاومات سحب طاقة مدمجة.

يستخدم الجهاز الموصوف السطر الأول من المنفذ E لإنشاء رمز تسلسلي يتوافق مع رمز الزر المضغوط. يتم إرسال البيانات باستخدام UART المدمج، والذي تم وصف استخدامه في مثال تطبيق AVR306.

عند الضغط عليه بشكل طبيعي، يتم إنشاء رمز المسح الضوئي، الذي تقع قيمته في النطاق من 0 إلى 63 (8 صفوف * 8 أعمدة). يؤدي الضغط على الزر الخاص باستدعاء وظيفة بديلة أيضًا إلى إنشاء رمز مسح ضوئي عادي، ولكن بالإضافة إلى ذلك، يتم تعيين العلامات المقابلة للوظائف البديلة. يتم تخزين إشارات الحالة هذه في متغير عام.

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

يتم استخدام متغير عام آخر لتمرير رمز المسح مع العلامات إلى التطبيق. تُستخدم البتات الستة الأقل أهمية لإرسال الشفرة (من 0 إلى 63)، وتشير البتة الأكثر أهمية (MSB) إلى حدوث تغيير في الحالة. يقوم برنامج تشغيل لوحة المفاتيح بتعيين هذا البت عند الضغط على الزر. يقوم التطبيق باستقصاء هذا الجزء وإعادة تعيينه بعد قراءة رمز المسح. يتم عرض البايت العالمي وكلمة المسح الضوئي في الشكل 5.


الشكل 5. رمز المسح المتقدم

يتم تطبيق برنامج تشغيل لوحة المفاتيح كبرنامج معالج المقاطعة. البرنامج الرئيسي يضع المعالج الدقيق في وضع السكون. عند الضغط على الزر، يقوم برنامج تشغيل لوحة المفاتيح بتنشيط وحدة التحكم الدقيقة AVR، ويتلقى رمز المسح الضوئي ويقوم بتحديث البايتات العامة. بعد أداء وظائف الأزرار المضغوطة، يقوم البرنامج الرئيسي مرة أخرى بوضع وحدة التحكم الدقيقة في وضع السكون.

وحدة البدء والبرنامج الرئيسي

ويبين الشكل 6 وحدة التهيئة والبرنامج الرئيسي. تم توضيح إعادة تعيين علامات الوظائف البديلة والمتغيرات العامة، بالإضافة إلى تهيئة المنافذ أعلاه. إذا لم تكن هناك حاجة للمعالجة، فسيتم تحديد وضع السكون الخامل.


الشكل 6. وحدة البدء والبرنامج الرئيسي

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

الشكل 7. رسم تخطيطي لوحدة البرنامج الرئيسية لوحدة فك ترميز لوحة المفاتيح

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


الشكل 8. رسم تخطيطي لروتين فحص لوحة المفاتيح

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


الشكل 9. رسم تخطيطي لوظيفة معالجة كود المسح الضوئي

حالة اختبار لتطبيق myCellPhone

توجد حالة اختبار تنفذ مصفوفة لوحة مفاتيح تشبه لوحة مفاتيح الهاتف الخليوي. يتم نقل الأحرف النهائية فيه عبر واجهة USART. باستخدام مصفوفة لوحة المفاتيح 4 × 4، يمكنك تكوين جميع الأرقام والرموز التي يمكن توفيرها باستخدام أربعة أزرار وظيفية بديلة أخرى. يتم استخدام ثلاثة أزرار لتحديد وظيفة بديلة لكل زر أساسي، بينما يعمل الزر الرابع كزر Caps Lock (التبديل بين الأحرف الكبيرة والصغيرة).

يتم استخدام جدول التحويل لتحويل رموز المسح إلى مجموعات رموز تتوافق مع رموز الأزرار المضغوطة، مع مراعاة أزرار الوظائف البديلة. يمكن أيضًا استخدام رمز المسح لمسح مصفوفة لوحة مفاتيح مقاس 8 × 8، وبالتالي، سيحتوي الجدول على 8 إدخالات لكل صف، مع استخدام 4 أزرار فقط لكل صف. وبالتالي، إذا زاد عدد أعمدة مصفوفة لوحة المفاتيح، فلن يتغير حجم البرنامج.

حجم رمز التطبيق وتوقيته

يوضح الجدول 1 أحجام التعليمات البرمجية للإجراءات الفرعية لمختلف وظائف معالجة مصفوفة لوحة المفاتيح.

الجدول 1. أحجام الرموز الروتينية لمختلف وظائف معالجة مصفوفة لوحة المفاتيح

يوضح الجدول 2 مدة الإجراءات المختلفة التي يقوم بها متحكم ATmega162 الذي يعمل بتردد 8 ميجاهرتز. فيما يلي تسلسل الإجراءات بدءًا من الاستيقاظ عند اكتشاف الضغط على الزر وحتى الدخول في وضع السكون بعد معالجة الأزرار التي تم الضغط عليها.

الجدول 2. مدة تسلسل الإجراءات المنجزة

إذا لم تأخذ في الاعتبار وضع إيقاف تشغيل السكون، فيمكنك أن ترى أن وحدة التحكم الدقيقة تعمل في معظم الأوقات في وضع السكون الخامل. يكون المتحكم الدقيق في الوضع النشط لمدة 0.3 مللي ثانية فقط، أي حوالي 0.5% من إجمالي الوقت. ويرد في الجدول 3 الوقت النسبي الذي يقضيه في أوضاع التشغيل المختلفة.

الجدول 3. الاستهلاك والوقت النسبي الذي يقضيه المتحكم الدقيق في أوضاع التشغيل المختلفة

فإذا افترضنا أنه يتم الضغط على الأزرار مرة واحدة كل 10 دقائق، فإن متوسط ​​الاستهلاك سيكون 2 ميكرو أمبير فقط.

مناقشات حول استخدام وحدات التحكم الدقيقة الأخرى

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

لاحظ أيضًا أن ATmega169 يستخدم سجل SMCR لتنشيط وضع السكون.

في حالة استخدام وحدات تحكم دقيقة أخرى، ستكون هناك حاجة إلى مكونات خارجية إضافية وتغيير في المقاطعة المستخدمة. تم وصف استخدام وحدات التحكم الدقيقة هذه لمعالجة مصفوفة لوحة المفاتيح 4x4 في مثال تطبيق AVR240. لا يلزم تغيير الوظائف المتبقية في مثال التطبيق الموصوف.

في كثير من الأحيان لا يوجد ما يكفي من دبابيس المتحكم الدقيق لتوصيل العدد المطلوب من الأزرار. عند الاتصال مباشرة بالأزرار n، فإنك تحتاج إلى تخصيص نفس عدد خطوط الإدخال/الإخراج، وهو أمر غير ممكن دائمًا. لاستخدام أكثر عقلانية لخطوط المنفذ، يمكنك استخدام مخطط اتصال المصفوفة في الشكل 1. في هذه الحالة، يكون حجم المصفوفة المتصلة بالمنفذ D 4 * 4 = 16 زرًا (4 صفوف r0...r3 و4 أعمدة c0...c3). يتم دائمًا تكوين الخطوط PD0...PD3، وهي الخطوط r0...r3، للإدخال، ويتم سحبها إلى ناقل الطاقة بواسطة المقاومات R (القيمة النموذجية 4.7...10 كيلو أوم). منهم يتم قراءة حالة الأزرار SB1-SB16. يتم إنشاء إشارة صفر منطقية بالتناوب على الخطوط PD4...PD7 (الأعمدة c0...c3). في البداية، يتم تعيين المستوى المنخفض على العمود c0، وعلى جميع الأعمدة الأخرى يتم تعيين الحالة Z. الآن فقط عند الضغط على أزرار هذا العمود (SB1...SB4)، يمكن أن يحدث مستوى منطقي منخفض في سطور الصف r0...r3. بعد ذلك، يتم تعيين 0 المنطقي في العمود c1 ويتم فحص مجموعة الأزرار SB5...SB8 وما إلى ذلك. يتم استخدام نفس خوارزمية استقصاء الأزرار تمامًا لأي لوحة مفاتيح مصفوفية أخرى، بغض النظر عن عدد الصفوف والأعمدة. بشكل عام، عدد الأزرار n هو حاصل ضرب عدد الصفوف والأعمدة. لذلك، على سبيل المثال، ستحتوي المصفوفة 2*2 (4 خطوط) على 4 أزرار. ولكن من ناحية أخرى، ستكون هناك حاجة إلى نفس عدد خطوط الإدخال/الإخراج لتوصيل نفس عدد الأزرار مباشرة. وهكذا، يبدأ التوفير في المخرجات بالظهور عندما يتجاوز عدد الأزرار 4...6، ويصبح أكثر أهمية مع زيادة عددها.

الشكل 1: مخطط مصفوفة لتوصيل الأزرار

العناصر VD1...VD4 وR1...R4 اختيارية في الرسم التخطيطي. تعمل الثنائيات على الحماية من الدوائر القصيرة بين خطوط الصف والعمود. على سبيل المثال، إذا قمت بالضغط على زر SB1 (في وقت مسح العمود c0)، فقد تم تكوين خط الصف r0 فجأة للإخراج ويوجد به مستوى منطقي مرتفع، ثم سيبدأ تيار كبير بشكل غير مقبول للتدفق من خلال الدائرة c0r0. على الرغم من أن منطق البرنامج لا يسمح بوضع التشغيل هذا، إلا أنه لا يزال من الممكن حدوثه لأسباب مختلفة. لذلك، على الأقل عند تصحيح البرنامج، لن تكون الثنائيات زائدة عن الحاجة. إذا كانت سعة التركيب المشار إليها بالأطراف PD3...PD0 ليست كبيرة جدًا، فيمكن استبدال مقاومة السحب لناقل الطاقة بمقاومات "سحب لأعلى" داخلية. للقيام بذلك، يجب عليك تعيين البتات المناسبة في سجل PORTD عندما يتم تكوين الخطوط للإدخال.

مثال على روتين مسح لوحة المفاتيح المصفوفة

زر Def = R16؛ قم بالتسجيل باستخدام رمز الزر الذي تم الضغط عليه. clr temp ؛ قم بتكوين خطوط المنفذ D لإدخال DDRD، temp ldi temp، (1<< PD0)|(1 << PD1)|(1 << PD2)|(1 << PD3) out PORTD,temp . rcall btn_pol . ; Подпрограмма опроса матричной клавиатуры; R16 – номер нажатой кнопки на выходе из подпрограммы, ; если ни одна кнопка не нажата, то R16=0; ; если нажаты две и более кнопок, то R16=0xFF ; R17 – регистр для определения номера строки; R18 – регистр для задания номера столбца; R19 – счётчик столбцов; R20 – регистр для промежуточных операций btn_pol: clr R16 ;обнуляем регистры с кодом нажатой clr R19 ;кнопки и номером столбца ldi R18,0x0F ;очищаем регистр данных PORTD порта D out PORTD,R18 ldi R18,0x00010000 bp1: out DDRD,R18 ;настраиваем на вывод линию соответствующего nop ;столбца через регистр DDRD порта D in R17,PIND ;считываем состояние строк из регистра PIND com R17 andi R17,0x0F ;выделяем значение 4-х строк ldi R20,0 ;если ни одна кнопка в столбце не нажата, breq bp5 ;перемещаемся на следующий столбец cpi R17,0x01 ;если нажата кнопка в строке c0, ldi R20,1 ;то вычисляем её номер breq bp2 cpi R17,0x02 ;если нажата кнопка в строке c1, ldi R20,2 ;то вычисляем её номер breq bp2 cpi R17,0x04 ;если нажата кнопка в строке c2, ldi R20,3 ;то вычисляем её номер breq bp2 cpi R17,0x08 ;если нажата кнопка в строке c3, ldi R20,4 ;то вычисляем её номер brne bp3 ;если нажато более одной кнопки, завершаем опрос bp2: tst R16 ;если в предыдущих столбцах были нажаты breq bp4 bp3: ldi R16,0xFF ;кнопки, то завершаем опрос с кодом 0xFF ret bp4: push R19 ;иначе вычисляем номер кнопки, как lsl R19 ;N = 4*column + row + 1 = 4*R19 + R20 + 1 lsl R19 add R20,R19 mov R16,R20 pop R19 bp5: inc R19 lsl R18 cpi R19,4 ;повторяем цикл опроса пока не будут brne bp1 ;опрошены все 4 столбца ret

مع كل المزايا، فإن نظام اتصال المصفوفة له أيضًا عيب واحد. بمساعدتها، من الصعب تنفيذ مجموعات أزرار القراءة. إذا تم الضغط على أي ثلاثة أزرار تشكل زاوية قائمة مع بعضها البعض (على سبيل المثال، SB1، SB2، SB5) على لوحة المفاتيح هذه، فسيقوم برنامج الاستقصاء بتسجيل ضغطة خاطئة على الزر الموجود في الزاوية الحرة للمستطيل (في هذه الحالة، SB6). في موقف معين، يمكن أن يكون مثل هذا الزر "الوهمي" أي زر على لوحة المفاتيح.

قائمة العناصر الراديوية

تعيين يكتب فئة كمية ملحوظةمحلمفكرة بلدي
DD1 MK AVR 8 بت

ATmega8

1 إلى المفكرة
VD1-VD4 الصمام الثنائي 4 إلى المفكرة
ر، ر، ر، ر المقاوم 4
إذًا كيف سنصنع المصفوفة؟ والأهم من ذلك، لماذا هو مطلوب على الإطلاق؟ حسنًا، يرجع هذا بشكل أساسي إلى القيود المادية لوحدات التحكم الدقيقة التي تم تصميم لوحات المفاتيح عليها. والحقيقة هي أنه مع زيادة عدد المسامير في وحدات التحكم الدقيقة والرقائق المنطقية القابلة للبرمجة، يزداد حجمها أيضًا، مما يؤدي بدوره إلى زيادة في استهلاك الطاقة والقدرات، ولكن الأهم من ذلك - الأسعار. نتيجة لذلك، يمكنك اختيار إما شريحة رخيصة ذات أداء منخفض (والتي تناسبك جيدًا)، ولكن مع عدد صغير من المدخلات والمخرجات، أو شريحة أكثر قوة، ومع ذلك، فإن أدائها يتجاوز متطلباتك بشكل كبير. لكن هذه الشريحة القوية فقط هي التي ستحتوي على دبابيس كافية لتوصيل كل زر على لوحة المفاتيح.

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

القليل من النظرية

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

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

من ناحية المرسل، يمكنك ببساطة تغيير الحالة الكهربائية للموصل (عن طريق تمرير تيار مباشر فيه، وتغيير جهده)، على أمل أن يتمكن جهاز الاستقبال من اكتشاف هذا التغيير وفهمه بشكل صحيح.

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

إذا كنت ترغب في إرسال مستوى منطقي "0"، فعادة لهذا الغرض يتم تقليل الجهد عند خرج المرسل إلى 0 فولت، ويبدأ التيار بالتدفق من جهاز الاستقبال إلى جهاز الإرسال حتى يتمكن جهاز الاستقبال من تحديد ذلك المستوى المنطقي يتوافق مع "0". (في حين أن الاتجاه العكسي للتيار يعني أن هناك إمكانات سلبية في مكان ما في الدائرة - وهذا، كقاعدة عامة، لا يحدث في الإلكترونيات الرقمية.) من ناحية أخرى، لنقل المستوى المنطقي "1" أ يتم تطبيق جهد مساوٍ لجهد الإمداد، وبما أن هذا غالبًا ما يكون أعلى جهد في الدائرة، فلن يكون أمام التيار الكهربائي خيار سوى التدفق من جهاز الإرسال إلى جهاز الاستقبال.

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

زر

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

حسنًا، كيف سنقوم بتوصيل الزر بمدخل الميكروكونترولر؟ بشكل أساسي، يمكن لأي إدخال أن يعمل بمستويين منطقيين محتملين: "0" و"1". من الممارسات الشائعة اعتبار الفولتية القريبة من 0 فولت صفرًا منطقيًا، والجهد القريب من جهد المصدر (عادةً 5 فولت أو 3.3 فولت) كصفر منطقي. لكن المشكلة هي أن الزر الميكانيكي نفسه لا يستطيع التحكم في الجهد. إنه يتحكم في التيار - أي، إذا قمنا بتوصيل عقدتين بإمكانات كهربائية مختلفة من خلال زر، فإن التيار سوف يتدفق بين هذه العقد فقط إذا تم الضغط على الزر.

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

زر السحب

نلقي نظرة على هذا الرسم البياني. عندما لا يتم الضغط على الزر (الدائرة مفتوحة)، لا يتدفق التيار عبرها، وبالتالي فإن الجهد عند العقدة "A" سيكون قريبًا من جهد الإمداد VCC (في الواقع، أقل من VCC بمقدار انخفاض الجهد عبر الدائرة). المقاوم يساوي R I). عند الضغط على الزر (الدائرة مغلقة)، يتدفق التيار عبر المقاومة إلى الأرض. مع الأخذ في الاعتبار حقيقة أن مقاومة الزر المغلق صغيرة جدًا (في حدود مئات المللي أوم)، فإن الجهد في العقدة "A" سيكون قريبًا من "0".

في هذا التكوين، يسمى المقاوم سحبًا لأعلى لأنه "يسحب الجهد لأعلى" إلى مستوى VCC. وبدون الاتصال بمصدر الطاقة من خلال المقاوم، لن يكون هناك جهد على الإطلاق في العقدة "أ" (في هذه الحالة، يُطلق على خرج الدائرة الدقيقة اسم "معلق في الهواء" أو في حالة مقاومة عالية) .

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

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

مبدأ المصفوفة

المبدأ الأساسي لمصفوفة لوحة المفاتيح هو القدرة على توصيل أكثر من زر بمدخل متحكم واحد.

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


العديد من الأزرار، مدخل واحد (العقدة "أ")

"A" هو المدخل الوحيد للمتحكم الدقيق، و"C1"..."Cn" هي مخرجاته. يتم ضبط أحد المخارج على "0" منطقي، أي أن جهة الاتصال هذه متصلة بطريقة ما بالأرض داخل الدائرة الدقيقة - وبالتالي، سوف يتدفق التيار دائمًا إلى جهة الاتصال هذه (وفقًا للمبدأ الأساسي الأول). الآن، عند الضغط على الزر المتصل بهذا الإخراج، سيتم "الضغط" على الإدخال "A" على الفور من خلاله إلى الأرض، وسيتم ضبطه على "0". لن يؤدي الضغط على الأزرار الأخرى إلى تغيير أي شيء، لأن دبابيسها الأرضية غير متصلة في أي مكان في الوقت الحالي. عندما نحتاج إلى استطلاع الزر التالي، فإننا نزيل المنطق "0" من الإخراج الحالي ونضبط هذا المستوى على الإخراج التالي، بحيث سيتم استخدام مخرج واحد فقط من مخرجات المتحكم الدقيق في أي وقت.

يُطلق على هذا التكوين (حيث يكون الإخراج متصلاً بالأرض أو منفصلاً تمامًا) اسم مخرج الصرف المفتوح (OC) (تاريخيًا - المجمع المفتوح (OC)). لقد قمت هنا ببعض التبسيط - في الواقع، لا يمكن فصل جهة الاتصال تمامًا عن الدائرة إلا إذا تم قطعها عنها فعليًا. ولكن بالنسبة للإدخال/الإخراج الرقمي البسيط، فإن هذا التبسيط مناسب تمامًا. توفر معظم وحدات التحكم الدقيقة القدرة على تكوين أطراف الإخراج الخاصة بها برمجيًا للعمل في وضع نظام التشغيل. ولكن ماذا لو لم يكن لدينا هذا الخيار؟ هناك تكوين آخر - وضع الدفع والسحب؛ اليوم هذا الخيار هو واحد من الأكثر شعبية. يعمل هذا التكوين بشكل مختلف قليلاً. في الحالة "0"، يظل الخرج مثبتًا على الأرض، ولكن عندما تحدث الحالة "1"، يتم سحبه إلى جهد الإمداد VCC، بحيث لا يعد الخرج معلقًا في الهواء، ويمكن الآن أن يصبح المصدر الحالي نفسه.

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

إضافة صفوف

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

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


مصفوفة لوحة المفاتيح البسيطة

قراءة هذه المصفوفة بسيطة للغاية. نحن نقوم بالاستعلام عن عمود واحد في كل مرة. يتم تحديد العمود المراد قراءته عن طريق توصيل أحد المخارج "C1".. "Cn" بالأرضي (يتم ضبط الإخراج على "0" في وضع نظام التشغيل). الآن، من خلال استجواب الصفوف "R1".. "Rm" واحدًا تلو الآخر، يمكننا تحديد حالة كل زر من أزرار العمود المحدد. الأزرار الموجودة في الأعمدة الأخرى ليس لها أي تأثير، حتى لو تم الضغط عليها، لأن دبابيسها الأرضية في هذه اللحظة تطفو في الهواء (أو كما يقولون في الإلكترونيات، في حالة Hi-Z).

بعد أن يتم استقصاء العمود بأكمله، ننتقل إلى العمود التالي، ونحرر الإخراج الحالي ونضغط على العمود التالي إلى الصفر. يعتبر فحص المصفوفة مكتملاً عندما يتم مسح جميع الأعمدة ضوئيًا. إذا فعلت كل شيء بسرعة كافية، فلن يلاحظ حتى أسرع كاتب على الطابعة الفواصل الزمنية بين استطلاعات الأعمدة. حتى باستخدام وحدة تحكم دقيقة تبلغ سرعتها 16 ميجاهرتز، يمكننا بسهولة مسح المصفوفة بأكملها آلاف المرات في الثانية، بينما حقق أسرع كاتب في الاختبار على hi-games.net سرعة تبلغ 203 كلمة في الدقيقة (wpm) - أي أقل بقليل من 17 ضغطة مفتاح في كل ثانية.

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

ماذا لو لم يكن لدينا منافذ صرف مفتوحة؟

قد تسأل: ماذا يجب أن نفعل إذا كان المتحكم الدقيق المحدد لا يحتوي على وضع نظام التشغيل؟ حسنًا، لقد حددنا بالفعل نوع المشاكل التي يمكن أن تحدث، وأن سحب المخرجات إلى VCC (أي "توصيلها" بالطاقة) ليس فكرة جيدة. هناك طرق عديدة لحل هذه المشكلة؛ من بينها لا توجد مخازن مؤقتة خاصة لإخراج نظام التشغيل فحسب، بل توجد أيضًا سجلات تحويل مع مخرجات نظام التشغيل - لتقليل عدد الأرجل المعنية بشكل أكبر. ولكن هناك تقنية أخرى شائعة جدًا تُستخدم غالبًا في تصميم لوحات مفاتيح الكمبيوتر (في الواقع، كانت تستخدم على نطاق واسع في الأيام الخوالي).

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


مشكلة الدفع والسحب

من الخرج، الذي يتم سحبه إلى "1" (وليس معلقًا في حالة Hi-Z)، يبدأ التيار بالتدفق. يتدفق من خلال أقرب زر مغلق، ثم من خلال الزر المغلق في العمود الذي يتم استقصاؤه، ويتدفق أخيرًا مباشرة إلى الإخراج المعين على "0". يمكن أن يؤدي هذا إلى أي شيء - من عدم القدرة على قراءة حالة لوحة المفاتيح بشكل موثوق إلى فشل وحدة التحكم الدقيقة نفسها.

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

بطبيعة الحال، من المنطقي تقليل عدد الثنائيات. للقيام بذلك، يمكنك تقليل عدد الأعمدة عن طريق زيادة عدد الصفوف. وإذا كانت النتيجة الناتجة لا تتناسب بشكل جيد مع التخطيط الفعلي للوحة المفاتيح، فيمكنك "توسيع" المصفوفة بمقدار 90 درجة (تبديل الصفوف والأعمدة). الاحتمالات لا حصر لها. ولكن في هذه الأيام، ظهر عدد كبير من وحدات التحكم الدقيقة، وهي سهلة الاستخدام ومريحة للهواة، لذلك اليوم لم تعد التقنية الموصوفة تستخدم عمليا في مشاريع لوحة المفاتيح المحلية. لحسن الحظ.

النقرات الوهمية (الظلال)

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

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


مثال على النقر الوهمي

في الشكل، يتم الضغط على ثلاثة أزرار في وقت واحد. اثنان منهم في العمود "C2"، واثنان في الصف "Rm". وهذا يعني أن أحد الأزرار المضغوطة يشترك في صف مع زر آخر مضغوط، وعمود مع زر مضغوط ثالث. وهذا هو بالضبط ما يحدث في هذه الحالة انقر الوهمية. تخيل أننا نقوم حاليًا باستقصاء العمود "C1" (أي يتم الضغط عليه على الأرض - وهو في الحالة "0"). يؤدي هذا الوتر المميز للأزرار المضغوطة إلى ما يلي: على الرغم من عدم الضغط على الزر الأيسر العلوي، فإن الصف "R2" يكون في الحالة "0" لأنه مثبت على الأرض بواسطة العمود "C1" (الموجود في "0") من خلال الضغط على ثلاثة أزرار. ونتيجة لذلك، تقرأ وحدة تحكم لوحة المفاتيح الزر الأيسر العلوي على أنه "مضغوط"، بغض النظر عما إذا تم الضغط عليه بالفعل أم لا. الوضع الموصوف يسمى الضغط الوهمي (الظلال)، لأن بعض مجموعات الأزرار التي يتم الضغط عليها في نفس الوقت تؤدي إلى تنشيط وهمي لأزرار أخرى (ضغطات مفاتيح خفية)، على الرغم من عدم الضغط على هذه الأزرار الأخرى فعليًا.

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

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

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

كثيرا ما يخلط الناس " اثار الوهمية" و " عملية الحظر» (« الظلال" و " التشويش")، وهو لغز بالنسبة لي شخصيًا - في رأيي، هذه المصطلحات بديهية تمامًا.

في لوحات المفاتيح التي تستخدم مثل هذه المصفوفات التي نظرنا إليها للتو، من المستحيل تجنب التنشيط الوهمي أو الحظر. نظرًا لأن عمليات التنشيط الوهمية غير مقبولة في العمل اليومي، فمن أجل مكافحتها، تستخدم جميع الشركات المصنعة للوحات المفاتيح ذات القبة المطاطية تقريبًا حيلًا مختلفة، ويدخل الحظر في الاعتبار. سؤال: كيف يتم إنشاء مصفوفة بحيث يحدث الحظر نادرًا قدر الإمكان ولا يحدث بسبب مجموعات لوحة المفاتيح الشائعة؟ في الواقع، هذا موضوع جيد لكتاب كامل؛ هذا هو السبب في أن مصفوفات لوحات مفاتيح المستهلك مربكة للغاية وتمنع دائمًا الحالة المزاجية الجيدة (مثل التورية المقصودة).

الثنائيات لجميع الأزرار - حل جذري

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

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


المصفوفة النهائية

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

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

يتدحرج

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

xKRO

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

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

نكرو

يعني مصطلح NKRO تمرير مفتاح N، ويتم استخدامه للإشارة إلى لوحات المفاتيح التي تدعم، بغض النظر عن ذلك، أي مجموعة من المفاتيح التي يتم الضغط عليها في نفس الوقت. لكن ضع في اعتبارك أن مصفوفات NKRO ولوحات المفاتيح NKRO هما شيئان مختلفان تمامًا. على سبيل المثال، إذا كان التنفيذ النهائي للمصفوفة التي استعرضناها في المقالة يدعم NKRO (مع الأخذ في الاعتبار البرامج الثابتة المكتوبة بشكل صحيح)، فهذا لا يعني على الإطلاق أن لوحة المفاتيح التي تستخدم هذه المصفوفة ستدعم أيضًا NKRO. قد يحدث هذا بسبب القيود التي تفرضها منافذ الاتصال التي تتصل بها لوحة المفاتيح؛ قد يكون السبب الآخر هو اقتصاد المصنعين، الذين يدخرون دائمًا هنا وهناك. سأحاول شرح مشكلة NKRO عند الاتصال بـ PS/2 وUSB في الأجزاء التالية.

الحد الأدنى

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

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

لوحات المفاتيح الأكثر شيوعًا هي 3x4 و4x4 مع 12 و16 زرًا على التوالي. كان لدي لوحة مفاتيح 4x4 في يدي. دعونا نفكر في العمل معها الآن.

لقد حدث أن لدي لوحة المفاتيح هذه مع جهات اتصال غشائية. إنه جيد لأنه يبلغ سمكه 1 مم فقط ويمكن لصقه بسهولة على الأسطح المطلوبة.

بعد الضغط على الأزرار، استخدمت مقياسًا متعددًا لتحديد كيفية توصيل الأزرار الموجودة داخل لوحة المفاتيح.


توجد وظيفة خاصة لمسح لوحات المفاتيح المصفوفية في Bascom-AVR جيتكبد() . تم تصميم هذا الأمر للاستخدام مع لوحات المفاتيح 4x4، لذا فهو يستخدم جميع المسامير الثمانية لمنفذ وحدة تحكم دقيقة واحدة. وإذا كنت تستخدم لوحات مفاتيح بها عدد أقل من الأزرار، فيجب أن تأخذ ذلك في الاعتبار.

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

على سبيل المثال في السطر التالي:

التكوين Kbd = بورتد، فضح= 20 , تأخير= 100

تم تكوين اتصال لوحة المفاتيح بـ PortD، وتم ضبط وقت الارتداد على 20 مللي ثانية، ووقت التأخير بعد الضغط هو 100 مللي ثانية

يتولى هذا الأمر كل أعمال مسح خطوط لوحة المفاتيح ويعيد إلى المتغير رقم المفتاح الذي تم الضغط عليه من 0 إلى 15. إذا لم يتم تسجيل الضغط على الزر، فسوف تقوم الوظيفة بإرجاع الرقم 16. علاوة على ذلك، اعتمادًا على كيفية القيام بذلك عندما تكون الأزرار متصلة، قد تحتاج إلى معرفة رمز الأزرار المضغوطة.

في المثال أدناه، يتم فحص لوحة المفاتيح بسرعة 10 هرتز ويقع في حلقة البرنامج الرئيسية. يتم عرض نتيجة الضغط على شاشة LCD.

$regfile = "m8def.dat"
$ كريستال = 1000000

"تكوين العرض
التكوين Lcdpin = دبوس، Rs = Portc. 0، ه = بورتك. 1، Db4 = بورتك. 2، Db5 = بورتك. 3، Db6 = بورتك. 4، Db7 = بورتك. 5
التكوين شاشات الكريستال السائل= 20 * 4
المؤشر عن
Cls

"تكوين لوحة المفاتيح
التكوين Kbd = بورتد، فضح= 20 , تأخير= 100


"المتغيرات
خافت Key_char مثلبايت"رقم المفتاح الذي تم الضغط عليه
خافت Key_str مثلخيط* 1 "رمز المفتاح الذي يتم الضغط عليه في لوحة المفاتيح
خافت نتيجة مثلخيط* 20 "نتيجة الضغط على لوحة المفاتيح

نتيجة= ""

"الحلقة الرئيسية للبرنامج
يفعل

Key_char= جيتكبد() "لا يتم الضغط على المفتاح وتقوم الدالة بإرجاع القيمة 16 إلى المتغير

لو Key_char<> 16 ثم"إذا كان المتغير لا يساوي 16، فقد تم الضغط على الزر
Key_str= بحث(key_char، لوحة المفاتيح_بيانات) "اسحب رمز المفتاح المضغوط
نتيجة= النتيجة + Key_str
نهاية لو

حدد 1 , 1

شاشات الكريستال السائل نتيجة "نعرض نتيجة الضغط

الانتظار 100

حلقة

نهاية

Keyboard_data:
بيانات "1" , "4" , "7" , "*" , "2" , "5" , "8" , "0"
بيانات "3" ، "6" ، "9" ، "#" ، "أ" ، "ب" ، "ج" ، "د"

وهنا دائرة اختبار يتم من خلالها توصيل الشاشة ولوحة المفاتيح:

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

نقوم بالاتصال والوميض والضغط على الأزرار ونرى النتيجة - يتم عرض رموز المفاتيح المضغوطة على الشاشة:


سأضيف فيديو توضيحي لاحقًا، بمجرد أن أجد شيئًا لتصويره بجودة مناسبة.

في هذه الأثناء، يمكنك تنزيل الأرشيف الذي يحتوي على ملف المحاكاة في Proteus والبرامج الثابتة.