Mundarija:

Kutubxonasiz yoki ketma -ket funktsiyasiz (uzilishlarsiz) Arduino ohang generatori: 10 qadam
Kutubxonasiz yoki ketma -ket funktsiyasiz (uzilishlarsiz) Arduino ohang generatori: 10 qadam

Video: Kutubxonasiz yoki ketma -ket funktsiyasiz (uzilishlarsiz) Arduino ohang generatori: 10 qadam

Video: Kutubxonasiz yoki ketma -ket funktsiyasiz (uzilishlarsiz) Arduino ohang generatori: 10 qadam
Video: Azzamchik (Подборка) 2024, Noyabr
Anonim
Kutubxonasiz yoki ketma -ket funktsiyasiz Arduino ohang generatori (uzilishlarsiz)
Kutubxonasiz yoki ketma -ket funktsiyasiz Arduino ohang generatori (uzilishlarsiz)

Bu men odatdagidek o'rgatadigan narsa emas, men metall ishimni afzal ko'raman, lekin men elektrotexnika talabasi bo'lganim uchun va mikrokontrollerlar (O'rnatilgan tizimlar dizayni) bo'yicha dars olishim kerak edi, men ko'rsatma beraman deb o'yladim. mening loyihalarimdan biri. Men dastlab bu sinf uchun loyihani va boshqalarni yaratganimda, arduino kutubxonasi funktsiyalari yoki ketma -ket funktsiyalarni ishlatmaydigan juda kam darsliklar borligini aniqladim, bu men uchun yaxshi ko'rsatma bo'ladi deb o'ylaganimning yana bir sababi.

Bu kod Atmega 2560 mikrokontroleriga mo'ljallangan, shuning uchun agar siz uni boshqa taxtada ishlatmoqchi bo'lsangiz, qo'mondonlarning qo'llanmasiga asoslanib, koddagi manzil registrlarini o'zgartirishingiz kerak bo'ladi. Kodning asosiy g'oyasi shundaki, har safar klaviaturadagi tugmachani ketma -ket monitorga kiritganingizda, arduino mega siz bosgan tugmachaga qarab ma'lum bir chastotani chiqaradi va uni "q" bilan qayta o'rnatadi. Men shunday qildimki, "a" A tekis chastotasini chiqaradi va "A" A aniq chastotani chiqaradi, "b" B tekislik chiqaradi, "tekis" uchun "c", "o'tkir" uchun "C" va hokazo. To'liq kod oxirida yuklanadi, lekin har bir qadam kodni qismlarga ajratadi, shuning uchun tushuntirish osonroq bo'ladi.

1 -qadam: Ro'yxatdan o'tish manzillarini aniqlash

Ro'yxatdan o'tish manzillarini aniqlash
Ro'yxatdan o'tish manzillarini aniqlash

Bu qadam juda oson, agar siz atmega 2560 dan foydalanayotgan bo'lsangiz, men ishlatgan manzillardan foydalanish kifoya, lekin agar siz boshqa chipli taxtadan foydalansangiz, ushbu registrlarning har birining manzilini topishingiz kerak bo'ladi. chips foydalanish uchun qo'llanma. Yuqoridagi ta'riflar - bu bizning funktsiyalarimiz uchun keyinchalik ishlatiladigan doimiylar. Biz manzillarni o'zgaruvchan belgisiz belgilaymiz, chunki biz kompilyator ular bilan aralashishini xohlamaymiz.

2 -qadam: massivlar va global o'zgaruvchilar

Massivlar va global o'zgaruvchilar
Massivlar va global o'zgaruvchilar
Massivlar va global o'zgaruvchilar
Massivlar va global o'zgaruvchilar
Massivlar va global o'zgaruvchilar
Massivlar va global o'zgaruvchilar

Bu erda biz har bir tugma chiqarishi kerak bo'lgan barcha chastotalarni o'z ichiga oladigan Chastotalar qatorini aniqlamoqchimiz. Bu qiymatlar eslatmalarning haqiqiy chastotalari bo'yicha hisoblab chiqilgan va rostini aytsam, men ularni qanday olganimni unutganman, lekin ishonch hosil qilish uchun ularni osiloskopda sinab ko'rganimdan keyin ular to'g'ri qiymatlardir. Shuningdek, biz har bir ohang uchun bosiladigan barcha tugmachalarni o'z ichiga olgan eslatmalar majmuasini, shuningdek, keyingi funktsiyalarimiz uchun kerak bo'ladigan o'zgaruvchilarni belgilaymiz.

3 -qadam: "serial.begin" funktsiyasi

The
The

Biz "serial.begin" funktsiyasini takrorlaydigan U0init () funktsiyasini chaqiramiz. Kerakli byudratni kirish sifatida oladi va ketma -ket portni shu tezlikda ishga tushiradi.

4 -qadam: "serial.available" funktsiyasi

The
The

Biz "serial.available" taqlid qiladigan funktsiyani U0kbhit () deb ataymiz. U kirishni talab qilmaydi, lekin uning o'rniga RDA status biti yordamida klaviaturada o'zgarish mavjudligini aniqlaydi va o'zgarish aniqlanganda rostni qaytaradi.

5 -qadam: "serial.read" funktsiyasi

The
The

Biz "serial.read" funktsiyasini taqlid qiladigan funktsiyani U0getchar () deb ataymiz, u hech qanday kirishni qabul qilmaydi va UDR0 registrida saqlanadigan klaviaturadagi o'zgarishlarni o'zgartirmaydi.

6 -qadam: "serial.write" funktsiyasi

The
The

Biz "serial.write" ni taqlid qiladigan funktsiyani chaqiramiz, u o'zgarish aniqlanganda va saqlansa UDR0 registridan ma'lumotlarni oladi va ketma -ket monitorga o'zgaradi.

7 -qadam: O'rnatish funktsiyasi

O'rnatish funktsiyasi
O'rnatish funktsiyasi

Bu ketma -ket portni ishga tushirish uchun "serial.begin" imitatsiyamizdan foydalanadigan va taymer registrlari uchun bit sozlamalarini ishga tushiradigan va ohanglarimizni chiqaradigan PB6 ni o'rnatadigan asosiy sozlash funktsiyasi.

8 -qadam: Loop va ISR funktsiyalari

Loop va ISR funktsiyalari
Loop va ISR funktsiyalari

Loop shunday ishlaydi: agar "serial.available" funksiyamizda o'zgarish aniqlansa, bizning "serial.read" funksiyasi bu o'zgarishni saqlaydi va "serial.write" funksiyasi bu o'zgarishni ketma -ket monitorga qo'yadi. I o'zgarmaydigan chastota massivining o'lchamidan kichik bo'lsa, u chiqishni shu qatordagi i pozitsiyasiga o'rnatadi va chastotani o'sha holatda chiqaradi. ISR asl holatini tiklash vazifasini bajaradi, bu erda agar chastota massivining pozitsiyasi 0 ga teng bo'lmasa (boshqacha aytganda "q" bosilmasa), u chastotani chiqaradi, lekin "q" bosilganda u asl holatiga qaytadi. bu kod uzilishlardan foydalanadi, lekin uni uzilishlar o'chirilgan holda qilish mumkin. Agar men so'rov olsam, kodni uzilishlarsiz joylashtiraman, menimcha, uzilish versiyasi yanada qiziqarli.

9 -qadam: simlarni ulash

Ulanish
Ulanish

Ushbu kodni ulash juda oson, PB6 -dan chiqish simini non paneliga qo'ying, shovqin yoki karnayni ketma -ket ulang va uni erga ulang. E'tibor bering: agar siz karnaydan foydalansangiz, karnay oldiga kichik rezistor qo'ying. Agar siz chiqishni ko'rishni xohlasangiz, lekin eshitmasangiz, PB6 ni osiloskopning qizil uchiga, qora simni esa erga ulang.

10 -qadam: Hammasini bir joyga to'plang

Men ushbu qadamga to'liq kodni qo'shdim, chunki men uning barcha qismlarini oldingi bosqichlarda tushuntirganman. Bu har xil chastotalar uchun klaviatura kiritishini oladi va bu chastotani PB6 ga chiqaradi. Umid qilamanki, sizga IDE bilan kodlashning boshqa usulini o'qish yoqdi!

Bundan tashqari, iltimos, mikrokontroller tanlovida bunga ovoz bering: D

Tavsiya: