Isi kandungan:

Berkelip, Menyanyi, Marioman: 5 Langkah
Berkelip, Menyanyi, Marioman: 5 Langkah

Video: Berkelip, Menyanyi, Marioman: 5 Langkah

Video: Berkelip, Menyanyi, Marioman: 5 Langkah
Video: MAROON 5 Songs Cover Audition in The Voice 2024, November
Anonim
Berkelip, Menyanyi, Marioman
Berkelip, Menyanyi, Marioman

Gunakan attiny13a, dua LED dan pembesar suara kad ucapan untuk membuat Marioman yang berkedip yang memainkan lagu tema Super Mario Brothers. Ini boleh menjadi projek kos rendah yang mudah bagi sesiapa sahaja yang mencari cara yang menyeronokkan untuk masuk ke dalam pengaturcaraan AVR! nota lagu dihasilkan oleh gelombang persegi yang dikeluarkan pada satu pin mikrokontroler AVR. LED yang bergantian pada setiap nota disambungkan ke 2 pin setiap cip yang sama.

Langkah 1: Bahan dan Pembinaan

Bahan dan Pembinaan
Bahan dan Pembinaan

1 attiny13a

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

  • 2 LED - mana-mana LED akan berfungsi
  • 1 bateri sel syiling litium

www.sparkfun.com/commerce/product_info.php?products_id=338 Kos: $ 2.00

1 pemegang sel duit syiling

www.sparkfun.com/commerce/product_info.php?products_id=8822 Kos: $ 1,25

1 pembesar suara kecil dari kad ucapan muzik

Jumlah kos bahan ~ $ 5Dua LED dipasang terus ke dua pin masing-masing attiny13A. Dua pin digunakan untuk setiap LED, pin kedua ditetapkan rendah untuk digunakan sebagai sambungan tanah. Had semasa pin I / O pada AVR akan menghalang LED daripada menarik terlalu banyak sehingga perintang tidak diperlukan untuk menyambung siri. Pembesar suara yang digunakan adalah khas dari yang terdapat dalam kad ucapan muzik, mana-mana pembesar suara kecil akan melakukannya, memandangkan ini mengeluarkan nada gelombang persegi, tidak perlu risau untuk menggerakkan pembesar suara atau kualiti suara.

Langkah 2: Memateri AVR ke LED dan Pembesar suara

Memateri AVR ke LED dan Pembesar suara
Memateri AVR ke LED dan Pembesar suara
Memateri AVR ke LED dan Pembesar suara
Memateri AVR ke LED dan Pembesar suara

Untuk LED boleh menjangkau seperti lengan, satu pin dibengkokkan di atas AVR di setiap sisi. Mengarahkan AVR dengan cara ini memudahkan penyambungan ke pembesar suara (gambar kedua) kerana sambungannya berada pada dua pin bawah. Untuk estetika anda mahu bahagian depan cip menghadap ke luar, pastikan pembesar suara menghadap ke arah yang sama ketika ia dilampirkan.

Langkah 3: Pengaturcaraan Attiny13a

Pengaturcaraan Attiny13a
Pengaturcaraan Attiny13a

Terdapat banyak pilihan yang berbeza untuk memprogram AVR. Untuk projek ini USBtiny digunakan yang tersedia sebagai kit dari laman web ladyada https://www.ladyada.net/make/usbtinyisp/index.htmlUntuk menghubungkan AVR ke pengaturcara, sama ada pasangkan wayar ke soket wanita dan pasangkannya ke papan roti atau lebih baik lagi dapatkan penyesuai pengaturcaraan AVR yang murah seperti ini.

Langkah 4: Membuat Firmware untuk Marioman

Membuat Firmware untuk Marioman
Membuat Firmware untuk Marioman

Attiny13A mempunyai 1K flash yang dapat diprogramkan, dan 64 bytes SRAM. Fail tar yang dilampirkan mempunyai fail sumber serta firmware yang disusun untuk dimuat turun. Tiga tatasusunan dalam kod c digunakan untuk menghasilkan muzik

  • freq - frekuensi setiap nota
  • panjang - panjang setiap nota
  • kelewatan - berhenti sebentar antara setiap nota

Array frekuensi tidak mempunyai frekuensi sebenar tetapi lebih baik nilai yang dimasukkan ke dalam daftar TTCROB untuk menghasilkan gelombang persegi dari pin PB0. Berikut adalah ringkasan ringkas pengiraan dan konfigurasi pin untuk penjanaan gelombang persegi:

  • Attiny13A mempunyai pengayun dalaman yang ditetapkan hingga 9.6MHz
  • Jam dalaman untuk IO adalah pengayun dibahagi dengan 8 atau 1.2MHz
  • Pemasa dalaman disiapkan dalam daftar 8bit untuk menghitung setiap pusingan jam dengan preskala 8.
  • Ini menghasilkan satu tanda sama dengan 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A dikonfigurasikan untuk membandingkan apa yang ada di daftar Tbit 8bit TCCR0B dengan pemasa dan beralih pin apabila sesuai.
  • Sebagai contoh, untuk menghasilkan gelombang persegi pada 524Hz (satu oktaf di atas tengah C) yang mempunyai jangka masa 1.908ms.

1.908ms = 286 jam berdetak (1.908 /.0067) Bahagikan 286 dengan 2 untuk menukar pin pada t / 2 (286/2 = 143) Masukkan 143 dalam daftar TTCR0B untuk menghasilkan nota ini. Inilah semua kod yang diperlukan untuk mengatur pemasa, lakukan perbandingan dan keluarkan gelombang persegi:

TCCR0A | = (1 << WGM01); // konfigurasikan pemasa 1 untuk mod CTC TCCR0A | = (1 << COM0A0); // togol OC0A pada pertandingan perbandingan TCCR0B | = (1 << CS01); // clk / 8 preskala TTCR0B = 143; // menjana gelombang persegi pada 524HzUntuk melambatkan nada dan jeda di antara mereka, fungsi kelewatan sederhana digunakan

kekosongan tidur (int ms) {int cnt; untuk (cnt = 0; cnt <(ms); cnt ++) {int i = 150; sementara (i--) {_asm ("NOP"); }}}Ini dikira dari 150 di mana setiap kitaran NOP adalah kira-kira.006667ms. Perkara terakhir yang dilakukan kod adalah gelung melalui tatasusunan, menjana muzik dan mengedipkan dua LED. Ini dilakukan secara berterusan untuk gelung dengan kod berikut

const uint8_t freq PROGMEM = {… data}; const uint8_t length PROGMEM = {… data}; const uint8_t delay PROGMEM = {… data};… sementara (1) {untuk (cnt = 0; cnt < 156; cnt ++) {OCR0A = pgm_read_byte (& freq [cnt]); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); tidur (pgm_read_byte (& panjang [cnt])); output_toggle (PORTB, PB3); output_toggle (PORTB, PB4); // berhenti pemasa TCCR0B = 0; tidur (pgm_read_word (& tunda [cnt])); // mula pemasa TCCR0B | = (1 << CS01); // clk / 8 preskala}}Terdapat 156 elemen dalam susunan frekuensi / panjang / kelewatan, gelung ini melintasi mereka. Pin PB3 dan PB4 masing-masing ditukar sehingga mereka akan bergantian dengan setiap nota. Tidur pertama adalah panjang nota yang kita mainkan setelah menetapkan daftar OCR0A ke nilai yang sesuai. Tidur kedua adalah jeda antara nota yang kita mainkan. Dalam kod di atas, anda mungkin menyedari dua fungsi pgm_read_byte () dan pgm_read_word () dan juga kata kunci PROGMEM. Dengan cip tertanam seperti pengukuran, jumlah SRAM sangat terhad, dalam kes ini hanya 64 bait. Susunan yang kami gunakan untuk semua data frekuensi / kelewatan / panjang jauh lebih besar daripada 64 bait dan oleh itu tidak dapat dimuat ke dalam memori. Dengan menggunakan arahan PROGMEM avr-gcc khas, susunan data besar ini tidak dapat dimuatkan ke dalam memori, sebaliknya dibaca dari flash.

Langkah 5: Membiarkan Marioman Longgar

Video di atas menunjukkan Marioman beraksi. Penggunaan kuasa rata-rata sekitar 25mA sehingga dia dapat berkedip dan bersuara selama kira-kira 10 jam sebelum menguras sel syiling lithium. Satu-satunya cara untuk menghidupkan dan mematikannya adalah dengan mengeluarkan bateri sel duit syiling, yang kuat yang disenaraikan dalam bahan adalah sangat sesuai untuk ini. Suis boleh ditambah tetapi ada sesuatu yang boleh dikatakan untuk memastikannya mudah.

Disyorkan: