Mündəricat:
- Addım 1: Qeydiyyat Ünvanlarının Müəyyən edilməsi
- Addım 2: Diziler və Qlobal Dəyişənlər
- Addım 3: "serial.begin" funksiyası
- Addım 4: "serial.available" funksiyası
- Addım 5: "serial.read" funksiyası
- Addım 6: "serial.write" funksiyası
- Addım 7: Quraşdırma funksiyası
- Addım 8: Loop və ISR funksiyaları
- Addım 9: Kabel çəkmə
- Addım 10: Hamısını bir araya gətirin
Video: Kitabxanasız və ya Serial Fonksiyasız Arduino Ton Generatoru (Fasilələrlə): 10 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Bu, adətən öyrətmək istədiyim bir şey deyil, metal işimi üstün tuturam, amma bir elektrik mühəndisliyi tələbəsi olduğum üçün və mikrokontrollerlər (Daxili Sistem Dizaynı) mövzusunda bir dərs almalı olduğum üçün bir dərs verəcəyimi düşündüm layihələrimdən biridir. Layihəni və digərlərini bu sinif üçün ilk dəfə hazırladığımda, arduino kitabxana funksiyalarını və ya serial funksiyalarını istifadə etməyən çox az dərsliyin olmadığını gördüm, bunun yaxşı bir təlimat verəcəyini düşündüyüm başqa bir səbəbdir.
Bu kod Atmega 2560 mikrokontrolörü üçün hazırlanmışdır, buna görə də onu başqa bir lövhədə tətbiq etmək istəyirsinizsə, nəzarətçilərinizin istifadəçi təlimatına əsasən koddakı ünvan qeydlərini dəyişdirməlisiniz. Kodun arxasındakı əsas fikir, klaviaturadakı bir düyməni seriyalı monitora daxil etdiyiniz zaman, arduino mega -nın "q" sıfırlaması ilə hansı düyməni basdığınıza əsaslanaraq müəyyən bir tezlik çıxaracağıdır. "A" nın A düz tezliyini, "A" nın A kəskin tezliyini, "b" B düzünün, "düz" üçün "c" nin, "C" üçün C kəskininin və s. Tam kod sonunda yüklənir, lakin hər bir addım kodu parçalayacaq, buna görə izah etmək daha asandır.
Addım 1: Qeydiyyat Ünvanlarının Müəyyən edilməsi
Bu addım asandır, əgər atmega 2560 istifadə edirsinizsə, sadəcə istifadə etdiyim ünvanlardan istifadə etməlisiniz, baxmayaraq ki, fərqli çipli bir lövhədən istifadə edirsinizsə, bu qeydlərin hər birinin ünvanlarını kompüterinizdə tapmalısınız. cips istifadəçi təlimatı. Yuxarıdakı təriflər, sonradan funksiyalarımız üçün istifadə ediləcək sabitlərdir. Ünvanları uçucu işarəsiz olaraq təyin edirik, çünki tərtibçinin onlarla qarışmasını istəmirik.
Addım 2: Diziler və Qlobal Dəyişənlər
Burada hər bir düymənin çıxarmalı olduğu bütün tezlikləri özündə ehtiva edən Tezlik massivini təyin etmək istəyirik. Bu dəyərlər faktiki qeyd tezliklərindən hesablanır və vicdanla bunları necə aldığımı unutmuşam, amma əmin olmaq üçün osiloskopda sınadığım zaman doğru dəyərlərdir. Hər ton üçün basmaq üçün bütün düymələri və sonrakı funksiyalarımız üçün ehtiyac duyacağımız dəyişənləri özündə birləşdirən qeydlər sırasını da müəyyənləşdiririk.
Addım 3: "serial.begin" funksiyası
"Serial.begin" funksiyasını təkrarlayan xüsusi funksiyamızı U0init () adlandıracağıq. İstədiyiniz baud dərəcəsini giriş olaraq alır və serial sürətini həmin baud sürətində işə salır.
Addım 4: "serial.available" funksiyası
Təqlid edən funksiyanı "serial.available" U0kbhit () adlandıracağıq. Giriş tələb etmir, əksinə RDA status bitindən istifadə edərək klaviaturada bir dəyişiklik olub olmadığını algılar və dəyişiklik aşkar edildikdə doğru olaraq qaytarır.
Addım 5: "serial.read" funksiyası
"Serial.read" funksiyasını təqlid edən funksiyanı UDR0 reyestrində saxlanılan klaviaturada edilən hər hansı bir dəyişiklik və çıxışı olmayan U0getchar () adlandıracağıq.
Addım 6: "serial.write" funksiyası
Dəyişiklik aşkarlananda və saxlanarkən UDR0 reyestrindən məlumatları alan və serial monitora dəyişən çıxışları göstərən "serial.write" U0putchar () ı təqlid edən funksiyanı çağıracağıq.
Addım 7: Quraşdırma funksiyası
Bu, serial portunu işə salmaq üçün "serial.begin" imitasiyamızı istifadə edəcək və taymer qeydləri üçün bit parametrlərimizi işə salacaq və PB6 -nı tonlarımızı çıxarmaq üçün quracaq əsas qurma funksiyasıdır.
Addım 8: Loop və ISR funksiyaları
Döngü belə işləyir: "serial.available" funksiyamızda bir dəyişiklik aşkar edilərsə, "serial.read" funksiyamız bu dəyişikliyi saxlayır və "serial.write" funksiyamız bu dəyişikliyi serial monitoruna qoyur. Bir dəyişən i tezlik massivinin ölçüsündən az olduğu müddətcə, çıxışı həmin mövqedə i -nin mövqeyi olaraq təyin edəcək və tezliyi o mövqedə çıxaracaq. ISR sıfırlama funksiyasını yerinə yetirir, burada tezlik massivinin mövqeyi 0 -a bərabər deyilsə (başqa sözlə "q" düyməsinə basılmırsa) tezliyi çıxaracaq, ancaq "q" düyməsinə basıldıqda sıfırlayacaq. bu kodda fasilələr istifadə olunur, lakin bu kəsilmələr əlil olduqda edilə bilər. Hər hansı bir sorğu alsam, kodu fasiləsiz göndərəcəyəm, yalnız kəsmə versiyasının daha əyləncəli olduğunu düşünürəm.
Addım 9: Kabel çəkmə
Bu kodun naqilləri son dərəcə asandır, sadəcə PB6 -dan bir çörək taxtasına bir çıxış teli qoyun, bir siqnalı və ya dinamiki ardıcıl olaraq bağlayın və yenidən yerə bağlayın. Qeyd: Dinamikdən istifadə edirsinizsə, dinamikdən əvvəl kiçik bir rezistor qoyun. Yalnız çıxışı görmək, ancaq eşitmək istəmirsinizsə, PB6 -nı bir osiloskopun qırmızı ucuna, qara ucunu isə yerə bağlayın.
Addım 10: Hamısını bir araya gətirin
Bütün addımları əvvəlki addımlarda izah etdiyim üçün bu addıma tam kodu əlavə etdim. Fərqli tezliklər üçün klaviatura girişi lazımdır və bu tezliyi PB6 -ya çıxarır. Ümid edirəm IDE ilə fərqli bir kod oxumaqdan zövq aldınız!
Ayrıca, mikro nəzarətçi yarışmasında buna səs verin: D
Tövsiyə:
DDS AD9910 Arduino Shield-də RF Siqnal Generatoru 100 KHz-600 MHZ: 5 addım
DDS AD9910 Arduino Shield-də 100 KHz-600 MHZ RF Siqnal Generatoru: Arduinoda aşağı səs-küy, yüksək dəqiqlik, sabit RF generatoru (AM, FM Modulyasiyası ilə) necə edilir
Kitabxanasız Kayan Mətni Göstərmək Üçün Başqa Arduino İstifadə edərək Arduino Proqramlaşdırması: 5 Addım
Kitabxanasız Kaydırma Mətnini Göstərmək üçün Başqa Arduino İstifadə edərək Arduino Proqramlaşdırma: Sony Spresense və ya Arduino Uno o qədər də bahalı deyil və çox güc tələb etmir. Bununla birlikdə, layihənizdə güc, yer və ya hətta büdcə məhdudiyyəti varsa, Arduino Pro Mini istifadə etməyi düşünə bilərsiniz. Arduino Pro Micro -dan fərqli olaraq, Arduino Pro Mi
Sadə bir ton generatoru: 7 addım (şəkillərlə)
Sadə bir ton generatoru: Arduino Tone Generator, ümumi pinləri GND ilə paylaşan, qalan sancaqlar 2, 3, 4, 5, 6, 7, 8 və 9 Arduino rəqəmsal sancaqlarına və bir dinamikə qoşulduqda açarlar dəstidir. Arduino Uno -dan GND və rəqəmsal pin 11 arasında quraşdırılmışdır
Arduino Pro Mini -dən istifadə edərək "Jimikky Kammal" Ton Generatoru: 5 addım
Arduino Pro Mini istifadə edərək "Jimikky Kammal" Ton Generatoru: Bu Arduino Pro Mini istifadə edərək sadə bir ton generatoru layihəsidir. Super hit mahnının bir hissəsi " Jimikky Kammal " filminin " Velipadinte Pusthakam " monotonik olaraq inkişaf edir. Musiqili notlar təbiətdə hamar və yuvarlanan sinus kimi baş verir
C-kodda Mikrokontrolör Kumaş Ton Generatoru: 8 Addım (Şəkillərlə birlikdə)
C-kodda mikrokontrolör Kumaş Tonu Generatoru: Keçən il oktyabr ayının sonunda carmitsu istifadəçisi, yemək qutusu sintezimi gördükdən sonra mənə bir mesaj göndərdi. Mesajından: Mən ibtidai sinifdə musiqi öyrədirəm. Çoxlu səsyazma musiqisi çalırıq. yəni uşaqlar kiçik fleyta çalırlar