جدول المحتويات:

برنامج AVR Assembler التعليمي 9: 7 خطوات
برنامج AVR Assembler التعليمي 9: 7 خطوات

فيديو: برنامج AVR Assembler التعليمي 9: 7 خطوات

فيديو: برنامج AVR Assembler التعليمي 9: 7 خطوات
فيديو: AVR Assembly Tutorial: Part 1 (Basic Commands) 2024, يوليو
Anonim
برنامج AVR Assembler التعليمي 9
برنامج AVR Assembler التعليمي 9

مرحبًا بك في البرنامج التعليمي 9.

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

سنستخدم لوحة المفاتيح الخاصة بنا من البرنامج التعليمي 7

للقيام بهذا البرنامج التعليمي ، بالإضافة إلى العناصر القياسية ، ستحتاج إلى:

  1. شاشة من 7 أجزاء

    www.sparkfun.com/products/8546

  2. شاشة من 4 أرقام

    www.sparkfun.com/products/11407

  3. زر ضغط

    www.sparkfun.com/products/97

  4. أوراق البيانات الخاصة بالعرض والتي يمكن تنزيلها من الصفحات الخاصة بها والمرتبطة أعلاه.
  5. مكثف سيراميك 68 pf ، زوجان من 104 مكثفات ، مجموعة من المقاومات ، اثنان من الترانزستورات 2N3904 NPN.

هنا رابط إلى المجموعة الكاملة من دروس مجمّع AVR الخاصة بي:

الخطوة 1: توصيل شاشة 7-seg

توصيل شاشة 7-seg
توصيل شاشة 7-seg
توصيل شاشة 7-seg
توصيل شاشة 7-seg
توصيل شاشة 7-seg
توصيل شاشة 7-seg

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

سنقوم بتعيين المقاطع إلى دبابيس متحكمنا على النحو التالي:

(dp، g، f، e، d، c، b، a) = (PD7، PD6، PB5، PB4، PB3، PB2، PB1، PB0)

حيث يتم عرض أحرف المقاطع في الصورة جنبًا إلى جنب مع pinout المقابل لـ 5V المشترك وكل مقطع من مقاطع LED بما في ذلك النقطة العشرية (dp) في أسفل يمين الشاشة. والسبب في ذلك هو أنه يمكننا إدخال الرقم بالكامل في سجل واحد وإخراج يتم تسجيله في المنفذين B و D لإضاءة المقاطع. كما ترى ، يتم ترقيم البتات بالتسلسل من 0 إلى 7 ، وبالتالي سيتم تعيينها إلى المسامير الصحيحة دون الحاجة إلى تعيين البتات الفردية ومسحها.

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

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

انظر أولاً إلى ورقة البيانات ولاحظ أنها تعرض خصائص مختلفة للعرض في الصفحة الأولى. الكميات المهمة هي "Forward Current" (I_f = 20mA) و "Forward Voltage" (V_f = 2.2V). هذه تخبرك أنك تريد انخفاض الجهد عبر الشاشة إذا كان التيار مساويًا للتيار الأمامي. هذا هو الحد الأقصى للتيار الذي ستأخذه الشاشة بدون قلي. وبالتالي فهو أيضًا أقصى سطوع يمكنك الحصول عليه من المقاطع.

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

لذلك ، نظرًا لجهد المنبع V والالتفاف حول دائرتنا ، لدينا:

V - V_f - I R = 0

مما يعني (V - V_f) / I = R. لذا فإن المقاومة اللازمة للحصول على أقصى سطوع (وربما قلي القطع) ستكون:

R = (V - V_f) / I_f = (5.0V - 2.2V) /0.02A = 140 أوم

لذلك إذا أردت ، يمكنك بسعادة استخدام 150 أوم دون قلق. ومع ذلك ، أعتقد أن 140 أوم تجعلها ساطعة للغاية بالنسبة لي ، ولذا فأنا أستخدم 330 أوم (وهو نوع من مقاومة Goldilocks الشخصية لمصابيح LED)

الخطوة 2: كود التجميع والفيديو

لقد أرفقت رمز التجميع وفيديو يوضح تشغيل لوحة المفاتيح مع الشاشة. كما ترى ، قمنا ببساطة بتعيين مفتاح إعادة الطلب على "r" ، ومفتاح الفلاش على "F" ، وعلامة النجمة إلى "A" وعلامة التجزئة على "H". يمكن تعيينها لعمليات مختلفة مثل backspace ، و enter ، و what-not إذا كنت ترغب في الاستمرار في استخدام لوحة المفاتيح لكتابة الأرقام على شاشات LCD أو شاشات العرض المكونة من 4 أرقام. لن أتصفح الكود سطراً بسطر هذه المرة لأنه مشابه جدًا لما فعلناه بالفعل في البرامج التعليمية السابقة. الاختلافات هي في الأساس أكثر من نفس الأشياء التي نعرف بالفعل كيفية القيام بها مثل المقاطعات وجداول البحث. يجب عليك فقط الاطلاع على الكود وإلقاء نظرة على الأشياء الجديدة التي أضفناها والأشياء التي قمنا بتغييرها واكتشافها من هناك. سنعود إلى التحليل سطراً سطراً في البرنامج التعليمي التالي عندما نقدم جوانب جديدة لتشفير لغة التجميع على وحدات التحكم الدقيقة AVR.

دعنا الآن نلقي نظرة على شاشة عرض مكونة من 4 أرقام.

الخطوة 3: توصيل شاشة العرض المكونة من 4 أرقام

توصيل شاشة العرض المكونة من 4 أرقام
توصيل شاشة العرض المكونة من 4 أرقام
توصيل شاشة العرض المكونة من 4 أرقام
توصيل شاشة العرض المكونة من 4 أرقام

وفقًا لورقة البيانات ، تحتوي الشاشة المكونة من 4 أرقام على تيار أمامي يبلغ 60 مللي أمبير والجهد الأمامي 2.2 فولت. لذلك ، بنفس الطريقة الحسابية كما في السابق ، يمكنني استخدام المقاوم 47 أوم إذا أردت ذلك. بدلاً من ذلك ، سأستخدم … hrm.. دعني أرى … ماذا عن 330 أوم.

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

في الوقت الحالي ، دعنا نختبر أن جميع الأجزاء تعمل.

ضع مقاومًا بقوة 330 أوم بين القضيب الموجب للوح وأنود أول قطب على الشاشة. تخبرنا ورقة البيانات أن الدبابيس مرقمة من 1 إلى 16 عكس اتجاه عقارب الساعة بدءًا من أسفل اليسار (عندما تنظر إلى الشاشة بشكل طبيعي.. مع النقاط العشرية على طول الجزء السفلي) وتنص على أن الأنودات هي أرقام دبوس 6 و 8 و 9 و 12.

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

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

أي شيء غير عادي؟

اتضح أن pinout على ورقة البيانات خاطئ. هذا لأنه ورقة البيانات و pinout لعرض 12-pin و 4-digit. بمعنى آخر. واحد بدون نقطتين أو علامة عشرية عليا. الشاشة التي حصلت عليها عندما طلبت ذلك هي شاشة مكونة من 16 دبوسًا و 4 أرقام. في الواقع ، من وجهة نظري ، توجد أنودات القطعة في المسامير 1 و 2 و 6 و 8. أنود القولون هو دبوس 4 (دبوس الكاثود 12) وأنود dp العلوي هو دبوس 10 (الكاثود هو دبوس 9)

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

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

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

لذلك سوف نستخدم PC1 و PC2 و PC3 و PD4 للتحكم في الأنودات المكونة من 4 أرقام.

يمكنك أيضًا المضي قدمًا وتوصيل الأسلاك. (لا تنس مقاومات 330 أوم على أسلاك الأنود!)

الخطوة 4: ترميز العرض المكون من 4 أرقام

ترميز العرض المكون من 4 أرقام
ترميز العرض المكون من 4 أرقام

دعنا نفكر في الكيفية التي نريد بها برمجة هذا العرض.

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

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

نريده أيضًا أن يحرك "المؤشر" إلى مسافة يمينًا عند كتابة الرقم التالي. لذلك ، إذا أردت كتابة 1234 على سبيل المثال ، بعد كتابة الرقم 1 ، سينتقل المؤشر بحيث يظهر الرقم التالي الذي أكتبه على الشاشة التالية المكونة من 7 أجزاء وما إلى ذلك. كل هذا أثناء حدوث ذلك ، ما زلت أريد أن أكون قادرًا على رؤية ما كتبته ، لذلك لا يزال يتعين علي التنقل بين الأرقام وعرضها.

يبدو وكأنه طلب طويل؟

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

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

الخطوة 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

لا يوجد سوى عدد قليل من "سجلات الأغراض العامة" التي لدينا تحت تصرفنا وبمجرد استخدامها لا يوجد المزيد. لذلك ، من الجيد استخدامهم في البرمجة لمتغيرين يتم استخدامهما كمخزن مؤقت تحتاجه للقراءة من ، والكتابة إلى ، المنافذ و SRAM بها ، أو تلك التي ستحتاجها في الروتينات الفرعية في كل مكان وهكذا أنت سميهم. ما فعلته الآن ، بعد أن قمنا بالتهيئة ونتعلم استخدام Stack ، هو استعراض الكود والعثور على سجلات الأغراض العامة المسماة التي يتم استخدامها فقط داخل روتين فرعي واحد أو مقاطعة وليس في أي مكان آخر في الكود واستبداله مع أحد سجلات درجة الحرارة لدينا ودفع واندفاع إلى المكدس. في الواقع ، إذا نظرت إلى الكود المكتوب لميكروكونترولر أصغر ، أو إذا عدت بالزمن إلى الوقت الذي كانت فيه جميع الرقائق أصغر ، فسترى فقط اثنين من سجلات الأغراض العامة التي كان لابد من استخدامها في كل شيء ، لذلك لا يمكنك ما عليك سوى تخزين قيمة هناك وتركها بمفردها لأنك كنت متأكدًا من أنك بحاجة إلى هذا التسجيل لأشياء أخرى. لذلك سترى Pushin "و poppin" في كل مكان في الكود. ربما كان عليّ تسمية سجلات الأغراض العامة المؤقتة الخاصة بنا AX و BX على أنها شهرة محترمة لتلك الأيام الماضية.

مثال سيساعد في جعل هذا أكثر وضوحًا.

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

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

والنتيجة الصافية هي أننا قمنا "باستعارة" temp و temp2 للاستخدام المؤقت ثم استعادتها إلى قيمها السابقة عند الانتهاء.

إليك روتين المقاطعة ADC_int بعد إجراء هذا التغيير:

ADC_int:

دفع درجة الحرارة حفظ درجة الحرارة لأننا نقوم بتعديله هنا دفع temp2 ؛ حفظ temp2 lds temp2 ، ADCH ؛ تحميل مفتاح بضغطة زر ldi ZH ، مرتفع (2 * رقمان) ldi ZL ، منخفض (2 * رقمان) cpi temp2 ، 0 breq return ؛ إذا لم تغير مشغلات الضوضاء 7segnumber setkey: lpm temp، Z +؛ تحميل من الجدول وبعد الزيادة clc cp temp2 ، temp ؛ قارن ضغط المفاتيح مع الجدول brlo PC + 4 ؛ إذا كانت ADCH أقل ، حاول مرة أخرى lpm 7segnumber، Z ؛ خلاف ذلك تحميل keyvalue الجدول inc رقم؛ زيادة عدد الخانات rjmp. وإرجاع adiw ZH: ZL، 1 ؛ زيادة setkey Z rjmp ؛ والعودة إلى أعلى العائد: فرقعة temp2 ؛ استعادة temp2 pop temp ؛ استعادة temp reti

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

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

الخطوة 6: مرشحات تمرير منخفض ومضخم الجهد

مرشحات تمرير منخفض ومضخم الجهد
مرشحات تمرير منخفض ومضخم الجهد
مرشحات تمرير منخفض ومضخم الجهد
مرشحات تمرير منخفض ومضخم الجهد

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

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

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

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

إذا نظرت إلى الرسم البياني الذي أرفقته بهذه الخطوة ، سترى كيف سيعمل مضخم الجهد. نستخدم بعض المقاومات واثنين من الترانزستورات. الطريقة التي تعمل بها الترانزستورات (انظر أوراق البيانات!) هي أن هناك حدًا أدنى للجهد تحتاج إلى إدخاله في دبوس القاعدة على الترانزستور (الدبوس الأوسط) والذي سيشبعه ويسمح للتيار بالتدفق بين دبوس المجمع والباعث دبوس. في حالة الترانزستور 2N3904 الذي نستخدمه هنا ، يكون الجهد 0.65 فولت. نحن الآن نأخذ هذا الجهد من ناتجنا من لوحة المفاتيح ولا نريد تغيير هذا الناتج لذلك سنضع مقاومًا كبيرًا بين الإخراج من لوحة المفاتيح وقاعدة الترانزستور الأول (لقد استخدمت 1Mohm). لقد قمت بتسمية هذا كـ R_1 في الرسم التخطيطي. ثم نرغب في إعداد مقسم جهد بحيث تكون قاعدة الترانزستور "تقريبًا" عند 0.65 فولت بالفعل ولن يؤدي إلا القليل جدًا إلى دفعه فوق القمة وتشبعه. سيأتي هذا الشيء الصغير الصغير من إخراج لوحة المفاتيح عندما نضغط على زر. نظرًا لأن المفاتيح السفلية الموجودة على لوحة المفاتيح تُصدر جهدًا ضئيلًا فقط ، فنحن بحاجة إلى أن نكون قريبين جدًا من التشبع بالفعل حتى تكون كافية. يتم تسمية مقاومات مقسم الجهد بـ R_a و R_b على الرسم التخطيطي. لقد استخدمت R_a = 1Mohm و R_b = 560Kohm ولكن من شبه المؤكد أنك ستضطر إلى اللعب بهذه الأرقام للحصول عليها بشكل صحيح لإعدادك.قد ترغب في أن يكون لديك جدار بالقرب منك لتضرب رأسك به واثنين أو ثلاثة أكواب من السكوتش في متناول اليد (أوصي بـ Laphroaig - باهظ الثمن ، ولكنه يستحق ذلك إذا كنت تحب التدخين. إذا أصبحت الأمور مجنونة حقًا ، فما عليك سوى الحصول على إبريق من BV واستقر في الليل)

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

الآن ماذا يحدث عندما أضغط على مفتاح؟ حسنًا ، فإن قاعدة T1 أعلى من 0.65 فولت (في حالة المفاتيح السفلية ، بالكاد تتجاوزها!) وبعد ذلك سيتم السماح للتيار بالتدفق والذي سيسحب قاعدة T2 إلى الجهد المنخفض وهذا سيغلق T2. لكننا نرى أنه عند إيقاف تشغيل T2 ، يتم سحب الناتج عالياً ، وبالتالي سنحصل على إشارة 5 فولت تذهب إلى دبوس INT0 الخاص بنا وسوف يتسبب ذلك في مقاطعة.

لاحظ النتيجة الصافية هنا. إذا ضغطنا على المفتاح 1 ، فسنحصل على 5V تذهب إلى PD4 دون تغيير كبير في الإخراج إلى ADC0 ، والأهم من ذلك ، حتى إذا دفعنا Asterisk أو 0 أو Hash أو Redial ، نحصل أيضًا على إشارة 5V تذهب إلى INT0 وأيضًا تسبب في مقاطعة! هذا مهم لأنه إذا انتقلنا للتو مباشرة من إخراج لوحة المفاتيح إلى دبوس INT0 ، فإن هذه المفاتيح لا تولد أي جهد تقريبًا ولن تكون كافية لتشغيل دبوس المقاطعة هذا. لقد حل مضخم الجهد الخاص بنا هذه المشكلة.

الخطوة 7: رمز العرض والفيديو المكون من 4 أرقام

هذا كل ما في البرنامج التعليمي 9! لقد أرفقت الكود وفيديو يوضح العملية.

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

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

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

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

المشروع: اصنع آلة حاسبة! استخدم شاشة العرض المكونة من 4 أرقام ولوحة المفاتيح الخاصة بنا وأضف ضغطة زر خارجية تعمل كمفتاح "دخول". عيّن علامة النجمة على "الأوقات" ، وعلامة التجزئة "لتقسيم" إعادة الاتصال على "زائد" والفلاش إلى "ناقص" وكتابة روتين الآلة الحاسبة الذي يعمل كواحدة من حاسبات HP "التلميع العكسي" القديمة التي كان يمتلكها جميع المهندسين قديما. بمعنى آخر. طريقة عملهم هي إدخال رقم والضغط على "دخول". يؤدي هذا إلى دفع هذا الرقم إلى المكدس ، ثم تدخل رقمًا ثانيًا وتضغط على "إدخال" ، مما يدفع الرقم الثاني إلى المكدس. أخيرًا ، تضغط على إحدى العمليات مثل X أو / أو + أو - وستقوم بتطبيق هذه العملية على أعلى رقمين في المكدس ، وتعرض النتيجة ، وتدفع النتيجة إلى المكدس بحيث يمكنك استخدامها مرة أخرى إذا كنت مثل. على سبيل المثال لإضافة 2 + 3 ، يمكنك القيام بما يلي: 2 ، "إدخال" ، 3 ، "إدخال" ، "+" وستقرأ الشاشة بعد ذلك 5. أنت تعرف كيفية استخدام المكدس ، وشاشة العرض ، ولوحة المفاتيح ، وأنت أن يكون معظم كود الخلفية مكتوبًا بالفعل. ما عليك سوى إضافة مفتاح الإدخال والإجراءات الفرعية اللازمة للآلة الحاسبة. إنه أكثر تعقيدًا قليلاً مما قد تعتقد في البداية ، لكنه ممتع وقابل للتنفيذ.

أراك المرة القادمة!

موصى به: