Mündəricat:
- Addım 1: Materiallar və Tikinti
- Addım 2: AVR -nin LEDlərə və Dinamikə lehimlənməsi
- Addım 3: Attiny13a proqramlaşdırılması
- Addım 4: Marioman üçün Firmware Yaratmaq
- Addım 5: Mariomana sərbəst buraxın
Video: Göz qırpmaq, mahnı oxumaq, Marioman: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:49
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
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
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ı
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
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ə:
Arduino ilə elektrik sayğacını necə oxumaq olar: 3 addım
Elektrik sayğacını Arduino ilə necə oxumaq olar: Elektrik xərclərinizi məhdudlaşdırmaq və ətraf mühiti qorumaq üçün evinizin cari enerji istehlakını və ya ümumi enerji istehlakını bilmək çox vaxt maraqlı olardı. Bu əslində problem deyil, çünki əsasən ağıllı bir rəqəmsal cihaz tapa bilərsiniz
Raspberry Pi istifadə edərək LCD -də DHT məlumatlarını necə oxumaq olar: 6 addım
Raspberry Pi istifadə edərək LCD -də DHT məlumatlarını necə oxumaq olar: Temperatur və nisbi rütubət mühitdəki hava məlumatları üçün vacibdir. İkisi bir mini hava stansiyasının verdiyi məlumatlar ola bilər. Raspberry Pi ilə istiliyinizi və Nisbi rütubətinizi oxumaq müxtəlif variantlardan istifadə etməklə əldə edilə bilər
Bir Analog Pin istifadə edərək birdən çox Analog Dəyəri Oxumaq: 6 Addım (Şəkillərlə)
Bir Analog Pin istifadə edərək Birdən çox Analog Dəyəri Oxumaq: Bu təlimatda sizə yalnız bir analog giriş pinindən istifadə edərək birdən çox analoq dəyərin necə oxunacağını göstərəcəyəm
Göz Qəyyumu: Səs Tetikli Göz Qoruması: 9 Addım (Şəkillərlə birlikdə)
Eye Guardian: Sound Triggered Eye Protection: Eye Guardian, Arduino ilə işləyən, Yüksək Desibelli davamlı səslə tetiklenen göz qoruyucu geyimdir. Ağır avadanlıq səsini algılar və avadanlıq işləyərkən qoruyucu gözlükləri azaldır. İlk addımda Inspirati'yi izah edəcəyəm
Ultrasonik Sensor (HC-SR04) məlumatlarını 128 × 128 LCD-də oxumaq və Matplotlib istifadə edərək görüntüləmək: 8 addım
128 × 128 LCD-də Ultrasonik Sensor (HC-SR04) Məlumatlarının Oxunması və Matplotlib-dən İstifadə Edilməsi: Bu təlimatda, ultrasəs sensoru (HC-SR04) məlumatlarını 128 × 128-də göstərmək üçün MSP432 LaunchPad + BoosterPack-dən istifadə edəcəyik. LCD və məlumatları ardıcıl olaraq PC -yə göndərin və Matplotlib istifadə edərək görüntüləyin