Daftar Isi:

Laser Harp Synthesizer di Zybo Board: 10 Langkah (dengan Gambar)
Laser Harp Synthesizer di Zybo Board: 10 Langkah (dengan Gambar)

Video: Laser Harp Synthesizer di Zybo Board: 10 Langkah (dengan Gambar)

Video: Laser Harp Synthesizer di Zybo Board: 10 Langkah (dengan Gambar)
Video: video harp on FPGA 2024, Juli
Anonim
Laser Harp Synthesizer di Zybo Board
Laser Harp Synthesizer di Zybo Board

Dalam tutorial ini kita akan membuat kecapi laser yang berfungsi penuh menggunakan sensor IR dengan antarmuka serial yang memungkinkan pengguna untuk mengubah penyetelan dan nada instrumen. Harpa ini akan menjadi remake abad ke-21 dari instrumen kuno. Sistem ini dibuat menggunakan papan pengembangan Xilinx Zybo bersama dengan Vivado Design Suites. Apa yang Anda perlukan untuk menyelesaikan proyek:

  • 12 sensor dan pemancar IR (kurang lebih dapat digunakan tergantung pada jumlah senar)
  • Papan pengembangan Zybo Zynq-7000
  • RTOS gratis
  • Suite Desain Vivado
  • Kawat (untuk menghubungkan sensor ke papan)
  • 3 buah pipa PVC ((2) 18 inci dan (1) 8 inci)
  • 2 siku PVC

Langkah 1: Dapatkan Demo Audio Zybo DMA Digilent

Sisi FPGA dari proyek ini sebagian besar didasarkan pada proyek demo yang ditemukan di sini. Ini menggunakan akses memori langsung untuk mengirim data langsung dari memori yang dapat ditulis oleh prosesor melalui AXI Stream ke blok audio I2S. Langkah-langkah berikut akan membantu Anda menjalankan dan menjalankan proyek demo audio DMA:

  1. Versi baru dari file papan untuk papan Zybo mungkin diperlukan. Ikuti petunjuk ini untuk mendapatkan file papan baru untuk Vivado.
  2. Ikuti langkah 1 dan 2 dalam instruksi di halaman ini untuk membuka proyek demo di Vivado. Gunakan metode Vivado, bukan handoff perangkat keras SDK.
  3. Anda mungkin mendapatkan pesan yang mengatakan beberapa blok ip Anda harus diperbarui. Jika sudah, pilih "Show IP Status" lalu pada tab IP status pilih all out of date IP dan klik "Upgrade Selected". Ketika selesai dan sebuah jendela muncul menanyakan apakah Anda ingin menghasilkan produk keluaran, lanjutkan dan klik "Hasilkan". Jika Anda mendapatkan pesan peringatan kritis, abaikan saja.
  4. Beralih dari desain ke tab sumber di Vivado untuk melihat file sumber. Klik kanan desain blok "design_1" dan pilih "Buat HDL Wrapper". Saat diminta, pilih "salin pembungkus yang dihasilkan untuk mengizinkan pengeditan pengguna". File pembungkus untuk proyek akan dibuat.
  5. Sekarang setelah langkah-langkah penting yang entah bagaimana ditinggalkan di tutorial lain selesai, Anda dapat kembali ke tutorial yang ditautkan sebelumnya dan melanjutkan dari langkah 4 hingga akhir dan memastikan bahwa proyek demo berjalan dengan benar. Jika Anda tidak memiliki cara untuk memasukkan audio untuk merekam, maka cukup rekam dengan headphone Anda dan dengarkan suara fuzzy 5-10 detik saat Anda menekan tombol playback. Selama ada sesuatu yang keluar dari jack headphone saat Anda menekan tombol playback, itu mungkin berfungsi dengan benar.

Langkah 2: Buat Beberapa Perubahan di Vivado

Buat Beberapa Perubahan di Vivado
Buat Beberapa Perubahan di Vivado

Jadi sekarang demo audio DMA Digilent sudah berfungsi, tapi itu sama sekali bukan tujuan akhir di sini. Jadi kita harus kembali ke Vivado dan membuat beberapa perubahan sehingga sensor kita dapat dicolokkan ke header PMOD dan kita dapat menggunakan nilainya di sisi perangkat lunak.

  1. Buka diagram blok di Vivado
  2. Buat blok GPIO dengan mengklik kanan di ruang kosong di diagram blok dan memilih "Tambah IP" dari menu. Cari dan pilih "AXI GPIO".
  3. Klik dua kali blok IP baru dan di jendela kustomisasi ulang IP, buka tab konfigurasi IP. Pilih semua input dan atur lebarnya menjadi dua belas, karena kita akan memiliki 12 "senar" pada harpa kita dan karenanya membutuhkan 12 sensor. Jika Anda ingin menggunakan lebih sedikit atau lebih banyak sensor, sesuaikan nomor ini dengan tepat. Juga atur aktifkan interupsi.
  4. Klik kanan blok IP GPIO baru dan pilih "jalankan otomatisasi koneksi". Centang kotak AXI dan tekan oke. Ini harus menghubungkan antarmuka AXI secara otomatis, tetapi membiarkan output blok tidak terhubung.
  5. Untuk memberikan ruang bagi interupsi ekstra, klik dua kali pada blok IP xlconcat_0 dan ubah jumlah port dari 4 menjadi 5. Kemudian Anda dapat menghubungkan pin ip2intc_irpt dari blok GPIO baru ke port baru yang tidak digunakan pada blok xlconcat.
  6. Klik kanan pada output "GPIO" dari blok IP GPIO baru dan pilih "make external". Temukan ke mana garis itu pergi dan klik pada segi lima kecil dan di sebelah kiri sebuah jendela akan terbuka di mana Anda dapat mengubah namanya. Ubah nama menjadi "SENSOR". Penting untuk menggunakan nama yang sama jika Anda ingin file kendala yang kami sediakan berfungsi, jika tidak, Anda harus mengubah nama dalam file kendala.
  7. Kembali ke tab sumber, temukan file kendala dan ganti dengan yang kami sediakan. Anda dapat memilih untuk mengganti file atau hanya menyalin konten file batasan kami dan menempelkannya di atas konten yang lama. Salah satu hal penting yang dilakukan file kendala kami adalah mengaktifkan resistor pullup pada header PMOD. Ini diperlukan untuk sensor tertentu yang kami gunakan, namun tidak semua sensor sama. Jika sensor Anda memerlukan resistor pulldown, Anda dapat mengubah setiap contoh "set_property PULLUP true" dengan "set_property PULLDOWN true". Jika mereka memerlukan nilai resistor yang berbeda dari yang ada di papan, maka Anda dapat menghapus garis ini dan menggunakan resistor eksternal. Nama pin ada di komentar di file kendala, dan mereka sesuai dengan label pada diagram pertama di Skema Zybo halaman yang dapat ditemukan di sini. Jika Anda ingin menggunakan pin pmod yang berbeda, cukup cocokkan nama dalam file batasan dengan label dalam skema. Kami menggunakan header PMOD JE dan JD, dan masing-masing menggunakan enam pin data, menghilangkan pin 1 dan 7. Informasi ini penting saat menghubungkan sensor Anda. Seperti yang ditunjukkan pada skema, pin 6 dan 12 pada PMODS adalah VCC dan pin 5 dan 11 adalah ground.
  8. Buat ulang pembungkus HDL seperti sebelumnya, dan salin dan timpa yang lama. Setelah selesai, buat bitstream dan ekspor perangkat keras seperti sebelumnya, dan luncurkan kembali SDK. Jika Anda ditanya apakah Anda ingin mengganti file perangkat keras yang lama, jawabannya adalah ya. Mungkin sebaiknya SDK ditutup saat Anda mengekspor perangkat keras agar dapat diganti dengan benar.
  9. Luncurkan SDK.

Langkah 3: Jalankan FreeRTOS

Langkah selanjutnya adalah menjalankan FreeRTOS di papan Zybo.

  1. Jika Anda belum memiliki salinannya, unduh FreeRTOS di sini dan ekstrak file.
  2. Impor demo FreeRTOS Zynq yang terletak di FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_A9_Zynq_ZC702\RTOSDemo. Proses impor hampir sama dengan proyek demo lainnya, namun karena demo FreeRTOS Zynq bergantung pada file lain di folder FreeRTOS, Anda tidak boleh menyalin file ke ruang kerja Anda. Sebagai gantinya, Anda harus menempatkan seluruh folder FreeRTOS di dalam folder proyek Anda.
  3. Buat paket dukungan papan baru dengan membuka "file" -> "baru" -> "paket dukungan papan". Pastikan standalone dipilih dan klik finish. Setelah beberapa saat sebuah jendela akan muncul, centang kotak di sebelah lwip141 (ini menghentikan salah satu demo FreeRTOS agar tidak dapat dikompilasi) dan tekan OK. Setelah itu selesai klik kanan pada proyek RTOSdemo dan pergi ke "properties", buka tab "referensi proyek", dan centang kotak di sebelah bsp baru yang Anda buat. Mudah-mudahan itu akan dikenali tetapi kadang-kadang Xilinx SDK bisa aneh tentang hal semacam ini. Jika Anda masih mendapatkan kesalahan setelah langkah ini yang xparameters.h hilang atau sesuatu seperti itu, coba ulangi langkah ini dan mungkin keluar dan luncurkan kembali SDK.

Langkah 4: Tambahkan Kode Harpa Laser

Sekarang FreeRTOS diimpor, Anda dapat membawa file dari proyek harpa laser ke dalam demo FreeRTOS

  1. Buat folder baru di bawah folder src di demo FreeRTOS dan salin dan tempel semua file c yang disediakan kecuali main.c ke dalam folder ini.
  2. Ganti main.c RTOSDemo dengan main.c yang disediakan.
  3. Jika semuanya dilakukan dengan benar, Anda seharusnya dapat menjalankan kode laser harpa pada saat ini. Untuk tujuan pengujian, input tombol yang digunakan dalam proyek demo DMA sekarang digunakan untuk memutar suara tanpa sensor yang terpasang (salah satu dari empat tombol utama akan berfungsi). Ini akan memainkan string setiap kali Anda menekannya dan menggilir semua string dalam sistem melalui beberapa penekanan. Colokkan beberapa headphone atau speaker ke soket headphone di papan Zybo dan pastikan Anda dapat mendengar suara senar yang masuk saat Anda menekan tombol.

Langkah 5: Tentang Kode

Banyak dari Anda yang membaca tutorial ini kemungkinan besar di sini untuk mempelajari cara mengatur audio atau menggunakan DMA untuk melakukan sesuatu yang berbeda, atau membuat alat musik yang berbeda. Untuk alasan itu, beberapa bagian berikutnya didedikasikan untuk menjelaskan bagaimana kode yang disediakan bekerja bersama dengan perangkat keras yang dijelaskan sebelumnya untuk mendapatkan output audio yang berfungsi menggunakan DMA. Jika Anda memahami mengapa potongan kode ada di sana, maka Anda harus dapat menyesuaikannya untuk apa pun yang ingin Anda buat.

Interupsi

Pertama saya akan menyebutkan bagaimana interupsi dibuat dalam proyek ini. Cara kami melakukannya adalah dengan terlebih dahulu membuat struktur tabel vektor interupsi yang melacak ID, pengendali interupsi, dan referensi ke perangkat untuk setiap interupsi. ID interupsi berasal dari xparameters.h. Handler interupsi adalah fungsi yang kami tulis untuk DMA dan GPIO, dan interupsi I2C berasal dari driver Xlic I2C. Referensi perangkat menunjuk ke instance dari setiap perangkat yang kami inisialisasi di tempat lain. Menjelang akhir fungsi _init_audio, sebuah loop melewati setiap item dalam tabel vektor interupsi dan memanggil dua fungsi, XScuGic_Connect() dan XScuGic_Enable() untuk menghubungkan dan mengaktifkan interupsi. Mereka mereferensikan xInterruptController, yang merupakan pengontrol interupsi yang dibuat di main.c FreeRTOS secara default. Jadi pada dasarnya kami melampirkan setiap interupsi kami ke pengontrol interupsi ini yang sudah dibuat untuk kami oleh FreeRTOS.

DMA

Kode inisialisasi DMA dimulai di lh_main.c. Pertama, instance statis dari struktur XAxiDma dideklarasikan. Kemudian dalam fungsi _init_audio() itu akan dikonfigurasi. Pertama, fungsi configure dari proyek demo dipanggil, yang ada di dma.c. Ini didokumentasikan dengan cukup baik dan datang langsung dari demo. Kemudian interupsi akan terhubung dan diaktifkan. Untuk proyek ini hanya diperlukan interupsi master-to-slave, karena semua data sedang dikirim oleh DMA ke pengontrol I2S. Jika Anda ingin merekam audio, Anda juga memerlukan interupsi slave-to-master. Interupsi master-to-slave dipanggil ketika DMA selesai mengirimkan data apa pun yang Anda perintahkan untuk dikirim. Interupsi ini sangat penting untuk proyek kami karena setiap kali DMA selesai mengirimkan satu buffer sampel audio, ia harus segera mulai mengirimkan buffer berikutnya, atau penundaan yang dapat didengar akan terjadi di antara pengiriman. Di dalam fungsi dma_mm2s_ISR() Anda dapat melihat bagaimana kami menangani interupsi. Bagian penting mendekati akhir di mana kita menggunakan xSemaphoreGiveFromISR() dan portYIELD_FROM_ISR() untuk memberi tahu _audio_task() bahwa ia dapat memulai transfer DMA berikutnya. Cara kami mengirim data audio konstan adalah dengan bergantian antara dua buffer. Ketika satu buffer sedang ditransmisikan ke blok I2C buffer lainnya memiliki nilai-nilai yang dihitung dan disimpan. Kemudian ketika interupsi datang dari DMA, buffer aktif beralih dan buffer yang ditulis baru-baru ini mulai ditransfer sementara buffer yang ditransfer sebelumnya mulai ditimpa dengan data baru. Bagian penting dari fungsi _audio_task adalah tempat fnAudioPlay() dipanggil. fnAudioPlay() mengambil instance DMA, panjang buffer, dan pointer ke buffer tempat data akan ditransfer. Beberapa nilai dikirim ke register I2S untuk memberi tahu lebih banyak sampel yang akan datang. Kemudian XAxiDma_SimpleTransfer() dipanggil untuk memulai transfer.

Audio I2S

audio.c dan audio.h adalah tempat inisialisasi I2S berlangsung. Kode inisialisasi I2S adalah potongan kode yang cukup umum yang beredar di beberapa tempat, Anda mungkin menemukan sedikit variasi dari sumber lain tetapi yang ini seharusnya berfungsi. Ini didokumentasikan dengan cukup baik dan tidak banyak yang perlu diubah untuk proyek harpa. Demo audio DMA asalnya memiliki fungsi untuk beralih ke input mikrofon atau saluran sehingga Anda dapat menggunakannya jika Anda membutuhkan fungsionalitas itu.

Sintesis Suara

Untuk menjelaskan cara kerja sintesis suara, saya akan membuat daftar masing-masing model suara yang digunakan dalam pengembangan yang mengarah ke metode akhir, karena ini akan memberi Anda gambaran mengapa hal itu dilakukan dengan cara itu.

Metode 1: Satu periode nilai sinus dihitung untuk setiap senar pada frekuensi yang sesuai untuk not musik senar tersebut dan disimpan dalam larik. Misalnya, panjang array akan menjadi periode gelombang sinus dalam sampel, yang sama dengan # sampel / siklus. Jika laju pengambilan sampel adalah 48kHz dan frekuensi nada adalah 100Hz, maka ada 48.000 sampel/detik dan 100 siklus/detik yang mengarah ke 4800 sampel per siklus, dan panjang larik akan menjadi 4800 sampel dan akan berisi nilai satu lengkap periode gelombang sinus. Saat string dimainkan, buffer sampel audio diisi dengan mengambil nilai dari array gelombang sinus dan memasukkannya ke dalam buffer audio sebagai sampel, kemudian menambah indeks ke dalam array gelombang sinus sehingga menggunakan contoh kami sebelumnya selama kursus dari 4800 sampel satu siklus gelombang sinus dimasukkan ke dalam buffer audio. Operasi modulo digunakan pada indeks larik sehingga selalu berada di antara 0 dan panjangnya, dan ketika indeks larik melewati ambang tertentu (seperti sampel yang mungkin bernilai 2 detik) string dimatikan. Untuk memainkan beberapa senar secara bersamaan, lacak indeks larik setiap senar secara terpisah dan tambahkan nilai dari gelombang sinus setiap senar bersama-sama untuk mendapatkan setiap sampel.

Metode 2: Untuk membuat nada yang lebih musikal, kita mulai dengan model sebelumnya dan menambahkan harmonik ke setiap frekuensi dasar. Frekuensi harmonik adalah frekuensi yang merupakan kelipatan bilangan bulat dari frekuensi dasar. Tidak seperti ketika dua frekuensi yang tidak berhubungan dijumlahkan bersama, yang menghasilkan dua suara berbeda yang dimainkan secara bersamaan, ketika harmonik ditambahkan bersama, itu terus terdengar seperti hanya satu suara, tetapi dengan nada yang berbeda. Untuk mencapai ini, setiap kali kita menambahkan nilai gelombang sinus di lokasi (indeks array % panjang larik) ke sampel audio, kita juga menambahkan (2 * indeks larik % panjang larik), dan (3 * indeks larik % panjang larik), dan seterusnya untuk banyak harmonik yang diinginkan. Indeks yang dikalikan ini akan melintasi gelombang sinus pada frekuensi yang merupakan kelipatan bilangan bulat dari frekuensi aslinya. Untuk memungkinkan kontrol nada yang lebih besar, nilai masing-masing harmonik dikalikan dengan variabel yang mewakili jumlah harmonik itu dalam keseluruhan suara. Misalnya, gelombang sinus fundamental mungkin memiliki semua nilainya dikalikan dengan 6 untuk membuatnya lebih menjadi faktor dalam suara keseluruhan, sedangkan harmonik ke-5 mungkin memiliki pengali 1, yang berarti nilainya berkontribusi jauh lebih sedikit pada suara keseluruhan.

Metode 3: Oke, jadi sekarang kita memiliki nada yang sangat bagus pada nada, tetapi masih ada masalah yang cukup penting: nada-nada itu dimainkan dengan volume tetap untuk durasi yang tetap. Untuk terdengar seperti instrumen nyata, volume senar yang dimainkan harus berkurang dengan lancar seiring waktu. Untuk mencapai hal ini, sebuah array diisi dengan nilai-nilai fungsi yang membusuk secara eksponensial. Sekarang ketika sampel audio sedang dibuat, suara yang berasal dari setiap string dihitung seperti pada metode sebelumnya tetapi sebelum ditambahkan ke sampel audio, suara tersebut dikalikan dengan nilai pada indeks array string tersebut dalam array fungsi peluruhan eksponensial. Hal ini membuat suara halus menghilang dari waktu ke waktu. Ketika indeks array mencapai akhir array peluruhan, string dihentikan.

Metode 4: Langkah terakhir inilah yang benar-benar memberikan suara senar yang realistis. Sebelumnya mereka terdengar menyenangkan tetapi jelas disintesis. Untuk mencoba meniru senar harpa dunia nyata dengan lebih baik, tingkat peluruhan yang berbeda ditetapkan untuk setiap harmonik. Dalam senar yang sebenarnya, ketika senar pertama kali dipukul, terdapat kandungan harmonik frekuensi tinggi yang tinggi yang menciptakan jenis suara petik yang kita harapkan dari senar. Harmoni frekuensi tinggi ini secara singkat merupakan bagian utama dari suara, bunyi senar yang dipukul, tetapi mereka meluruh dengan sangat cepat saat harmonik yang lebih lambat mengambil alih. Array peluruhan dibuat untuk setiap nomor harmonik yang digunakan dalam sintesis suara, masing-masing dengan laju peluruhannya sendiri. Sekarang setiap harmonik dapat dikalikan secara independen dengan nilai array peluruhannya yang sesuai pada indeks array string dan ditambahkan ke suara.

Secara keseluruhan, sintesis suara intuitif tetapi perhitungannya berat. Menyimpan seluruh suara string dalam memori sekaligus akan memakan terlalu banyak memori, tetapi menghitung gelombang sinus dan fungsi eksponensial antara setiap frame akan memakan waktu terlalu lama untuk mengimbangi kecepatan pemutaran audio. Sejumlah trik digunakan dalam kode untuk mempercepat perhitungan. Semua matematika kecuali dalam pembuatan awal tabel peluruhan sinus dan eksponensial dilakukan dalam format integer, yang membutuhkan penyebaran ruang numerik yang tersedia dalam output audio 24 bit. Misalnya, tabel sinus memiliki amplitudo 150 sehingga halus tetapi tidak terlalu besar sehingga banyak string yang dimainkan bersama dapat ditambahkan menjadi lebih dari 24 bit. Demikian juga, nilai tabel eksponensial dikalikan dengan 80 sebelum dibulatkan menjadi bilangan bulat dan disimpan. Bobot harmonik dapat mengambil nilai diskrit antara 0 dan 10. Juga semua sampel sebenarnya digandakan dan gelombang sinus diindeks oleh 2, secara efektif mengurangi separuh laju pengambilan sampel. Ini membatasi frekuensi maksimum yang dapat dimainkan, tetapi jumlah senar dan harmonik saat ini perlu dihitung dengan cukup cepat.

Membuat model suara ini dan membuatnya bekerja membutuhkan banyak upaya di sisi prosesor, dan akan sangat sulit untuk membuatnya bekerja di sisi fpga dari awal dalam kerangka waktu proyek ini (bayangkan harus membuat ulang bitstream setiap waktu sepotong Verilog diubah untuk menguji suara). Namun, melakukannya di FPGA kemungkinan bisa menjadi cara yang lebih baik untuk melakukannya, mungkin menghilangkan masalah karena tidak dapat menghitung sampel dengan cukup cepat dan memungkinkan lebih banyak string, harmonik, dan bahkan efek audio atau tugas lain untuk dijalankan di komputer. sisi prosesor.

Langkah 6: Menghubungkan Sensor

Menghubungkan Sensor
Menghubungkan Sensor

Untuk membuat senar kami menggunakan sensor IR break beam yang akan mendeteksi saat senar dimainkan. Kami memesan sensor kami dari tautan berikut. Sensor memiliki kabel daya, ground, dan data sedangkan emitor hanya memiliki kabel daya dan ground. Kami menggunakan pin 3,3 V dan ground dari header PMOD untuk memberi daya pada emitor dan sensor. Untuk menyalakan semua sensor dan emitor, perlu menghubungkan semua sensor dan emitor secara paralel. Kabel data dari sensor masing-masing harus masuk ke pin pmod mereka sendiri.

Langkah 7: Membangun Kerangka

Membangun Kerangka
Membangun Kerangka

Untuk membuat bentuk harpa, tiga buah harpa digunakan sebagai kerangka untuk menempatkan sensor dan emitor. Pada salah satu dari dua potongan pipa PVC 18 inci, sejajarkan sensor dan emitor secara bergantian 1,5 inci dari satu sama lain dan kemudian rekatkan ke pipa. Di pipa PVC 18 inci lainnya sejajarkan sensor dan emitor dalam urutan bergantian tetapi pastikan untuk mengimbangi urutannya (yaitu jika pipa pertama memiliki sensor terlebih dahulu, yang kedua harus memiliki emitor terlebih dahulu dan sebaliknya). Anda perlu menyolder kabel yang lebih panjang pada kabel data, daya, dan arde untuk memastikan kabel tersebut dapat mencapai papan.

Langkah 8: Membangun Eksterior Kayu

Membangun Eksterior Kayu
Membangun Eksterior Kayu

Langkah ini opsional tetapi sangat disarankan. Eksterior kayu tidak hanya membuat harpa terlihat bagus, tetapi juga melindungi sensor dan kabel dari kerusakan. Bingkai kayu dapat dibuat dengan cincin persegi panjang suci dari kayu. Bagian dalam persegi panjang harus memiliki bukaan setidaknya 1-1/2 inci agar sesuai dengan pipa dan kerangka sensor. Setelah bingkai dibuat, bor dua lubang yang memungkinkan kabel dari sensor dan emitor keluar untuk menghubungkannya dengan papan.

*Catatan: Disarankan untuk menambahkan titik akses agar dapat melepas dan memasukkan kerangka pipa jika perlu dilakukan perbaikan atau sedikit penyesuaian perlu dilakukan.

Langkah 9: Menyatukan Semua Potongan

Menyatukan Semua Bagian
Menyatukan Semua Bagian

Setelah semua langkah sebelumnya selesai, sekarang saatnya membuat harpa. Pertama tempatkan kerangka pipa di dalam eksterior kayu. Kemudian pasang kabel untuk sensor dan emitor ke lokasi yang benar di papan. Kemudian buka SDK dan klik tombol debug untuk memprogram papan. Setelah papan diprogram, pasang sepasang headphone atau speaker. Bergantung pada sensor mana yang berakhir di port pmod mana senar harpa Anda mungkin akan rusak sejak awal. Karena mungkin sulit untuk membedakan kabel mana yang menuju sensor mana ketika begitu banyak kabel yang terlibat, kami menyertakan cara untuk memetakan nomor string untuk menginterupsi posisi bit dalam perangkat lunak. Temukan "static int sensor_map[NUM_STRINGS]" dan sesuaikan nilai dalam larik hingga string diputar dari terendah ke tertinggi secara berurutan.

Menu dapat digunakan dengan membuka terminal serial (misalnya RealTerm) dan mengatur baud rate ke 115200 dan tampilan ke ANSI. Menu dapat dinavigasi dengan menggunakan tombol w dan s untuk bergerak ke atas dan ke bawah dan tombol a dan d untuk mengubah nilai.

Langkah 10: ROCK OUT

Setelah harpa berfungsi penuh. Kuasai harpa dan dengarkan suara merdu dari musik Anda sendiri!

Direkomendasikan: