Sadržaj:

Arduino generator tonova bez biblioteke ili serijskih funkcija (s prekidima): 10 koraka
Arduino generator tonova bez biblioteke ili serijskih funkcija (s prekidima): 10 koraka

Video: Arduino generator tonova bez biblioteke ili serijskih funkcija (s prekidima): 10 koraka

Video: Arduino generator tonova bez biblioteke ili serijskih funkcija (s prekidima): 10 koraka
Video: Самый простой генератор сигналов для лаборатории радиолюбителя от 1Гц до 2МГц 2024, Studeni
Anonim
Arduino generator tonova bez biblioteke ili serijskih funkcija (s prekidima)
Arduino generator tonova bez biblioteke ili serijskih funkcija (s prekidima)

Ovo nije nešto na čemu bih inače mogao poučavati, više volim svoje metalne radove, ali kako sam student elektrotehnike i moram pohađati tečaj o mikrokontrolerima (Embedded Systems Design), mislio sam da ću napraviti instrukcije o jedan od mojih projekata. Kad sam izvorno izrađivao projekt i druge za ovu klasu, otkrio sam da postoji vrlo malo ili nimalo vodiča koji ne koriste funkcije biblioteke arduino ili serijske funkcije, što je još jedan razlog zašto sam mislio da bi ovo bilo dobro uputstvo.

Ovaj kôd je dizajniran za mikrokontroler Atmega 2560, pa ako ga želite implementirati na drugu ploču, morat ćete promijeniti registre adresa u kodu na temelju korisničkog priručnika za vaše kontrolere. Osnovna ideja koda je da kad god unesete tipku s tipkovnice u serijski monitor, arduino mega će ispisati određenu frekvenciju ovisno o tome koju tipku pritisnete, s "q" resetiranjem. Napravio sam tako da će "a" izlaziti ravnu frekvenciju A, a "A" izlaziti oštru frekvenciju A, "b" izlaziti B ravnu, "c" za C flat, "C" za C oštru itd. Cjelokupni kôd učitava se na kraju, ali svaki će korak razbiti kôd na komade pa ga je lakše objasniti.

Korak 1: Definiranje adresa registra

Definiranje adresa registra
Definiranje adresa registra

Ovaj korak je jednostavan, ako koristite atmega 2560, trebate koristiti samo adrese koje sam ja koristio, iako ako koristite ploču s različitim čipom, morat ćete pronaći adrese za svaki od ovih registara na svom korisnički priručnik za čips. Definicije na vrhu samo su konstante koje će se kasnije koristiti za naše funkcije. Određujemo adrese kao nestabilne bez potpisa jer ne želimo da se prevoditelj petlja s njima.

Korak 2: Nizovi i globalne varijable

Nizovi i globalne varijable
Nizovi i globalne varijable
Nizovi i globalne varijable
Nizovi i globalne varijable
Nizovi i globalne varijable
Nizovi i globalne varijable

Ovdje želimo definirati niz frekvencija koji će sadržavati sve frekvencije koje bi svaka tipka trebala izlaziti. Ove su vrijednosti izračunate na temelju stvarnih notnih frekvencija, i iskreno, zaboravio sam kako sam ih dobio, ali to su prave vrijednosti dok sam ih testirao na osciloskopu da se uvjerim. Također definiramo niz bilješki koji sadrži sve tipke koje treba pritisnuti za svaki ton, kao i varijable koje će nam trebati za naše kasnije funkcije.

Korak 3: Funkcija "serial.begin"

The
The

Nazvat ćemo našu prilagođenu funkciju koja replicira funkciju "serial.begin" U0init (). Uzima željenu brzinu prijenosa kao ulaz i pokreće serijski port na toj brzini prijenosa.

Korak 4: Funkcija "serial.available"

The
The

Nazvat ćemo funkciju koja oponaša "serial.available" U0kbhit (). Ne uzima unos, već umjesto toga detektira je li došlo do promjene na tipkovnici pomoću bita statusa RDA i vraća vrijednost true kada se otkrije promjena.

Korak 5: Funkcija "serial.read"

The
The

Nazvat ćemo funkciju koja oponaša funkciju "serial.read" U0getchar (), koja ne uzima ulaz i ne emitira sve promjene napravljene na tipkovnici, koja je pohranjena u registru UDR0.

Korak 6: Funkcija "serial.write"

The
The

Nazvat ćemo funkciju koja imitira "serial.write" U0putchar (), koja uzima podatke iz registra UDR0 dok se promjena detektira i pohrani, i izlazi natrag na serijski monitor.

Korak 7: Funkcija postavljanja

Funkcija postavljanja
Funkcija postavljanja

Ovo je osnovna funkcija postavljanja koja će koristiti našu imitaciju "serial.begin" za inicijalizaciju serijskog porta, te će inicijalizirati naše postavke bita za vremenske registre i postaviti PB6 da emitira naše tonove.

Korak 8: Funkcije petlje i ISR

Petlje i ISR funkcije
Petlje i ISR funkcije

Petlja funkcionira na sljedeći način: ako se promjena otkrije pomoću naše funkcije "serial.available", naša funkcija "serial.read" pohranjuje tu promjenu, a funkcija "serial.write" tu promjenu stavlja u serijski monitor. Sve dok je varijabla i manja od veličine frekvencijskog niza, ona će postaviti izlaz na položaj i u tom nizu, ispisujući frekvenciju na tom položaju. ISR funkcionira kao reset, gdje ako položaj polja frekvencija nije jednak 0 (drugim riječima ako "q" nije pritisnut), on će emitirati frekvenciju, ali kada se pritisne "q", to će se poništiti. Napomena: ovaj kôd koristi prekide, ali to se može učiniti i s onemogućenim prekidima. Objavit ću kôd bez prekida ako dobijem bilo kakav zahtjev za njega, samo mislim da je verzija s prekidom zabavnija.

Korak 9: Ožičenje

Ožičenje
Ožičenje

Ožičenje za ovaj kôd iznimno je jednostavno, jednostavno spojite izlaznu žicu s PB6 na ploču, spojite zujalicu ili zvučnik u nizu s tim i spojite je natrag na masu. Napomena: ako koristite zvučnik, stavite mali otpornik ispred zvučnika. Ako samo želite vidjeti izlaz, ali ga ne čuti, samo spojite PB6 na crveni kabel osciloskopa, a crni kabel na masu.

Korak 10: Spojite sve zajedno

Ovom koraku sam dodao cijeli kôd jer sam u prethodnim koracima objasnio sve njegove dijelove. Potreban je samo unos tipkovnice za različite frekvencije i odašilje tu frekvenciju na PB6. Nadam se da ste uživali čitajući drugačiji način kodiranja s IDE -om!

Također, glasajte za ovo na natjecanju Mikrokontroler: D

Preporučeni: