תוכן עניינים:

מחולל טונים של Arduino ללא ספרייה או פונקציות סדרתיות (עם הפרעות): 10 שלבים
מחולל טונים של Arduino ללא ספרייה או פונקציות סדרתיות (עם הפרעות): 10 שלבים

וִידֵאוֹ: מחולל טונים של Arduino ללא ספרייה או פונקציות סדרתיות (עם הפרעות): 10 שלבים

וִידֵאוֹ: מחולל טונים של Arduino ללא ספרייה או פונקציות סדרתיות (עם הפרעות): 10 שלבים
וִידֵאוֹ: Networking Tools - Hardware 2024, נוֹבֶמבֶּר
Anonim
מחולל טונים של Arduino ללא ספרייה או פונקציות סדרתיות (עם הפרעות)
מחולל טונים של Arduino ללא ספרייה או פונקציות סדרתיות (עם הפרעות)

זה לא משהו שבדרך כלל אני יכול להדריך אותו, אני מעדיף את עבודות המתכת שלי, אבל מכיוון שאני סטודנט להנדסת חשמל ועלי לקחת קורס על מיקרו -בקרים (תכנון מערכות משובצות), חשבתי שאעשה הדרכה בנושא אחד הפרויקטים שלי. כשעשיתי במקור את הפרויקט ואחרים לכיתה זו, גיליתי שיש מעט מאוד הדרכות שאינן משתמשות בפונקציות הספרייה של הארדואינו או בפונקציות סדרתיות, וזו עוד סיבה שחשבתי שזו תהיה הדרכה טובה.

קוד זה מיועד למיקרו -בקר Atmega 2560, כך שאם ברצונך ליישם אותו על לוח אחר תצטרך לשנות את רשימות הכתובות בקוד בהתאם למדריך למשתמש של הבקרים שלך. הרעיון הבסיסי מאחורי הקוד הוא שבכל פעם שאתה מכניס מקש במקלדת למסך הסדרתי, מגה הארדואינו יפיק תדר מסוים על סמך איזה מקש אתה לוחץ, כאשר "q" יאפס אותו. עשיתי את זה כך ש- "a" יפיק את תדר A שטוח ו- "A" יפיק את התדר A חד, "b" מוציא B שטוח, "c" עבור C שטוח, "C" עבור C חד וכן הלאה. הקוד המלא מועלה בסוף, אך כל שלב יפרק את הקוד לחתיכות כך שקל יותר להסביר אותו.

שלב 1: הגדרת כתובות רישום

הגדרת כתובות רישום
הגדרת כתובות רישום

שלב זה קל, אם אתה משתמש ב- atmega 2560, אתה רק צריך להשתמש בכתובות שבהן השתמשתי, אם כי אם אתה משתמש בלוח עם שבב אחר, יהיה עליך למצוא את הכתובות עבור כל אחד מהרשמים האלה ברשמתך. מדריך למשתמש של צ'יפס. ההגדרות למעלה הן רק קבועים שישמשו את הפונקציות שלנו בהמשך. אנו מציינים את הכתובות כתנודתיות ללא חתימה מכיוון שאיננו רוצים שהמהדר יתעסק איתן.

שלב 2: מערכים ומשתנים גלובליים

מערכים ומשתנים גלובליים
מערכים ומשתנים גלובליים
מערכים ומשתנים גלובליים
מערכים ומשתנים גלובליים
מערכים ומשתנים גלובליים
מערכים ומשתנים גלובליים

כאן אנו רוצים להגדיר את מערך התדרים שיכיל את כל התדרים שכל מפתח צריך להוציא. ערכים אלה מחושבים מתדרי התווים בפועל, ולמען האמת שכחתי כיצד קיבלתי אותם, אך הם הערכים הנכונים כאשר בדקתי אותם באוסילוסקופ כדי לוודא. אנו מגדירים גם את מערך התווים המכיל את כל המפתחות ללחיצה על כל צליל, כמו גם המשתנים שנצטרך עבור הפונקציות המאוחרות יותר שלנו.

שלב 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" הוא יתאפס. שים לב: קוד זה משתמש בהפרעות, אך ניתן לעשות זאת עם הפרעות מושבתות. אפרסם את הקוד ללא הפרעות אם אקבל בקשות לכך, אני פשוט חושב שגרסת ה- interrupt מהנה יותר.

שלב 9: חיווט

תִיוּל
תִיוּל

החיווט לקוד זה הוא פשוט ביותר, פשוט הכנס חוט פלט מ- PB6 ללוח לחם, חיבר עם זה זמזם או רמקול בסדרה, וחבר אותו חזרה לקרקע. הערה: אם אתה משתמש ברמקול, הכנס נגד קטן לפני הרמקול. אם אתה רק רוצה לראות את הפלט אך לא שומע אותו, פשוט חבר את PB6 למוביל האדום של אוסצילוסקופ ואת ההובלה השחורה לקרקע.

שלב 10: להרכיב הכל ביחד

הוספתי את הקוד המלא לשלב זה, מכיוון שהסברתי את כל חלקיו בשלבים קודמים. זה פשוט לוקח קלט מקלדת לתדרים שונים ויוצא תדר זה ל- PB6. מקווה שנהנתם לקרוא דרך אחרת לקודד עם ה- IDE!

כמו כן, אנא הצביעו לכך בתחרות מיקרו -בקר: ד

מוּמלָץ: