Sadržaj:

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

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

Video: Arduino generator tonova bez biblioteke ili serijskih funkcija (sa prekidima): 10 koraka
Video: Самый простой генератор сигналов для лаборатории радиолюбителя от 1Гц до 2МГц 2024, Decembar
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 imao instrukcije, više volim svoje metalne radove, ali kako sam student elektrotehnike i moram pohađati predmet o mikrokontrolerima (Embedded Systems Design), mislio sam da ću napraviti instrukcije o jedan od mojih projekata. Kada sam izvorno napravio 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 osnovu 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 emitirati određenu frekvenciju ovisno o tome koju tipku pritisnete, s "q" resetiranjem. Napravio sam tako da će "a" izlaziti ravnu frekvenciju A, a "A" će izlaziti oštru frekvenciju A, "b" izlaziti B ravnu, "c" za C flat, "C" za C oštru itd. Cijeli kôd se učitava na kraju, ali svaki korak će razbiti kôd na komade kako bi ga bilo lakše objasniti.

Korak 1: Definiranje adresa registra

Definiranje adresa registra
Definiranje adresa registra

Ovaj korak je jednostavan, ako koristite atmega 2560, samo trebate koristiti 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 chips 'korisnički priručnik. Definicije na vrhu su samo konstante koje će se kasnije koristiti za naše funkcije. Određujemo adrese kao nestabilne bez potpisa jer ne želimo da se kompajler 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 svaki ključ treba emitirati. Ove su vrijednosti izračunate iz 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 su nam potrebne 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 imitira "serial.available" U0kbhit (). Ne uzima unos, već umjesto toga otkriva je li došlo do promjene na tipkovnici koristeći bit statusa RDA i vraća vrijednost true kada se otkrije promjena.

Korak 5: Funkcija "serial.read"

The
The

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

Korak 6: Funkcija "serial.write"

The
The

Pozvat ćemo funkciju koja imitira "serial.write" U0putchar (), koja uzima podatke iz registra UDR0 dok se promjena otkrije 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 registre tajmera i postaviti PB6 da emitira naše tonove.

Korak 8: Funkcije petlje i ISR

Loop i ISR funkcije
Loop 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 poziciju i u tom nizu, ispisujući frekvenciju na toj poziciji. 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 resetirati. 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 je izuzetno jednostavno, jednostavno stavite izlaznu žicu s PB6 na matičnu ploču, spojite zujalicu ili zvučnik u seriju s tim i spojite ih 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 vod osciloskopa, a crni 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 sa tastature za različite frekvencije i šalje tu frekvenciju u PB6. Nadam se da ste uživali čitajući drugačiji način kodiranja s IDE -om!

Takođe, glasajte za ovo na takmičenju Mikrokontroler: D

Preporučuje se: