فهرست مطالب:

پلک زدن ، آواز خواندن ، ماریومن: 5 قدم
پلک زدن ، آواز خواندن ، ماریومن: 5 قدم

تصویری: پلک زدن ، آواز خواندن ، ماریومن: 5 قدم

تصویری: پلک زدن ، آواز خواندن ، ماریومن: 5 قدم
تصویری: آهنگ فلک - اجمل سنگری - آواز استدیو / Falak Song - Ajmal Sangari - Awaaz Studio 2024, ژوئن
Anonim
پلک زدن ، آواز خواندن ، ماریومن
پلک زدن ، آواز خواندن ، ماریومن

از attiny13a ، دو LED و بلندگوی کارت تبریک برای ایجاد یک Marioman چشمک زن که آهنگ تم Super Mario Brothers را پخش می کند ، استفاده کنید. این می تواند یک پروژه آسان کم هزینه برای هرکسی باشد که به دنبال راهی سرگرم کننده برای ورود به برنامه نویسی AVR است! نت های آهنگ ها توسط یک موج مربعی تولید شده بر روی یک پین از میکروکنترلر AVR تولید می شود. LED های متناوب در هر نت به 2 پین هر یک از یک تراشه متصل می شوند.

مرحله 1: مواد و ساختار

مواد و ساخت و ساز
مواد و ساخت و ساز

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx؟qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk٪252bEP0e٪2f7dEeq0٪3d هزینه: 1.40 دلار

  • 2 LED - هر LED کار خواهد کرد
  • 1 عدد باتری سلولی لیتیومی

www.sparkfun.com/commerce/product_info.php؟products_id=338 هزینه: 2.00 دلار

1 عدد نگهدارنده سکه

www.sparkfun.com/commerce/product_info.php؟products_id=8822 هزینه: 1.25 دلار

1 بلندگوی کوچک از کارت تبریک موسیقی

هزینه کل مواد 5 5 دلار دو LED به طور مستقیم به دو پین هر کدام از attiny13A متصل شدند دو پین برای هر LED استفاده می شود ، پین دوم برای استفاده به عنوان اتصال زمین کم تنظیم شده است. حد فعلی پین های ورودی/خروجی در AVR از کشیدن بیش از حد LED ها جلوگیری می کند ، بنابراین برای اتصال به مقاومت لازم نیست سری. بلندگوی مورد استفاده معمولی است که در کارت پستال موسیقی وجود دارد ، هر بلندگوی کوچکی این کار را انجام می دهد ، با توجه به این که صدای موج مربعی را تولید می کند ، نگران رانندگی بلندگو یا کیفیت صدا نیست.

مرحله 2: لحیم AVR به LED ها و بلندگو

لحیم کردن AVR به LED ها و بلندگو
لحیم کردن AVR به LED ها و بلندگو
لحیم کردن AVR به LED ها و بلندگو
لحیم کردن AVR به LED ها و بلندگو

برای اینکه LED ها مانند بازوها به سمت بیرون بروند ، یک پین در هر طرف روی AVR خم می شود. جهت گیری AVR از این طریق اتصال به بلندگو (تصویر دوم) را آسان می کند ، زیرا اتصالات در دو پین پایینی قرار دارند. از نظر زیبایی ، می خواهید جلوی تراشه رو به بیرون باشد ، بنابراین مطمئن شوید که بلندگو رو به رو است. پیوست شده است

مرحله 3: برنامه نویسی Attiny13a

برنامه نویسی Attiny13a
برنامه نویسی Attiny13a

گزینه های زیادی برای برنامه نویسی AVR وجود دارد. برای این پروژه از USBtiny استفاده شد که به عنوان کیت از سایت ladyada در دسترس است https://www.ladyada.net/make/usbtinyisp/index.html برای اتصال AVR به برنامه نویس می توانید یا سیمها را به سوکت زن وصل کنید و آنها را به یک نان باند وصل کنید یا بهتر است یک آداپتور برنامه نویسی AVR ارزان مانند این تهیه کنید به

مرحله 4: ایجاد سیستم عامل برای Marioman

ایجاد سیستم عامل برای Marioman
ایجاد سیستم عامل برای Marioman

attiny13A دارای 1K فلاش قابل برنامه ریزی و 64 بایت SRAM است. فایل tar پیوست شده دارای فایل منبع و همچنین سیستم عامل کامپایل شده برای بارگیری است. برای تولید موسیقی از سه آرایه در کد c استفاده شد.

  • freq - فرکانس های هر نت
  • طول - طول هر نت
  • تأخیر - مکث بین هر نت

آرایه فرکانس فرکانس های واقعی را ندارد بلکه مقداری است که در ثبات TTCROB برای ایجاد موج مربعی از پین PB0 قرار می دهد. در اینجا خلاصه ای از محاسبات و پیکربندی پین برای ایجاد موج مربعی آمده است:

  • نوسان ساز داخلی attiny13A روی 9.6 مگاهرتز تنظیم شده است
  • ساعت داخلی IO نوسان ساز تقسیم بر 8 یا 1.2 مگاهرتز است
  • یک تایمر داخلی در یک ثبات 8 بیتی تنظیم شده است تا هر چرخه ساعت را با پیش نمایش 8 بشمارد.
  • این منجر به یک تیک برابر با 1 / (1.2MHz / 8) =.006667ms می شود
  • attiny13A پیکربندی شده است تا آنچه را که در ثبت 8bit TCCR0B وجود دارد با تایمر مقایسه کرده و هنگام مطابقت آنها یک پین را تغییر دهد.
  • به عنوان مثال ، برای ایجاد یک موج مربعی در 524 هرتز (یک اکتاو بالاتر از وسط C) که دوره آن 1.908 میلی ثانیه است.

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 هرتزبرای به تأخیر انداختن آهنگها و مکث بین آنها از یک تابع تاخیر ساده استفاده شد

void sleep (int ms) {int cnt؛ برای (cnt = 0 ؛ cnt <(ms) ؛ cnt ++) {int i = 150 ؛ در حالی که (i--) {_asm ("NOP")؛ }}}این از 150 شمارش معکوس می کند که هر چرخه NOP تقریباً 0.006667ms است. آخرین کاری که کد انجام می دهد حلقه در آرایه ها ، تولید موسیقی و چشمک زدن دو LED است. این کار به صورت حلقه پیوسته با کد زیر انجام می شود.

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])؛ خروجی_تغییر (PORTB ، PB3) ؛ خروجی_تغییر (PORTB ، PB4) ؛ خواب (pgm_read_byte (& length [cnt]))؛ خروجی_تغییر (PORTB ، PB3) ؛ خروجی_تغییر (PORTB ، PB4) ؛ // تایمر توقف TCCR0B = 0؛ خواب (pgm_read_word (& تاخیر [cnt]))؛ // تایمر شروع TCCR0B | = (1 << CS01) ؛ // clk/8 prescale}}در آرایه های فرکانس/طول/تاخیر 156 عنصر وجود دارد ، این حلقه آنها را پیمایش می کند. پین PB3 و PB4 هر کدام ضامن هستند بنابراین با هر نت متناوب می شوند اولین خواب طول نت است که ما بعد از تنظیم ثبات OCR0A روی مقدار مناسب می نوازیم. خواب دوم مکث بین نت هایی است که می نوازیم. در کد بالا ممکن است متوجه دو عملکرد pgm_read_byte () و pgm_read_word () و کلمه کلیدی PROGMEM شوید. با یک تراشه تعبیه شده مانند attiny مقدار SRAM بسیار محدود است ، در این مورد فقط 64 بیت. آرایه هایی که برای همه داده های فرکانس/تاخیر/طول استفاده می کنیم بسیار بزرگتر از 64 بیت هستند و بنابراین نمی توان آنها را در حافظه بارگذاری کرد. با استفاده از دستورالعمل ویژه PROGMEM avr-gcc ، از بارگذاری این آرایه های بزرگ در حافظه جلوگیری می شود ، در عوض از روی فلش خوانده می شوند.

مرحله 5: رها کردن Marioman شل

ویدئوی بالا ماریومان را در حال عمل نشان می دهد. میانگین مصرف برق حدود 25 میلی آمپر است بنابراین می تواند تا 10 ساعت قبل از تخلیه سلول سکه لیتیوم پلک بزند و صدا ایجاد کند. تنها راه روشن و خاموش کردن او این است که باتری سلول سکه ای را بردارید. برای این مناسب است یک سوئیچ می تواند اضافه شود ، اما برای ساده نگه داشتن آن چیزی برای گفتن وجود دارد.

توصیه شده: