Mündəricat:

Kitabxanasız və ya Serial Fonksiyasız Arduino Ton Generatoru (Fasilələrlə): 10 Addım
Kitabxanasız və ya Serial Fonksiyasız Arduino Ton Generatoru (Fasilələrlə): 10 Addım

Video: Kitabxanasız və ya Serial Fonksiyasız Arduino Ton Generatoru (Fasilələrlə): 10 Addım

Video: Kitabxanasız və ya Serial Fonksiyasız Arduino Ton Generatoru (Fasilələrlə): 10 Addım
Video: Kitabsız və kitabxanasız evimiz / Həll yolları 2024, Noyabr
Anonim
Kitabxanasız və ya Serial Funksiyaları olmayan Arduino Ton Jeneratörü (Fasilələrlə)
Kitabxanasız və ya Serial Funksiyaları olmayan Arduino Ton Jeneratörü (Fasilələrlə)

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

Qeydiyyat Ünvanlarının Təyin Edilməsi
Qeydiyyat Ünvanlarının Təyin 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

Dizilər və Qlobal Dəyişənlər
Dizilər və Qlobal Dəyişənlər
Dizilər və Qlobal Dəyişənlər
Dizilər və Qlobal Dəyişənlər
Dizilər və Qlobal Dəyişənlər
Dizilər 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ı

The
The

"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ı

The
The

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ı

The
The

"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ı

The
The

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ı

Quraşdırma funksiyası
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ı

Loop və ISR funksiyaları
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ə

Kablolama
Kablolama

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ə: