Daftar Isi:

Berkedip, Bernyanyi, Marioman: 5 Langkah
Berkedip, Bernyanyi, Marioman: 5 Langkah

Video: Berkedip, Bernyanyi, Marioman: 5 Langkah

Video: Berkedip, Bernyanyi, Marioman: 5 Langkah
Video: Memories - Maroon 5 (Lyrics video dan terjemahan) 2024, September
Anonim
Berkedip, Bernyanyi, Marioman
Berkedip, Bernyanyi, Marioman

Gunakan attiny13a, dua LED dan speaker kartu ucapan untuk membuat Marioman berkedip yang memainkan lagu tema Super Mario Brothers. Ini bisa menjadi proyek murah yang mudah bagi siapa saja yang mencari cara yang menyenangkan untuk masuk ke pemrograman AVR! nada lagu dihasilkan oleh gelombang persegi yang dikeluarkan pada satu pin mikrokontroler AVR. LED yang bergantian pada setiap nada terhubung ke 2 pin masing-masing chip yang sama.

Langkah 1: Bahan dan Konstruksi

Bahan dan Konstruksi
Bahan dan Konstruksi

1 attiny13a

www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvu0Nwh4cA1wRKJzS2Lmyk%252bEP0e%2f7dEeq0%3dBiaya: $1,40

  • 2 LED - LED apa pun bisa digunakan
  • 1 baterai sel koin lithium

www.sparkfun.com/commerce/product_info.php?products_id=338Biaya: $2,00

1 pemegang sel koin

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

1 speaker kecil dari kartu ucapan musik

Total biaya bahan ~ $5Dua LED dipasang langsung ke dua pin masing-masing attiny13A. Dua pin digunakan untuk setiap LED, pin kedua disetel rendah untuk digunakan sebagai koneksi ground. Batas arus pin I/O pada AVR akan mencegah LED menggambar terlalu banyak sehingga resistor tidak perlu disambungkan seri. Speaker yang digunakan adalah tipikal dari yang ditemukan di kartu ucapan musik, setiap speaker kecil akan melakukannya, mengingat ini mengeluarkan nada gelombang persegi, tidak terlalu penting untuk khawatir tentang mengemudikan speaker atau kualitas suara.

Langkah 2: Menyolder AVR ke LED dan Speaker

Menyolder AVR ke LED dan Speaker
Menyolder AVR ke LED dan Speaker
Menyolder AVR ke LED dan Speaker
Menyolder AVR ke LED dan Speaker

Agar LED menjangkau seperti lengan, satu pin ditekuk di atas AVR di setiap sisi. Mengorientasikan AVR dengan cara ini memudahkan untuk menyambungkan ke speaker (gambar kedua) karena sambungan berada di dua pin bawah. Untuk estetika Anda ingin bagian depan chip menghadap ke luar jadi pastikan speaker menghadap ke arah yang sama saat itu dilampirkan.

Langkah 3: Memprogram Attiny13a

Memprogram Attiny13a
Memprogram Attiny13a

Ada banyak pilihan berbeda untuk memprogram AVR. Untuk proyek ini digunakan USBtiny yang tersedia sebagai kit dari situs ladyadahttps://www.ladyada.net/make/usbtinyisp/index.htmlUntuk menghubungkan AVR ke programmer, Anda dapat pasang kabel ke soket wanita dan hubungkan ke papan tempat memotong roti atau lebih baik lagi dapatkan adaptor pemrograman AVR murah seperti inihttps://www.sparkfun.com/commerce/product_info.php?products_id=8508bersama dengan header pria 3x2 untuk menghubungkan steker.

Langkah 4: Membuat Firmware untuk Marioman

Membuat Firmware untuk Marioman
Membuat Firmware untuk Marioman

attiny13A memiliki 1K flash yang dapat diprogram, dan 64bytes SRAM. File tar terlampir memiliki file sumber serta firmware yang dikompilasi untuk diunduh. Tiga array dalam kode c digunakan untuk menghasilkan musik

  • freq - frekuensi setiap nada
  • panjang - panjang setiap nada
  • delay - jeda di antara setiap nada

Array frekuensi tidak memiliki frekuensi aktual melainkan nilai untuk dimasukkan ke dalam register TTCROB untuk menghasilkan gelombang persegi dari pin PB0. Berikut adalah ringkasan singkat dari perhitungan dan konfigurasi pin untuk pembangkitan gelombang persegi:

  • attiny13A memiliki osilator internal yang disetel ke 9.6MHz
  • Jam internal untuk IO adalah osilator dibagi 8 atau 1.2MHz
  • Timer internal diatur dalam register 8bit untuk menghitung setiap siklus clock dengan skala awal 8.
  • Ini menghasilkan satu centang sama dengan 1 / (1.2MHz / 8) =.006667ms
  • Attiny13A dikonfigurasi untuk membandingkan apa yang ada di register TCCR0B 8bit dengan timer dan mengganti pin saat cocok.
  • Misalnya, untuk menghasilkan gelombang persegi pada 524Hz (satu oktaf di atas C tengah) yang memiliki periode 1.908ms.

1.908ms = 286 clock ticks (1.908/.0067) Bagi 286 dengan 2 untuk mengganti pin pada t/2 (286/2 = 143) Masukkan 143 ke dalam register TTCR0B untuk menghasilkan catatan ini. Ini semua kode yang diperlukan untuk mengatur timer, lakukan perbandingan dan keluaran gelombang persegi:

TCCR0A |= (1<<WGM01); // konfigurasikan timer 1 untuk mode CTC TCCR0A |= (1<<COM0A0); // alihkan OC0A pada kecocokan perbandingan TCCR0B |= (1<<CS01); // clk/8 praskala TTCR0B = 143; // menghasilkan gelombang persegi pada 524HzUntuk menunda nada dan jeda di antara mereka, fungsi penundaan sederhana digunakan

batal tidur(int ms) { int cnt; untuk (cnt=0; cnt<(ms); cnt++) { int i = 150; while(i--) { _asm("NOP"); } }}Ini menghitung mundur dari 150 di mana setiap siklus NOP kira-kira.006667ms. Hal terakhir yang dilakukan kode adalah mengulang array, menghasilkan musik dan mengedipkan dua LED. Ini dilakukan dalam loop terus menerus dengan kode berikut

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); tidur(pgm_read_byte(&panjang[cnt])); output_toggle(PORTB, PB3); output_toggle(PORTB, PB4); // hentikan pengatur waktu TCCR0B = 0; tidur (pgm_read_word(&delay[cnt])); // mulai pengatur waktu TCCR0B |= (1<<CS01); // clk/8 skala awal }}Ada 156 elemen dalam frekuensi/panjang/delay array, loop ini melintasi mereka. Pin PB3 dan PB4 masing-masing di-toggle sehingga akan bergantian dengan setiap not. Sleep pertama adalah panjang not yang kita mainkan setelah mengatur register OCR0A ke nilai yang sesuai. Tidur kedua adalah jeda di antara nada yang kita mainkan. Pada kode di atas Anda mungkin telah memperhatikan dua fungsi pgm_read_byte() dan pgm_read_word() serta kata kunci PROGMEM. Dengan chip yang disematkan seperti attiny jumlah SRAM sangat terbatas, dalam hal ini hanya 64byte. Array yang kami gunakan untuk semua data frekuensi/penundaan/panjang jauh lebih besar dari 64byte dan oleh karena itu tidak dapat dimuat ke dalam memori. Dengan menggunakan direktif PROGMEM avr-gcc khusus, larik data besar ini dicegah untuk dimuat ke dalam memori, alih-alih dibaca dari flash.

Langkah 5: Membiarkan Marioman Longgar

Video di atas menunjukkan Marioman beraksi. Konsumsi daya rata-rata adalah sekitar 25mA sehingga ia dapat berkedip dan membuat suara selama sekitar 10 jam sebelum menguras sel koin lithium. Satu-satunya cara untuk menyalakan dan mematikannya adalah dengan melepas baterai sel koin, yang kokoh yang tercantum dalam bahan adalah sangat cocok untuk ini. Sakelar dapat ditambahkan tetapi ada sesuatu yang bisa dikatakan untuk membuatnya tetap sederhana.

Direkomendasikan: