Obsah:
- Krok 1: Definovanie registračných adries
- Krok 2: Polia a globálne premenné
- Krok 3: Funkcia „serial.begin“
- Krok 4: Funkcia „serial.available“
- Krok 5: Funkcia „serial.read“
- Krok 6: Funkcia „serial.write“
- Krok 7: Funkcia nastavenia
- Krok 8: Slučky a funkcie ISR
- Krok 9: Zapojenie
- Krok 10: Dajte to všetko dohromady
Video: Generátor tónov Arduino bez knižnice alebo sériových funkcií (s prerušeniami): 10 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
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
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é
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“
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“
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“
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“
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
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
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
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:
Generátor funkcií: 12 krokov (s obrázkami)
Generátor funkcií: Tento návod popisuje návrh generátora funkcií na základe analógového integrovaného obvodu MAX038 spoločnosti Maxims. Generátor funkcií je veľmi užitočný nástroj pre šialených elektronikov. Je potrebný na ladenie rezonančných obvodov, testovanie aud
Prenosný generátor funkcií pre WiFi a Android: 10 krokov
Prenosný generátor funkcií pre WiFi a Android: Na konci 20. storočia sa objavili rôzne technologické inovácie, najmä v oblasti komunikácie; ale nielen. Používatelia, spotrebitelia a inžinieri pre nás prišli na svetlo rýchleho vývoja elektronických zariadení, ktoré nám môžu život
DIY generátor funkcií s STC MCU ľahko: 7 krokov (s obrázkami)
DIY generátor funkcií s STC MCU ľahko: Toto je generátor funkcií vyrobený s MCU STC. Potrebujete iba niekoľko komponentov a obvod je jednoduchý. Špecifikácia Výstup: Jednokanálová štvorcová krivka Frekvencia: 1 Hz ~ 2 MHz Frekvencia sínusového priebehu: 1 Hz ~ 10 kHz Amplitúda: VCC, asi 5V zaťaženie
Programovanie Arduina pomocou iného Arduina na zobrazenie posúvajúceho sa textu bez knižnice: 5 krokov
Programovanie Arduina pomocou iného Arduina na zobrazenie posúvajúceho sa textu bez knižnice: Sony Spresense alebo Arduino Uno nie sú také drahé a nevyžadujú veľa energie. Ak má však váš projekt obmedzenie výkonu, priestoru alebo dokonca rozpočtu, mali by ste zvážiť použitie Arduino Pro Mini. Na rozdiel od Arduino Pro Micro, Arduino Pro Mi
Generátor jednoduchých funkcií: 5 krokov
Generátor jednoduchých funkcií: V mojom poslednom návode som vám ukázal, ako vytvoriť generátor signálu pwm, a použil som ho na filtrovanie niektorých ďalších priebehov. V tomto návode vám ukážem, ako vytvoriť jednoduchý generátor funkcií/frekvencií, ako s ním poháňať relé a ako