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

מהבהב, שר, מריומן: 5 שלבים
מהבהב, שר, מריומן: 5 שלבים

וִידֵאוֹ: מהבהב, שר, מריומן: 5 שלבים

וִידֵאוֹ: מהבהב, שר, מריומן: 5 שלבים
וִידֵאוֹ: תפסתי אותה על חםםםם!!!!!! 2024, סֶפּטֶמבֶּר
Anonim
מהבהב, שר, מריומן
מהבהב, שר, מריומן

השתמש ב- attiny13a, שני נוריות LED ורמקול כרטיסי ברכה כדי ליצור מריומן מהבהב המנגן את שיר הנושא של האחים סופר מריו. זה יכול להיות פרויקט בעלות נמוכה וקלה לכל מי שמחפש דרך מהנה לפרוץ לתכנות AVR! תווי השירים נוצרים על ידי גל מרובע המופץ על סיכה אחת של המיקרו -בקר AVR. נוריות הלדים המתחלפות בכל פתק מחוברות ל -2 סיכות כל אחת מאותו שבב.

שלב 1: חומרים ובנייה

חומרים ובנייה
חומרים ובנייה

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3d עלות: $ 1.40

  • 2 נוריות - כל נוריות יספיקו
  • סוללת מטבע ליתיום אחת

www.sparkfun.com/commerce/product_info.php?products_id=338 עלות: $ 2.00

מחזיק תאי מטבע אחד

www.sparkfun.com/commerce/product_info.php?products_id=8822 עלות: $ 1.25

1 רמקול קטן מכרטיס ברכה מוזיקלי

עלות החומרים הכוללת ~ $ 5 שני הלדים הוצמדו ישירות לשני סיכות כל אחד מה- attiny13A. שני פינים משמשים לכל נורית, הפין השני מוגדר נמוך כחיבור קרקע. הגבול הנוכחי של סיכות הקלט/פלט במכשיר ה- AVR ימנע מהנוריות לצייר יותר מדי ולכן אין צורך בנגד להתחבר הרמקול המשמש אופייני לאחד שנמצא בכרטיס ברכה מוזיקלי, כל רמקול קטן יעשה, בהתחשב בכך שהוא מוציא צליל גל מרובע, אין זה חשוב מדי לדאוג לנהיגה ברמקול או מאיכות הצליל.

שלב 2: הלחמת ה- AVR לנורות ולרמקול

הלחמת ה- AVR לנורות ולרמקולים
הלחמת ה- AVR לנורות ולרמקולים
הלחמת ה- AVR לנורות ולרמקולים
הלחמת ה- AVR לנורות ולרמקולים

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

שלב 3: תכנות ה- Attiny13a

תכנות ה- Attiny13a
תכנות ה- Attiny13a

ישנן הרבה אפשרויות שונות לתכנות AVRs. לפרויקט זה נעשה שימוש ב- USBtiny הזמין כערכה מאתר ladyada https://www.ladyada.net/make/usbtinyisp/index.html לחיבור ה- AVR למתכנת אתה יכול או לחבר חוטים לשקע הנשי ולחבר אותם ללוח או יותר טוב לקבל מתאם תכנות AVR זול כמו זה https://www.sparkfun.com/commerce/product_info.php? products_id = 8508 יחד עם כותרות זכר 3x2 לחיבור התקע.

שלב 4: יצירת הקושחה עבור Marioman

יצירת הקושחה עבור מריומן
יצירת הקושחה עבור מריומן

ל- attiny13A יש 1K של פלאש הניתן לתכנות, ו- 64bytes של SRAM. לקובץ הזפת המצורף יש את קובץ המקור וכן קושחה מורכבת להורדה. שלושה מערכים בקוד c שימשו ליצירת המוסיקה.

  • freq - תדרים של כל תו
  • אורך - אורך כל פתק
  • עיכוב - הפסקה בין כל פתק

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

  • ל- attiny13A יש מתנד פנימי המוגדר ל- 9.6MHz
  • השעון הפנימי עבור IO הוא המתנד מחולק ב- 8 או 1.2MHz
  • טיימר פנימי מוגדר ברשם של 8 ביט כדי לספור כל מחזור שעון בגודל 8 מראש.
  • התוצאה היא קרצית אחת שווה ל 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A מוגדר להשוות את מה שנמצא במרשם 8bit TCCR0B עם הטיימר ולהחליף סיכה כאשר הם תואמים.
  • לדוגמה, על מנת ליצור גל מרובע ב -524 הרץ (אוקטבה אחת מעל אמצע C) שיש לו תקופה של 1.908ms.

1.908ms = 286 קרציות שעון (1.908/.0067) חלקו 286 ב- 2 כדי להחליף את הסיכה ב- t/2 (286/2 = 143) הכנס 143 לרשום TTCR0B כדי ליצור הערה זו. זהו כל הקוד הדרוש כדי להגדיר את הטיימר, בצע את ההשוואה ופלט גל מרובע:

TCCR0A | = (1 << WGM01); // הגדר טיימר 1 למצב CTC TCCR0A | = (1 << COM0A0); // החלף OC0A על התאמת התאמה TCCR0B | = (1 << CS01); // clk/8 TTCR0B מראש בגודל = 143; // ליצור גל מרובע ב -524 הרץכדי לעכב את הצלילים וההפסקות ביניהם נעשה שימוש בפונקציית עיכוב פשוטה

שינה חללה (int ms) {int cnt; עבור (cnt = 0; cnt <(ms); cnt ++) {int i = 150; בעוד (i--) {_asm ("NOP"); }}}זה נספר מ -150 כאשר כל מחזור NOP הוא בערך.006667ms. הדבר האחרון שהקוד עושה הוא להעביר את המערכים, ליצור את המוזיקה ולמצמץ את שני הלדים. זה נעשה בלולאה רציפה עם הקוד הבא

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t delay PROGMEM = {… data};… while (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); שינה (pgm_read_byte (& length [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // עצר טיימר TCCR0B = 0; שינה (pgm_read_word (& עיכוב [cnt])); // התחל טיימר TCCR0B | = (1 << CS01); // clk/8 מראש בגודל}}ישנם 156 אלמנטים במערכי התדרים/אורכים/עיכובים, הלולאה הזו חוצה אותם. סיכה PB3 ו- PB4 כל אחת מהן מחליפה כך שהן מתחלפות עם כל צליל השינה הראשונה היא אורך השטר שאנו מנגנים לאחר הגדרת רשם OCR0A לערך המתאים. השינה השנייה היא ההשהיה בין התווים שאנו מנגנים. בקוד שלמעלה ייתכן שתבחין בשתי הפונקציות pgm_read_byte () ו- pgm_read_word () כמו גם במילת המפתח PROGMEM. עם שבב מוטבע כמו האטוני כמות ה- SRAM מוגבלת מאוד, במקרה זה 64 בייט בלבד. המערכים שבהם אנו משתמשים עבור כל נתוני התדר/עיכוב/אורך גדולים בהרבה מ- 64 בתים ולכן לא ניתן לטעון אותם בזיכרון. באמצעות ההוראה המיוחדת של PROGMEM avr-gcc מונעים מערכי נתונים גדולים אלה לטעון לזיכרון, במקום לקרוא אותם מהבזק.

שלב 5: לתת למריומן להשתחרר

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

מוּמלָץ: