Satura rādītājs:

Arduino toņu ģenerators bez bibliotēkas vai sērijas funkcijām (ar pārtraukumiem): 10 soļi
Arduino toņu ģenerators bez bibliotēkas vai sērijas funkcijām (ar pārtraukumiem): 10 soļi

Video: Arduino toņu ģenerators bez bibliotēkas vai sērijas funkcijām (ar pārtraukumiem): 10 soļi

Video: Arduino toņu ģenerators bez bibliotēkas vai sērijas funkcijām (ar pārtraukumiem): 10 soļi
Video: 10 labākie AI mārketinga rīki (AI rīki, salīdzinot - ChatGPT vs Jasper AI vs Copy AI vs 7 More!) 2024, Novembris
Anonim
Arduino toņu ģenerators bez bibliotēkas vai sērijas funkcijām (ar pārtraukumiem)
Arduino toņu ģenerators bez bibliotēkas vai sērijas funkcijām (ar pārtraukumiem)

Tas nav kaut kas tāds, ko es parasti padarītu par pamācāmu, es dodu priekšroku metālapstrādei, bet, tā kā esmu elektrotehnikas students un jāapmeklē mikrokontrolleri (iegulto sistēmu dizains), es domāju, ka es darīšu pamācību viens no maniem projektiem. Kad es sākotnēji izveidoju projektu un citus šīs klases materiālus, es atklāju, ka ir ļoti maz pamācību, kurās netiek izmantotas arduino bibliotēkas funkcijas vai sērijas funkcijas, un tas ir vēl viens iemesls, kāpēc es domāju, ka tas būtu labi pamācāms.

Šis kods ir paredzēts mikrokontrolleram Atmega 2560, tādēļ, ja vēlaties to ieviest citā panelī, jums būs jāmaina adrešu reģistri kodā, pamatojoties uz jūsu kontrolieru lietotāja rokasgrāmatu. Koda pamatideja ir tāda, ka ikreiz, kad sērijveida monitorā ievadāt tastatūras taustiņu, arduino mega izdos noteiktu frekvenci, pamatojoties uz taustiņa nospiešanu, un "q" to atiestatīs. Es to izveidoju tā, ka "a" izvadīs A plakano frekvenci un "A" - A asu frekvenci, "b" izvadīs B plakanu, "c" - C plakanu, "C" - C asu utt. Viss kods tiek augšupielādēts beigās, bet katrs solis sadalīs kodu gabalos, lai to būtu vieglāk izskaidrot.

1. darbība. Reģistra adrešu definēšana

Reģistra adrešu definēšana
Reģistra adrešu definēšana

Šis solis ir vienkāršs, ja izmantojat atmega 2560, jums vienkārši jāizmanto manis izmantotās adreses, lai gan, ja izmantojat dēli ar citu mikroshēmu, savā vietnē ir jāatrod katra šī reģistra adreses. mikroshēmu lietotāja rokasgrāmata. Augšpusē esošās definīcijas ir tikai konstantes, kuras vēlāk tiks izmantotas mūsu funkcijām. Mēs norādām adreses kā nepastāvīgas neparakstītas, jo nevēlamies, lai kompilators ar tām sajauktos.

2. darbība: masīvi un globālie mainīgie

Masīvi un globālie mainīgie
Masīvi un globālie mainīgie
Masīvi un globālie mainīgie
Masīvi un globālie mainīgie
Masīvi un globālie mainīgie
Masīvi un globālie mainīgie

Šeit mēs vēlamies definēt frekvenču masīvu, kurā būs visas frekvences, kuras katrai atslēgai vajadzētu izvadīt. Šīs vērtības tiek aprēķinātas no faktiskajām piezīmju frekvencēm, un, godīgi sakot, es aizmirsu, kā tās ieguvu, taču tās ir pareizās vērtības, jo es tās pārbaudīju ar osciloskopu, lai pārliecinātos. Mēs arī definējam piezīmju masīvu, kurā ir visi taustiņi, kas jānospiež katram tonim, kā arī mainīgie, kas būs nepieciešami mūsu vēlākajām funkcijām.

3. darbība: funkcija "serial.begin"

The
The

Mēs izsauksim mūsu pielāgoto funkciju, kas atkārto funkciju "serial.begin" U0init (). Tā ievada vēlamo datu pārraides ātrumu un sāk sērijveida portu ar šo datu pārraides ātrumu.

4. darbība: funkcija "serial.available"

The
The

Mēs nosauksim funkciju, kas imitē "serial.available", U0kbhit (). Tas neprasa ievadi, bet nosaka, vai tastatūrā ir veiktas izmaiņas, izmantojot RDA statusa bitu, un atgriež vērtību true, kad tiek konstatētas izmaiņas.

5. darbība: funkcija "serial.read"

The
The

Funkciju, kas atdarina funkciju "serial.read", mēs izsauksim par U0getchar (), kas neveic nekādas ievades un izvades neatkarīgi no izmaiņām, kas tiek veiktas tastatūrā, kas tiek saglabāta UDR0 reģistrā.

6. darbība: funkcija "serial.write"

The
The

Mēs izsauksim funkciju, kas imitē "serial.write" U0putchar (), kas ņem datus no UDR0 reģistra, kamēr tiek konstatētas un saglabātas izmaiņas, un izvada, kas tiek mainītas atpakaļ uz sērijas monitoru.

7. darbība: iestatīšanas funkcija

Iestatīšanas funkcija
Iestatīšanas funkcija

Šī ir pamata iestatīšanas funkcija, kas izmantos mūsu "serial.begin" imitāciju, lai inicializētu sērijas portu, un inicializēs mūsu taimera reģistru bitu iestatījumus un iestatīs PB6, lai izvadītu mūsu signālus.

8. darbība: cilpa un ISR funkcijas

Cilpas un ISR funkcijas
Cilpas un ISR funkcijas

Cikls darbojas šādi: ja tiek konstatētas izmaiņas, izmantojot mūsu funkciju "serial.available", mūsu funkcija "serial.read" saglabā šīs izmaiņas, un mūsu funkcija "serial.write" ievieto šīs izmaiņas sērijas monitorā. Kamēr mainīgais i ir mazāks par frekvenču masīva lielumu, tas noteiks izvadi par i pozīciju šajā masīvā, izvadot frekvenci šajā pozīcijā. ISR darbojas kā atiestatīšana, kur, ja frekvenču masīva pozīcija nav vienāda ar 0 (citiem vārdiem sakot, ja netiek nospiests "q"), tā izvadīs frekvenci, bet, nospiežot "q", tā tiks atiestatīta. Lūdzu, ņemiet vērā: šis kods izmanto pārtraukumus, bet to var izdarīt, ja pārtraukumi ir atspējoti. Es publicēšu kodu bez pārtraukumiem, ja saņemšu kādus pieprasījumus par to, es vienkārši domāju, ka pārtraukuma versija ir jautrāka.

9. solis: elektroinstalācija

Elektroinstalācija
Elektroinstalācija

Elektroinstalācija šim kodam ir ārkārtīgi vienkārša, vienkārši ievietojiet izejas vadu no PB6 uz maizes dēļa, pievienojiet tam skaņas signālu vai skaļruni un pievienojiet to atpakaļ zemei. Piezīme: ja izmantojat skaļruni, pirms skaļruņa ievietojiet nelielu rezistoru. Ja vēlaties tikai redzēt izeju, bet nedzirdēt, vienkārši pievienojiet PB6 osciloskopa sarkanajam vadam un melno vadu pie zemes.

10. solis: salieciet visu kopā

Es šim solim pievienoju pilnu kodu, jo iepriekšējās darbībās esmu izskaidrojis visas tā daļas. Tas vienkārši aizņem tastatūras ievadi dažādām frekvencēm un izvada šo frekvenci uz PB6. Ceru, ka jums patika lasīt citu veidu, kā kodēt ar IDE!

Arī, lūdzu, balsojiet par to Mikrokontrolleru konkursā: D

Ieteicams: