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

وميض وغناء ومريمان: 5 خطوات
وميض وغناء ومريمان: 5 خطوات

فيديو: وميض وغناء ومريمان: 5 خطوات

فيديو: وميض وغناء ومريمان: 5 خطوات
فيديو: جديد حمدان الوهيبي _ اهداء إلى السيد عبيد محمد مريمان العامري 2019 HD 2024, سبتمبر
Anonim
يومض ، يغني ، مريومان
يومض ، يغني ، مريومان

استخدم attiny13a واثنين من مصابيح LED ومكبر صوت لبطاقات التهنئة لإنشاء ماريومان وامضة تلعب أغنية Super Mario Brothers ، يمكن أن يكون هذا مشروعًا سهلًا ومنخفض التكلفة لأي شخص يبحث عن طريقة ممتعة لاقتحام برمجة AVR! يتم إنشاء ملاحظات الأغاني بواسطة موجة مربعة يتم إخراجها على دبوس واحد من متحكم AVR. يتم توصيل مصابيح LED التي تتناوب في كل ملاحظة بدبوسين لكل من نفس الشريحة.

الخطوة الأولى: المواد والتشييد

المواد والتكوين
المواد والتكوين

1 Attiny13a

www.mouser.com/Search/ProductDetail.aspx؟qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk٪252bEP0e٪2f7dEeq0٪3d التكلفة: 1.40 دولار

  • 2 LEDs - أي مصابيح LED ستفي بالغرض
  • 1 بطارية خلية ليثيوم على شكل عملة معدنية

التكلفة: 2.00 دولار

1 حامل خلية عملة معدنية

التكلفة: 1.25 دولار

مكبر صوت صغير من بطاقة تهنئة موسيقية

التكلفة الإجمالية للمواد ~ 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

إنشاء البرنامج الثابت لمريومان
إنشاء البرنامج الثابت لمريومان

يحتوي Attiny13A على 1K من الفلاش القابل للبرمجة و 64 بايت من SRAM. يحتوي ملف tar المرفق على الملف المصدر بالإضافة إلى البرامج الثابتة المجمعة للتنزيل. تم استخدام ثلاث مصفوفات في الكود c لإنشاء الموسيقى

  • التكرار - ترددات كل ملاحظة
  • الطول - طول كل ملاحظة
  • تأخير - وقفة بين كل ملاحظة

لا تحتوي مصفوفة التردد على الترددات الفعلية بل القيمة التي يجب وضعها في سجل TTCROB لتوليد الموجة المربعة من دبوس PB0 ، فيما يلي ملخص موجز للحسابات وتكوين الدبوس لتوليد الموجة المربعة:

  • يحتوي attiny13A على مذبذب داخلي مضبوط على 9.6 ميجا هرتز
  • الساعة الداخلية لـ IO هي مذبذب مقسومًا على 8 أو 1.2 ميجا هرتز
  • يتم إعداد مؤقت داخلي في سجل 8 بت لعد كل دورة على مدار الساعة بمقياس مسبق يبلغ 8.
  • ينتج عن هذا علامة واحدة تساوي 1 / (1.2 ميجا هرتز / 8) =.006667 مللي ثانية
  • تم تكوين 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 prescale TTCR0B = 143 ؛ // توليد موجة مربعة عند 524 هرتزلتأخير النغمات والإيقاف المؤقت بينها تم استخدام وظيفة تأخير بسيطة

void sleep (int ms) {int cnt؛ لـ (cnt = 0 ؛ cnt <(مللي ثانية) ؛ cnt ++) {int i = 150 ؛ بينما (i--) {_asm ("NOP") ؛ }}}هذا يعد تنازليًا من 150 حيث تبلغ كل دورة NOP تقريبًا.006667 مللي ثانية. آخر شيء يفعله الكود هو المرور عبر المصفوفات ، وتوليد الموسيقى وميض مصباحي LED ، ويتم ذلك في حلقة for مستمرة مع الكود التالي

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 (& delay [cnt])) ؛ // بدء الموقت TCCR0B | = (1 << CS01) ؛ // clk / 8 prescale}}يوجد 156 عنصرًا في مصفوفات الترددات / الأطوال / التأخير ، هذه الحلقة تتجاوزهم. يتم تبديل كل من Pin PB3 و PB4 بحيث يتناوبان مع كل ملاحظة. السكون الأول هو طول الملاحظة التي نلعبها بعد ضبط سجل OCR0A على القيمة المناسبة. السكون الثاني هو التوقف المؤقت بين النغمات التي نعزفها. في الكود أعلاه ، ربما لاحظت الوظيفتين pgm_read_byte () و pgm_read_word () بالإضافة إلى الكلمة الرئيسية PROGMEM. مع شريحة مدمجة مثل attiny ، يكون مقدار SRAM محدودًا للغاية ، في هذه الحالة 64 بايت فقط. المصفوفات التي نستخدمها لجميع بيانات التردد / التأخير / الطول أكبر بكثير من 64 بايت وبالتالي لا يمكن تحميلها في الذاكرة. باستخدام التوجيه الخاص PROGMEM avr-gcc ، يتم منع مصفوفات البيانات الكبيرة هذه من التحميل في الذاكرة ، وبدلاً من ذلك تتم قراءتها من ذاكرة فلاش.

الخطوة 5: ترك ماريومان طليقة

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

موصى به: