Obsah:

Generátor tónov Arduino bez knižnice alebo sériových funkcií (s prerušeniami): 10 krokov
Generátor tónov Arduino bez knižnice alebo sériových funkcií (s prerušeniami): 10 krokov

Video: Generátor tónov Arduino bez knižnice alebo sériových funkcií (s prerušeniami): 10 krokov

Video: Generátor tónov Arduino bez knižnice alebo sériových funkcií (s prerušeniami): 10 krokov
Video: Start Using Wemos D1 Mini NodeMCU WiFi ESP8266 module with Arduino 2024, November
Anonim
Generátor tónov Arduino bez knižnice alebo sériových funkcií (s prerušeniami)
Generátor tónov Arduino bez knižnice alebo sériových funkcií (s prerušeniami)

Nie je to niečo, o čom by som bežne robil inštruktáž, uprednostňujem kovovýrobu, ale keďže som študent elektrotechniky a musím sa zúčastniť kurzu mikrokontrolérov (návrh vstavaných systémov), myslel som si, že by som mohol inštruovať jeden z mojich projektov. Keď som pôvodne robil projekt a ďalšie pre túto triedu, zistil som, že existuje veľmi málo alebo žiadny návod, ktorý by nepoužíval funkcie knižnice arduino alebo sériové funkcie, čo je ďalší dôvod, prečo som si myslel, že by to bol dobrý návod.

Tento kód je určený pre mikrokontrolér Atmega 2560, takže ak ho chcete implementovať na inú dosku, budete musieť zmeniť registre adries v kóde na základe používateľskej príručky k svojim ovládačom. Základnou myšlienkou kódu je, že kedykoľvek zadáte kláves na klávesnici do sériového monitora, arduino mega bude vydávať určitú frekvenciu na základe toho, aké tlačidlo stlačíte, pričom „q“sa resetuje. Urobil som to tak, že „a“bude produkovať plochú frekvenciu A a „A“bude produkovať ostrú frekvenciu A, „b“bude produkovať B plochý, „c“pre C plochý, „C“pre ostrý C a podobne. Úplný kód sa nahrá na konci, ale každý krok kód rozloží na kúsky, takže je jednoduchšie ho vysvetliť.

Krok 1: Definovanie registračných adries

Definovanie registračných adries
Definovanie registračných adries

Tento krok je jednoduchý. Ak používate atmega 2560, stačí použiť adresy, ktoré som použil. Ak však používate dosku s iným čipom, budete musieť nájsť adresy pre každý z týchto registrov vo svojom návod na obsluhu čipov. Definície v hornej časti sú len konštanty, ktoré budú neskôr použité pre naše funkcie. Adresy určujeme ako prchavé bez znamienka, pretože nechceme, aby si s nimi prekladač zahrával.

Krok 2: Polia a globálne premenné

Polia a globálne premenné
Polia a globálne premenné
Polia a globálne premenné
Polia a globálne premenné
Polia a globálne premenné
Polia a globálne premenné

Tu chceme definovať pole frekvencií, ktoré bude obsahovať všetky frekvencie, ktoré by mal každý kľúč vydávať. Tieto hodnoty sa vypočítavajú zo skutočných frekvencií poznámok a úprimne som zabudol, ako som ich získal, ale sú to správne hodnoty, pretože som ich pre istotu testoval na osciloskope. Definujeme tiež pole poznámok, ktoré obsahuje všetky klávesy, ktoré je potrebné stlačiť pre každý tón, a tiež premenné, ktoré budeme potrebovať pre svoje ďalšie funkcie.

Krok 3: Funkcia „serial.begin“

The
The

Našu vlastnú funkciu, ktorá replikuje funkciu „serial.begin“, nazveme U0init (). Ako vstup vezme požadovanú prenosovú rýchlosť a spustí sériový port pri tejto prenosovej rýchlosti.

Krok 4: Funkcia „serial.available“

The
The

Funkciu imitujúcu „serial.available“nazveme U0kbhit (). Nevyžaduje vstup, ale namiesto toho zisťuje, či došlo k zmene na klávesnici pomocou stavového bitu RDA, a pri zistení zmeny vráti hodnotu true.

Krok 5: Funkcia „serial.read“

The
The

Funkciu napodobňujúcu funkciu „serial.read“nazveme U0getchar (), ktorá nevyžaduje vstup a výstupy, bez ohľadu na to, aká je zmena vykonaná na klávesnici, ktorá je uložená v registri UDR0.

Krok 6: Funkcia „serial.write“

The
The

Funkciu imitujúcu „serial.write“nazveme U0putchar (), ktorá pri zistení a uložení zmeny preberá údaje z registra UDR0, a výstupy, ktoré sa zmenia späť na sériový monitor.

Krok 7: Funkcia nastavenia

Funkcia nastavenia
Funkcia nastavenia

Toto je základná inštalačná funkcia, ktorá použije našu imitáciu „serial.begin“na inicializáciu sériového portu a inicializuje naše nastavenia bitov pre registre časovača a nastaví PB6 na výstup našich tónov.

Krok 8: Slučky a funkcie ISR

Funkcie slučky a ISR
Funkcie slučky a ISR

Smyčka funguje takto: ak je pomocou funkcie „serial.available“zistená zmena, naša funkcia „serial.read“túto zmenu uloží a funkcia „serial.write“vloží túto zmenu do monitora sériového čísla. Pokiaľ je premenná i menšia ako veľkosť frekvenčného poľa, nastaví výstup tak, aby bol v tomto poli polohou i, pričom frekvencia bude v tejto polohe vystupovať. ISR funguje ako reset, kde ak sa pozícia frekvenčného poľa nerovná 0 (inými slovami, ak nie je stlačené „q“), bude vydávať frekvenciu, ale keď sa stlačí „q“, resetuje sa. Poznámka: tento kód používa prerušenia, ale dá sa to urobiť aj s vypnutým prerušením. Kód pošlem bez prerušenia, ak k nemu dostanem nejaké požiadavky, len si myslím, že verzia prerušenia je zábavnejšia.

Krok 9: Zapojenie

Elektrické vedenie
Elektrické vedenie

Zapojenie tohto kódu je veľmi jednoduché, jednoducho zapojte výstupný vodič z PB6 na nepájivú dosku, zapojte do série bzučiak alebo reproduktor a zapojte ho späť na zem. Poznámka: ak používate reproduktor, pred reproduktor vložte malý odpor. Ak chcete len vidieť výstup, ale nepočuť ho, stačí pripojiť PB6 k červenému vodiču osciloskopu a čiernemu vodiču k zemi.

Krok 10: Dajte to všetko dohromady

K tomuto kroku som pridal úplný kód, pretože som v predchádzajúcich krokoch vysvetlil všetky jeho časti. Stačí vstup klávesnice pre rôzne frekvencie a výstupy tejto frekvencie do PB6. Dúfam, že ste si užili čítanie iného spôsobu kódovania pomocou IDE!

Tiež za to prosím hlasujte v súťaži o mikrokontrolér: D

Odporúča: