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

مولد نغمات اردوينو بدون مكتبة أو وظائف تسلسلية (مع المقاطعات): 10 خطوات
مولد نغمات اردوينو بدون مكتبة أو وظائف تسلسلية (مع المقاطعات): 10 خطوات

فيديو: مولد نغمات اردوينو بدون مكتبة أو وظائف تسلسلية (مع المقاطعات): 10 خطوات

فيديو: مولد نغمات اردوينو بدون مكتبة أو وظائف تسلسلية (مع المقاطعات): 10 خطوات
فيديو: اختراع 2023😱😱 2024, شهر نوفمبر
Anonim
مولد نغمات اردوينو بدون مكتبة أو وظائف تسلسلية (مع المقاطعات)
مولد نغمات اردوينو بدون مكتبة أو وظائف تسلسلية (مع المقاطعات)

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

تم تصميم هذا الرمز للميكروكونترولر Atmega 2560 ، لذلك إذا كنت ترغب في تنفيذه على لوحة أخرى ، فستحتاج إلى تغيير سجلات العناوين في الكود بناءً على دليل مستخدم وحدات التحكم الخاصة بك. الفكرة الأساسية وراء الكود هي أنه كلما أدخلت مفتاحًا على لوحة المفاتيح في الشاشة التسلسلية ، فإن arduino mega ستخرج ترددًا معينًا بناءً على المفتاح الذي تضغط عليه ، مع إعادة تعيين "q". لقد صنعته بحيث ينتج "a" التردد A المسطح و "A" سينتج التردد A الحاد ، و "b" ينتج B المسطح ، و "c" لـ C المسطح ، و "C" لـ C حاد ، وهكذا. يتم تحميل الكود الكامل في النهاية ، ولكن كل خطوة ستقسم الكود إلى أجزاء حتى يسهل شرحه.

الخطوة 1: تحديد عناوين التسجيل

تحديد عناوين التسجيل
تحديد عناوين التسجيل

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

الخطوة الثانية: المصفوفات والمتغيرات العمومية

المصفوفات والمتغيرات العالمية
المصفوفات والمتغيرات العالمية
المصفوفات والمتغيرات العالمية
المصفوفات والمتغيرات العالمية
المصفوفات والمتغيرات العالمية
المصفوفات والمتغيرات العالمية

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

الخطوة 3: وظيفة "serial.begin"

ال
ال

سنقوم باستدعاء وظيفتنا المخصصة التي تكرر وظيفة "serial.begin" U0init (). يأخذ معدل البث بالباود المطلوب كمدخل ويبدأ المنفذ التسلسلي عند هذا المعدل بالباود.

الخطوة 4: وظيفة "serial.available"

ال
ال

سنقوم باستدعاء الوظيفة التي تقلد "serial.available" U0kbhit (). لا يتطلب الأمر إدخالًا ولكنه يكتشف بدلاً من ذلك ما إذا كان هناك تغيير تم إجراؤه على لوحة المفاتيح باستخدام بت حالة RDA ويعود صحيحًا عند اكتشاف تغيير.

الخطوة 5: وظيفة "serial.read"

ال
ال

سنقوم باستدعاء الوظيفة التي تحاكي وظيفة "serial.read" U0getchar () ، والتي لا تأخذ أي إدخال أو إخراج أي تغيير يتم إجراؤه على لوحة المفاتيح ، والذي يتم تخزينه في سجل UDR0.

الخطوة 6: وظيفة "serial.write"

ال
ال

سنقوم باستدعاء الوظيفة التي تحاكي "serial.write" U0putchar () ، والتي تأخذ البيانات من سجل UDR0 أثناء اكتشاف التغيير وتخزينه ، والمخرجات التي تتغير مرة أخرى إلى الشاشة التسلسلية.

الخطوة 7: وظيفة الإعداد

وظيفة الإعداد
وظيفة الإعداد

هذه هي وظيفة الإعداد الأساسية التي ستستخدم تقليدنا "serial.begin" لتهيئة المنفذ التسلسلي ، وستقوم بتهيئة إعدادات البت الخاصة بنا لسجلات المؤقت وتعيين PB6 لإخراج نغماتنا.

الخطوة 8: وظائف الحلقة و ISR

وظائف الحلقة و ISR
وظائف الحلقة و ISR

تعمل الحلقة على النحو التالي: إذا تم الكشف عن تغيير من خلال وظيفة "serial.available" الخاصة بنا ، فإن وظيفة "serial.read" الخاصة بنا تخزن هذا التغيير ، وتقوم وظيفة "serial.write" الخاصة بنا بوضع هذا التغيير في الشاشة التسلسلية. طالما أن المتغير i أقل من حجم صفيف التردد ، فإنه سيحدد الإخراج ليكون موضع i في تلك المجموعة ، ويخرج التردد في هذا الموضع. يعمل ISR كإعادة تعيين ، حيث إذا كان موضع صفيف التردد لا يساوي 0 (بمعنى آخر إذا لم يتم الضغط على "q") ، فسيخرج التردد ، ولكن عند الضغط على "q" سيتم إعادة تعيينه. يرجى ملاحظة: يستخدم هذا الرمز المقاطعات ، ولكن يمكن القيام به مع تعطيل المقاطعات. سأقوم بنشر الكود بدون مقاطعات إذا تلقيت أي طلبات لذلك ، أعتقد فقط أن إصدار المقاطعة أكثر متعة.

الخطوة 9: الأسلاك

الأسلاك
الأسلاك

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

الخطوة 10: وضع كل شيء معًا

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

يرجى أيضًا التصويت لهذا في مسابقة Microcontroller: D

موصى به: