Mündəricat:

Göz qırpmaq, mahnı oxumaq, Marioman: 5 addım
Göz qırpmaq, mahnı oxumaq, Marioman: 5 addım

Video: Göz qırpmaq, mahnı oxumaq, Marioman: 5 addım

Video: Göz qırpmaq, mahnı oxumaq, Marioman: 5 addım
Video: İzlersen Allah'ı İnkar Edemezsin - Kibirden Kurtaran Video - [26.Söz Hatime Kader 8] @Mehmedyildiz 2024, Noyabr
Anonim
Göz qırpır, oxuyur, Marioman
Göz qırpır, oxuyur, Marioman

Super Mario Brothers mövzusunda mahnı oxuyan yanıb-sönən bir Marioman yaratmaq üçün bir attiny13a, iki LED və bir təbrik kartı dinamikindən istifadə edin. mahnıların notları, AVR mikrokontrolörünün bir pinində çıxarılan kvadrat dalğa ilə yaradılır. Hər bir nota alternativ olan LED -lər eyni çipin hər biri 2 sancağa bağlanır.

Addım 1: Materiallar və Tikinti

Materiallar və tikinti
Materiallar və tikinti

1 attina13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dCost: 1.40 $

  • 2 LED - istənilən LED edəcək
  • 1 lityum sikkə hüceyrəli batareya

www.sparkfun.com/commerce/product_info.php?products_id=338Xərc: $ 2.00

1 sikkə hüceyrə sahibi

www.sparkfun.com/commerce/product_info.php?products_id=8822 Xərc: 1,25 dollar

Musiqi təbrik kartından 1 kiçik dinamik

Materialların ümumi dəyəri ~ 5 ABŞ dolları İki LED birbaşa attiny13A -nın hər birinə iki sancağa bağlandı. Hər bir LED üçün iki pin istifadə olunur, ikinci pin torpaq bağlantısı kimi istifadə etmək üçün aşağıya endirilir. AVR üzərindəki I/O pinlərinin cari həddi LED -lərin çox çəkməsini maneə törədir, buna görə də bir rezistora qoşulmaq lazım deyil. İstifadə olunan dinamik bir musiqi təbrik kartında olan tipikdir, hər hansı bir kiçik natiq bunu edəcək, bunun bir kvadrat dalğa tonu çıxardığını nəzərə alsaq, dinamikin və ya səs keyfiyyətinin idarə olunmasından narahat olmaq o qədər də əhəmiyyətli deyil.

Addım 2: AVR -nin LEDlərə və Dinamikə lehimlənməsi

AVR -nin LEDlərə və Dinamikə lehimlənməsi
AVR -nin LEDlərə və Dinamikə lehimlənməsi
AVR -nin LEDlərə və Dinamikə lehimlənməsi
AVR -nin LEDlərə və Dinamikə lehimlənməsi

LED -lərin qollar kimi uzanması üçün AVR -nin hər tərəfində bir pin əyilir. AVR -ni bu istiqamətə yönəltmək, əlaqələr iki alt pimdə olduğu üçün dinamikə (ikinci şəkil) qoşulmağı asanlaşdırır. Estetika üçün çipin ön tərəfinə baxmaq istəyirsiniz, belə ki, dinamikin eyni şəkildə üzləşdiyinə əmin olun. əlavə olunur.

Addım 3: Attiny13a proqramlaşdırılması

Attiny13a proqramlaşdırılması
Attiny13a proqramlaşdırılması

AVR proqramlaşdırmaq üçün bir çox fərqli variant var. Bu layihə üçün USBtiny, ladyada saytından bir dəst olaraq istifadə edilə bilərhttps://www.ladyada.net/make/usbtinyisp/index.html AVR -ni proqramçıya bağlamaq üçün ya qadın rozetkasına tellər bağlayın və onları çörək taxtasına qoşun və ya daha yaxşı olsa belə ucuz bir AVR proqramlaşdırma adapteri əldə edin:

Addım 4: Marioman üçün Firmware Yaratmaq

Marioman üçün Firmware Yaradılması
Marioman üçün Firmware Yaradılması

Attiny13A -da 1K proqramlaşdırıla bilən flaş və 64 baytlıq SRAM var. Əlavə edilən tar faylında mənbə faylı və yükləmək üçün tərtib edilmiş proqram təminatı var. Musiqini yaratmaq üçün c kodundakı üç sıra istifadə edilmişdir.

  • freq - hər notun tezlikləri
  • uzunluq - hər bir notun uzunluğu
  • gecikmə - hər not arasında fasilə

Tezlik sırasının həqiqi tezlikləri yoxdur, əksinə PB0 pinindən kvadrat dalğası yaratmaq üçün TTCROB reyestrinə qoyulacaq dəyərdir. Burada kvadrat dalğa istehsalı üçün hesablamalar və pin konfiqurasiyasının qısa xülasəsi verilmişdir:

  • Attiny13A 9.6MHz -ə qədər daxili osilatora malikdir
  • IO üçün daxili saat 8 və ya 1.2MHz -ə bölünən osilatördür
  • Daxili bir taymer, 8 bitlik bir qeyddə, hər saat dövrünü 8 -ə qədər hesablamaq üçün qurulmuşdur.
  • Bu 1 / (1.2MHz / 8) =.006667ms -ə bərabər olan bir işarə ilə nəticələnir
  • Attiny13A, 8 bit TCCR0B reyestrində olanları taymerlə müqayisə etmək və uyğun gəldikdə bir pimi dəyişdirmək üçün qurulmuşdur.
  • Məsələn, 1.908 ms dövrü olan 524Hz (C ortasından bir oktava) bir kvadrat dalğa yaratmaq üçün.

1.908ms = 286 saat gənəsi (1.908/.0067) 286 -nı 2 -ə bölün, pimi t/2 -də dəyişdirin (286/2 = 143) Bu notu yaratmaq üçün 143 -ü TTCR0B reyestrinə qoyun. Taymeri qurmaq üçün müqayisə edin və bir kvadrat dalğa çıxarın:

TCCR0A | = (1 << WGM01); // CTC rejimi üçün timer 1 konfiqurasiya edin TCCR0A | = (1 << COM0A0); // müqayisə matçında OC0A -nı dəyişdirin TCCR0B | = (1 << CS01); // clk/8 qabaqcıl TTCR0B = 143; // 524Hz -də bir kvadrat dalğası yaradınTonları və aralarındakı fasilələri gecikdirmək üçün sadə bir gecikmə funksiyasından istifadə edilmişdir

boş yuxu (int ms) {int cnt; for (cnt = 0; cnt <(ms); cnt ++) {int i = 150; while (i--) {_asm ("NOP"); }}}Bu, hər bir NOP dövrünün təxminən.006667ms olduğu 150 -dən sayılır. Kodun etdiyi son şey, dizilərdən keçmək, musiqi yaratmaq və iki LED -in yanıb -sönməsidir.

const uint8_t freq PROGMEM = {… data}; const uint8_t uzunluq PROGMEM = {… data}; const uint8_t gecikmə PROGMEM = {… data};… isə (1) {for (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); çıxış_toggle (PORTB, PB3); çıxış_toggle (PORTB, PB4); yuxu (pgm_read_byte (& length [cnt])); çıxış_toggle (PORTB, PB3); çıxış_toggle (PORTB, PB4); // stop timer TCCR0B = 0; yuxu (pgm_read_word (& gecikmə [cnt]))); // başlanğıc taymeri TCCR0B | = (1 << CS01); // clk/8 əvvəlcədən}}Tezliklər/uzunluqlar/gecikmə dizilərində 156 element var, bu döngə onları keçir. Pin PB3 və PB4 hər biri dəyişdirilir, buna görə də hər bir notla əvəz olunur. İlk yuxu, OCR0A reyestrini müvafiq dəyərə qoyduqdan sonra oynadığımız notun uzunluğudur. İkinci yuxu, ifa etdiyimiz notlar arasındakı fasilədir. Yuxarıdakı kodda, pgm_read_byte () və pgm_read_word () iki funksiyasını və PROGMEM açar sözünü görə bilərsiniz. Attini kimi quraşdırılmış bir çip ilə SRAM miqdarı çox məhduddur, bu halda yalnız 64 bayt. Bütün tezlik/gecikmə/uzunluq məlumatları üçün istifadə etdiyimiz seriallar 64 baytdan çox böyükdür və buna görə də yaddaşa yüklənə bilməz. Xüsusi PROGMEM avr-gcc direktivindən istifadə edərək, bu böyük məlumat dizilərinin yaddaşa yüklənməsinin qarşısı alınır, əksinə flaşdan oxunur.

Addım 5: Mariomana sərbəst buraxın

Yuxarıdakı video Mariomanın hərəkətdə olduğunu göstərir. Orta enerji istehlakı təxminən 25mA -dır, buna görə də lityum sikkə hüceyrəsini boşaltmadan əvvəl təxminən 10 saat göz qırpıb səs -küy sala bilər. Onu işə salmağın və söndürməyin yeganə yolu sikkə hüceyrə batareyasını çıxarmaqdır. bunun üçün çox uyğundur. Bir keçid əlavə edilə bilər, amma sadə saxlamaq üçün söylənəcək bir şey var.

Tövsiyə: