Kazalo:

Generator tonov Arduino brez knjižnice ali zaporednih funkcij (s prekinitvami): 10 korakov
Generator tonov Arduino brez knjižnice ali zaporednih funkcij (s prekinitvami): 10 korakov

Video: Generator tonov Arduino brez knjižnice ali zaporednih funkcij (s prekinitvami): 10 korakov

Video: Generator tonov Arduino brez knjižnice ali zaporednih funkcij (s prekinitvami): 10 korakov
Video: Обзор -Мини Лан тестер С ТОН ГЕНЕРАТОРОМ. 2024, November
Anonim
Generator tonov Arduino brez knjižnice ali zaporednih funkcij (s prekinitvami)
Generator tonov Arduino brez knjižnice ali zaporednih funkcij (s prekinitvami)

To sicer ni nekaj, za kar bi običajno poučeval, raje imam kovinsko obdelavo, a ker sem študent elektrotehnike in moram opraviti tečaj o mikrokrmilnikih (Embedded Systems Design), sem mislil, da bom naredil navodila za eden od mojih projektov. Ko sem prvotno ustvarjal projekt in druge za ta razred, sem ugotovil, da je zelo malo ali nič vaj, ki ne uporabljajo funkcij knjižnice arduino ali serijskih funkcij, kar je še en razlog, zakaj sem mislil, da bi bilo to dobro poučevanje.

Ta koda je zasnovana za mikrokrmilnik Atmega 2560, zato, če jo želite implementirati na drugo ploščo, morate spremeniti registre naslovov v kodi glede na uporabniški priročnik za krmilnike. Osnovna ideja kode je, da vsakič, ko v serijski monitor vnesete tipko na tipkovnici, bo arduino mega predvajal določeno frekvenco glede na tipko, ki jo pritisnete, s ponastavitvijo "q". Naredil sem tako, da "a" oddaja ravno frekvenco A, "A" pa ostro frekvenco A, "b" oddaja B ravno, "c" za C flat, "C" za C ostro itd. Celotna koda je naložena na koncu, vendar bo vsak korak razčlenil kodo na koščke, zato jo je lažje razložiti.

1. korak: Določitev naslovov registra

Določanje registrskih naslovov
Določanje registrskih naslovov

Ta korak je enostaven, če uporabljate atmega 2560, morate uporabiti samo naslove, ki sem jih uporabil, čeprav boste pri uporabi plošče z drugačnim čipom morali poiskati naslove vsakega od teh registrov v svojem Navodila za uporabo čipov. Definicije na vrhu so le konstante, ki jih bomo kasneje uporabili za naše funkcije. Naslove določimo kot nestanovitne brez podpisa, ker ne želimo, da se prevajalnik z njimi zapleta.

2. korak: Nizovi in globalne spremenljivke

Nizovi in globalne spremenljivke
Nizovi in globalne spremenljivke
Nizovi in globalne spremenljivke
Nizovi in globalne spremenljivke
Nizovi in globalne spremenljivke
Nizovi in globalne spremenljivke

Tu želimo definirati frekvenčno matriko, ki bo vsebovala vse frekvence, ki bi jih morala oddati vsaka tipka. Te vrednosti so izračunane na podlagi dejanskih notnih frekvenc in pošteno sem pozabil, kako sem jih dobil, vendar so to prave vrednosti, ko sem jih preveril na osciloskopu, da sem se prepričal. Določimo tudi niz beležk, ki vsebuje vse tipke, ki jih je treba pritisniti za vsak ton, in spremenljivke, ki jih potrebujemo za naše poznejše funkcije.

3. korak: Funkcija "serial.begin"

The
The

Poklicali bomo našo funkcijo po meri, ki ponavlja funkcijo "serial.begin" U0init (). Za vnos vzame želeno hitrost prenosa in zažene serijska vrata pri tej hitrosti prenosa.

4. korak: Funkcija "serial.available"

The
The

Poklicali bomo funkcijo, ki posnema "serial.available" U0kbhit (). Ne vnese vnosa, ampak namesto tega zazna, ali je bila na tipkovnici spremenjena s bitom stanja RDA in vrne vrednost true, ko zazna spremembo.

5. korak: Funkcija "serial.read"

The
The

Funkcijo, ki posnema funkcijo "serial.read", bomo poklicali U0getchar (), ki ne vnese nobenega vnosa in izpiše kakršne koli spremembe na tipkovnici, ki je shranjena v registru UDR0.

6. korak: Funkcija "serial.write"

The
The

Poklicali bomo funkcijo, ki posnema "serial.write" U0putchar (), ki vzame podatke iz registra UDR0, medtem ko je zaznana in shranjena sprememba, in izhodi, ki se spremenijo nazaj na serijski monitor.

7. korak: Nastavitvena funkcija

Funkcija namestitve
Funkcija namestitve

To je osnovna namestitvena funkcija, ki bo uporabila našo imitacijo "serial.begin" za inicializacijo zaporednih vrat in bo inicializirala naše nastavitve bitov za časovne registre in nastavila PB6 za oddajanje naših tonov.

8. korak: Funkcije zanke in ISR

Funkcije zanke in ISR
Funkcije zanke in ISR

Zanka deluje tako: če je sprememba zaznana z našo funkcijo "serial.available", funkcija "serial.read" shrani to spremembo, funkcija "serial.write" pa to spremembo prenese v serijski monitor. Dokler je spremenljivka i manjša od velikosti frekvenčnega niza, bo nastavila izhod na položaj i v tem nizu, pri čemer bo frekvenca na tem mestu. ISR deluje kot ponastavitev, kjer, če položaj frekvenčnega niza ni enak 0 (z drugimi besedami, če "q" ni pritisnjen), bo oddajal frekvenco, ko pa pritisnete "q", pa se bo ponastavil. Prosimo, upoštevajte: ta koda uporablja prekinitve, vendar je to mogoče storiti z onemogočenimi prekinitvami. Kodo bom objavil brez prekinitev, če za to dobim kakšno zahtevo, samo mislim, da je prekinitvena različica bolj zabavna.

9. korak: Ožičenje

Ožičenje
Ožičenje

Ožičenje za to kodo je izjemno preprosto, preprosto priključite izhodno žico iz PB6 na ploščo, s tem zaporedno priključite brenčalo ali zvočnik in ga priključite nazaj na tla. Opomba: če uporabljate zvočnik, vstavite majhen upor pred zvočnik. Če želite samo videti izhod, vendar ga ne slišite, samo priključite PB6 na rdeči vodnik osciloskopa in črni kabel na tla.

10. korak: Združite vse skupaj

Temu koraku sem dodal celotno kodo, saj sem v prejšnjih korakih razložil vse njene dele. Za različne frekvence potrebuje samo tipkovnico in to frekvenco odda v PB6. Upam, da ste uživali v branju drugačnega načina kodiranja z IDE!

Za to glasujte tudi na natečaju Mikrokontroler: D

Priporočena: