Daftar Isi:

Arduino Tone Generator Tanpa Library atau Fungsi Serial (Dengan Interupsi): 10 Langkah
Arduino Tone Generator Tanpa Library atau Fungsi Serial (Dengan Interupsi): 10 Langkah

Video: Arduino Tone Generator Tanpa Library atau Fungsi Serial (Dengan Interupsi): 10 Langkah

Video: Arduino Tone Generator Tanpa Library atau Fungsi Serial (Dengan Interupsi): 10 Langkah
Video: Arduino Pseudo Random Non-Consecutive Number Generator 2024, November
Anonim
Arduino Tone Generator Tanpa Library atau Fungsi Serial (Dengan Interupsi)
Arduino Tone Generator Tanpa Library atau Fungsi Serial (Dengan Interupsi)

Ini bukan sesuatu yang biasanya saya jadikan instruksi, saya lebih suka pekerjaan logam saya, tetapi karena saya seorang mahasiswa teknik elektro dan harus mengambil kelas tentang mikrokontroler (Desain Sistem Tertanam), saya pikir saya akan membuat instruksi tentang salah satu proyek saya. Ketika saya awalnya membuat proyek dan lainnya untuk kelas ini, saya menemukan bahwa ada sangat sedikit atau tidak ada tutorial yang tidak menggunakan fungsi perpustakaan arduino atau fungsi serial, yang merupakan alasan lain saya pikir ini akan menjadi instruksi yang baik.

Kode ini dirancang untuk mikrokontroler Atmega 2560, jadi jika Anda ingin menerapkannya di papan lain, Anda harus mengubah register alamat dalam kode berdasarkan panduan pengguna pengontrol Anda. Ide dasar di balik kode ini adalah bahwa setiap kali Anda memasukkan tombol pada keyboard ke monitor serial, arduino mega akan mengeluarkan frekuensi tertentu berdasarkan tombol apa yang Anda tekan, dengan "q" mengatur ulang. Saya membuatnya sehingga "a" akan menampilkan frekuensi datar A dan "A" akan menampilkan frekuensi tajam A, "b" menghasilkan B datar, "c" untuk C datar, "C" untuk C tajam, dan seterusnya. Kode lengkap diunggah di akhir, tetapi setiap langkah akan memecah kode menjadi beberapa bagian sehingga lebih mudah untuk dijelaskan.

Langkah 1: Menentukan Alamat Register

Mendefinisikan Alamat Register
Mendefinisikan Alamat Register

Langkah ini mudah, jika Anda menggunakan atmega 2560, Anda hanya perlu menggunakan alamat yang saya gunakan, meskipun jika Anda menggunakan papan dengan chip yang berbeda, Anda harus menemukan alamat untuk masing-masing register ini di komputer Anda. manual pengguna chip. Definisi di atas hanyalah konstanta yang akan digunakan untuk fungsi kita nanti. Kami menentukan alamat sebagai volatile unsigned karena kami tidak ingin kompiler mengacaukannya.

Langkah 2: Array dan Variabel Global

Array dan Variabel Global
Array dan Variabel Global
Array dan Variabel Global
Array dan Variabel Global
Array dan Variabel Global
Array dan Variabel Global

Di sini kita ingin mendefinisikan larik Frekuensi yang akan berisi semua frekuensi yang harus dikeluarkan oleh setiap tombol. Nilai-nilai ini dihitung dari frekuensi nada yang sebenarnya, dan sejujurnya saya lupa bagaimana saya mendapatkannya, tetapi itu adalah nilai yang tepat saat saya mengujinya pada osiloskop untuk memastikannya. Kami juga mendefinisikan array catatan yang berisi semua tombol yang harus ditekan untuk setiap nada, serta variabel yang kami perlukan untuk fungsi selanjutnya.

Langkah 3: Fungsi "serial.begin"

NS
NS

Kami akan memanggil fungsi kustom kami yang mereplikasi fungsi "serial.begin" U0init(). Dibutuhkan baudrate yang diinginkan sebagai input dan memulai port serial pada baudrate itu.

Langkah 4: Fungsi "serial.available"

NS
NS

Kami akan memanggil fungsi yang meniru "serial.available" U0kbhit(). Itu tidak mengambil input tetapi mendeteksi jika ada perubahan yang dibuat pada keyboard menggunakan bit status RDA dan mengembalikan nilai true ketika perubahan terdeteksi.

Langkah 5: Fungsi "serial.read"

NS
NS

Kami akan memanggil fungsi yang meniru fungsi "serial.read" U0getchar(), yang tidak mengambil input dan output apa pun perubahan yang dibuat pada keyboard, yang disimpan di register UDR0.

Langkah 6: Fungsi "serial.write"

NS
NS

Kami akan memanggil fungsi yang meniru "serial.write" U0putchar(), yang mengambil data dari register UDR0 saat perubahan terdeteksi dan disimpan, dan output yang berubah kembali ke monitor serial.

Langkah 7: Fungsi Pengaturan

Fungsi Pengaturan
Fungsi Pengaturan

Ini adalah fungsi setup dasar yang akan menggunakan tiruan "serial.begin" kami untuk menginisialisasi port serial, dan akan menginisialisasi pengaturan bit kami untuk register timer dan mengatur PB6 untuk mengeluarkan nada kami.

Langkah 8: Fungsi Loop dan ISR

Fungsi Loop dan ISR
Fungsi Loop dan ISR

Loop berfungsi sebagai berikut: jika perubahan terdeteksi dengan fungsi "serial.available" kami, fungsi "serial.read" kami menyimpan perubahan itu, dan fungsi "serial.write" kami menempatkan perubahan itu ke monitor serial. Selama variabel i kurang dari ukuran array frekuensi, itu akan mengatur output menjadi posisi i dalam array itu, mengeluarkan frekuensi pada posisi itu. ISR berfungsi sebagai reset, dimana jika posisi array frekuensi tidak sama dengan 0 (dengan kata lain jika "q" tidak ditekan), maka akan mengeluarkan frekuensi, tetapi ketika "q" ditekan maka akan reset. Harap diperhatikan: kode ini menggunakan interupsi, tetapi dapat dilakukan dengan interupsi dinonaktifkan. Saya akan memposting kode tanpa interupsi jika saya mendapatkan permintaan untuk itu, saya hanya berpikir versi interupsi lebih menyenangkan.

Langkah 9: Pengkabelan

Pengkabelan
Pengkabelan

Pengkabelan untuk kode ini sangat mudah, cukup letakkan kabel keluaran dari PB6 ke papan tempat memotong roti, sambungkan bel atau speaker secara seri dengan itu, dan sambungkan kembali ke ground. Catatan: jika Anda menggunakan speaker, pasang resistor kecil di depan speaker. Jika Anda hanya ingin melihat output tetapi tidak mendengarnya, cukup sambungkan PB6 ke kabel merah osiloskop dan kabel hitam ke ground.

Langkah 10: Menyatukan Semuanya

Saya menambahkan kode lengkap ke langkah ini, karena saya sudah menjelaskan semua bagiannya di langkah sebelumnya. Hanya dibutuhkan input keyboard untuk frekuensi yang berbeda dan output frekuensi tersebut ke PB6. Semoga Anda menikmati membaca cara berbeda untuk membuat kode dengan IDE!

Juga, silakan pilih ini di kontes Mikrokontroler:D

Direkomendasikan: