Daftar Isi:
- Langkah 1: Menentukan Alamat Register
- Langkah 2: Array dan Variabel Global
- Langkah 3: Fungsi "serial.begin"
- Langkah 4: Fungsi "serial.available"
- Langkah 5: Fungsi "serial.read"
- Langkah 6: Fungsi "serial.write"
- Langkah 7: Fungsi Pengaturan
- Langkah 8: Fungsi Loop dan ISR
- Langkah 9: Pengkabelan
- Langkah 10: Menyatukan Semuanya
Video: Arduino Tone Generator Tanpa Library atau Fungsi Serial (Dengan Interupsi): 10 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:57
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
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
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"
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"
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"
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"
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
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
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 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:
Generator Fungsi DIY Dengan STC MCU Dengan Mudah: 7 Langkah (dengan Gambar)
Generator Fungsi DIY Dengan STC MCU Dengan Mudah: Ini adalah Generator Fungsi yang dibuat dengan STC MCU. Hanya membutuhkan beberapa komponen dan rangkaiannya sederhana. Spesifikasi Keluaran: Frekuensi Gelombang Persegi Saluran Tunggal: 1Hz~2MHz Frekuensi Gelombang Sinus: 1Hz~10kHz Amplitudo: VCC, sekitar 5V Kemampuan beban
Sensor Efek Aula Arduino Dengan Interupsi: 4 Langkah
Sensor Efek Hall Arduino Dengan Interupsi: Hai Semuanya, Hari ini saya akan menunjukkan kepada Anda bagaimana Anda dapat menghubungkan sensor efek hall ke Arduino dan menggunakannya dengan interupsi. Alat dan bahan yang digunakan dalam video (Tautan afiliasi): Arduino Uno: http ://s.click.aliexpress.com/e/biNyW0zKHall sensor efek: h
Generator Fungsi Portabel di Arduino: 7 Langkah (dengan Gambar)
Generator Fungsi Portabel di Arduino: Generator fungsi adalah alat yang sangat berguna, terutama ketika kita mempertimbangkan untuk menguji respons rangkaian kita terhadap sinyal tertentu. Dalam instruksi ini saya akan menjelaskan urutan bangunan generator fungsi portabel yang kecil, mudah digunakan.Fitur
Self Excite Alternator Tanpa Generator DC, Capacitor Bank atau Baterai: 5 Langkah (dengan Gambar)
Self Excite Alternator Tanpa Generator DC, Capacitor Bank atau Baterai: Hai! Instruksi ini adalah untuk mengubah alternator yang bersemangat medan menjadi yang tereksitasi sendiri. Keuntungan dari trik ini adalah Anda tidak perlu memberi daya pada medan ini alternator dengan baterai 12 volt tetapi akan menyala sendiri sehingga Anda
Pendingin / Penyangga Laptop Tanpa Biaya (Tanpa Lem, Tanpa Pengeboran, Tanpa Mur & Baut, Tanpa Sekrup): 3 Langkah
Pendingin / Penyangga Laptop Tanpa Biaya (Tanpa Lem, Tanpa Pengeboran, Tanpa Mur & Baut, Tanpa Sekrup): UPDATE: MOHON MOHON VOTE UNTUK SAYA INSTRUCTABLE, TERIMA KASIH ^_^ ANDA JUGA INGIN MEMILIH KONTES SAYA YANG LAINNYA MASUK DI www.instructables.com/id/Zero-Cost-Aluminum-Furnace-No-Propane-No-Glue-/ ATAU MUNGKIN PILIH TEMAN TERBAIK SAYA