Isi kandungan:

Arduino Tone Generator Tanpa Perpustakaan atau Fungsi Serial (Dengan Gangguan): 10 Langkah
Arduino Tone Generator Tanpa Perpustakaan atau Fungsi Serial (Dengan Gangguan): 10 Langkah

Video: Arduino Tone Generator Tanpa Perpustakaan atau Fungsi Serial (Dengan Gangguan): 10 Langkah

Video: Arduino Tone Generator Tanpa Perpustakaan atau Fungsi Serial (Dengan Gangguan): 10 Langkah
Video: Cara Mengatasi Port Arduino Tidak Terdeteksi - Arduino Project Indonesia 2024, November
Anonim
Arduino Tone Generator Tanpa Perpustakaan atau Fungsi Serial (Dengan Gangguan)
Arduino Tone Generator Tanpa Perpustakaan atau Fungsi Serial (Dengan Gangguan)

Ini bukan sesuatu yang biasa saya buat, saya lebih suka kerja logam saya, tetapi kerana saya pelajar kejuruteraan elektrik dan perlu mengikuti kelas mikrokontroler (Reka Bentuk Sistem Tertanam), saya fikir saya akan membuat pengajaran salah satu projek saya. Semasa saya mula-mula membuat projek dan yang lain untuk kelas ini, saya mendapati bahawa terdapat sangat sedikit atau tidak ada tutorial yang tidak menggunakan fungsi perpustakaan arduino atau fungsi bersiri, yang merupakan sebab lain saya fikir ini akan menjadi petunjuk yang baik.

Kod ini direka untuk mikrokontroler Atmega 2560, jadi jika anda ingin menerapkannya di papan lain, anda perlu mengubah daftar alamat dalam kod berdasarkan manual pengguna pengawal anda. Idea asas di sebalik kod ini adalah bahawa setiap kali anda memasukkan kekunci pada papan kekunci ke monitor bersiri, arduino mega akan mengeluarkan frekuensi tertentu berdasarkan kekunci apa yang anda tekan, dengan "q" menetapkannya semula. Saya membuatnya supaya "a" mengeluarkan frekuensi rata A dan "A" akan mengeluarkan frekuensi tajam A, "b" mengeluarkan B rata, "c" untuk datar C, "C" untuk tajam C, dan seterusnya. Kod penuh dimuat pada akhir, tetapi setiap langkah akan memecah kod tersebut menjadi beberapa bahagian sehingga lebih mudah dijelaskan.

Langkah 1: Menentukan Alamat Daftar

Menentukan Alamat Daftar
Menentukan Alamat Daftar

Langkah ini mudah, jika anda menggunakan atmega 2560, anda hanya perlu menggunakan alamat yang saya gunakan, walaupun jika anda menggunakan papan dengan cip yang berbeza, anda perlu mencari alamat untuk setiap daftar ini di manual pengguna kerepek. Definisi di bahagian atas hanyalah pemalar yang akan digunakan untuk fungsi kita di kemudian hari. Kami menetapkan alamat sebagai tidak ditandatangani yang tidak stabil kerana kami tidak mahu penyusunnya mengacaukannya.

Langkah 2: Susunan dan Pembolehubah Global

Susunan dan Pembolehubah Global
Susunan dan Pembolehubah Global
Susunan dan Pembolehubah Global
Susunan dan Pembolehubah Global
Susunan dan Pembolehubah Global
Susunan dan Pembolehubah Global

Di sini kita ingin menentukan array Frekuensi yang akan mengandungi semua frekuensi yang harus dikeluarkan oleh setiap kunci. Nilai-nilai ini dikira dari frekuensi nota sebenar, dan sejujurnya saya lupa bagaimana saya memperolehnya, tetapi nilai-nilai tersebut tepat ketika saya mengujinya pada osiloskop untuk memastikannya. Kami juga menentukan susunan nota yang mengandungi semua kekunci untuk menekan setiap nada, serta pemboleh ubah yang kami perlukan untuk fungsi kami yang kemudian.

Langkah 3: Fungsi "serial.begin"

The
The

Kami akan memanggil fungsi khusus kami yang meniru fungsi "serial.begin" U0init (). Ia mengambil baudrate yang diinginkan sebagai input dan memulakan port bersiri pada baudrate tersebut.

Langkah 4: Fungsi "serial.available"

The
The

Kami akan memanggil fungsi yang meniru "serial.available" U0kbhit (). Ia tidak memerlukan input tetapi sebaliknya mengesan jika ada perubahan yang dilakukan pada papan kekunci menggunakan bit status RDA dan kembali benar apabila perubahan dikesan.

Langkah 5: Fungsi "serial.read"

The
The

Kami akan memanggil fungsi yang meniru fungsi "serial.read" U0getchar (), yang tidak memerlukan input dan output apa pun perubahan yang dibuat pada papan kekunci, yang disimpan dalam daftar UDR0.

Langkah 6: Fungsi "serial.write"

The
The

Kami akan memanggil fungsi yang meniru "serial.write" U0putchar (), yang mengambil data dari daftar UDR0 sementara perubahan dikesan dan disimpan, dan output yang berubah kembali ke monitor bersiri.

Langkah 7: Fungsi Persediaan

Fungsi Penyediaan
Fungsi Penyediaan

Ini adalah fungsi persediaan asas yang akan menggunakan tiruan "serial.begin" kami untuk menginisialisasi port bersiri, dan akan menginisialisasi tetapan bit kami untuk daftar pemasa dan menetapkan PB6 untuk mengeluarkan nada kami.

Langkah 8: Fungsi Gelung dan ISR

Fungsi Gelung dan ISR
Fungsi Gelung dan ISR

Gelung berfungsi seperti itu: jika perubahan terdeteksi dengan fungsi "serial.available" kami, fungsi "serial.read" kami menyimpan perubahan itu, dan fungsi "serial.write" kami memasukkan perubahan tersebut ke dalam monitor bersiri. Selagi pemboleh ubah i kurang dari ukuran array frekuensi, ia akan menetapkan output menjadi kedudukan i dalam array itu, mengeluarkan frekuensi pada kedudukan itu. ISR berfungsi sebagai reset, di mana jika kedudukan array frekuensi tidak sama dengan 0 (dengan kata lain jika "q" tidak ditekan), ia akan mengeluarkan frekuensi, tetapi apabila "q" ditekan, ia akan diset semula. Harap perhatikan: kod ini menggunakan gangguan, tetapi ia boleh dilakukan dengan gangguan yang dilumpuhkan. Saya akan menghantar kod tanpa gangguan jika saya mendapat permintaan untuk itu, saya rasa versi gangguan lebih menyeronokkan.

Langkah 9: Pendawaian

Pendawaian
Pendawaian

Pendawaian untuk kod ini sangat mudah, cukup masukkan wayar keluaran dari PB6 ke papan roti, sambungkan bel atau pembesar suara secara bersiri dengan itu, dan sambungkan kembali ke tanah. Catatan: jika anda menggunakan pembesar suara, letakkan perintang kecil di hadapan pembesar suara. Sekiranya anda hanya mahu melihat output tetapi tidak mendengarnya, sambungkan PB6 ke plumbum osiloskop merah dan plumbum hitam ke tanah.

Langkah 10: Menggabungkan Semuanya

Saya menambahkan kod penuh pada langkah ini, kerana saya telah menjelaskan semua bahagiannya pada langkah sebelumnya. Ia hanya memerlukan input keyboard untuk frekuensi dan output yang berlainan sehingga frekuensi PB6. Harap anda menikmati membaca cara yang berbeza untuk membuat kod dengan IDE!

Juga, sila pilih ini dalam peraduan Mikrokontroler: D

Disyorkan: