Obsah:
- Krok 1: Definování registračních adres
- Krok 2: Pole a globální proměnné
- Krok 3: Funkce „serial.begin“
- Krok 4: Funkce „serial.available“
- Krok 5: Funkce „serial.read“
- Krok 6: Funkce „serial.write“
- Krok 7: Funkce nastavení
- Krok 8: Funkce Loop a ISR
- Krok 9: Zapojení
- Krok 10: Dát to všechno dohromady
Video: Generátor tónů Arduino bez knihovny nebo sériových funkcí (s přerušením): 10 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
Není to něco, o čem bych normálně dělal instruktáž, dávám přednost své kovoobrábění, ale jelikož jsem student elektrotechniky a musím absolvovat třídu mikrokontrolérů (Embedded Systems Design), řekl jsem si, že bych instruktáž vytvořil na jeden z mých projektů. Když jsem původně vytvořil projekt a další pro tuto třídu, zjistil jsem, že existuje velmi málo až žádné výukové programy, které nepoužívají funkce knihovny arduino nebo sériové funkce, což je další důvod, proč jsem si myslel, že by to byl dobrý návod.
Tento kód je určen pro mikrokontrolér Atmega 2560, takže pokud jej chcete implementovat na jinou desku, budete muset změnit registry adres v kódu na základě uživatelské příručky k ovladačům. Základní myšlenkou kódu je, že kdykoli zadáte klávesu na klávesnici do sériového monitoru, arduino mega vydá určitou frekvenci podle toho, jakou klávesu stisknete, s resetováním „q“. Udělal jsem to tak, že „a“bude vysílat plochou frekvenci A a „A“bude produkovat ostrou frekvenci A, „b“bude vydávat B plochý, „c“pro C plochý, „C“pro ostrý C a tak dále. Úplný kód je nahrán na konci, ale každý krok rozdělí kód na kousky, takže je snazší to vysvětlit.
Krok 1: Definování registračních adres
Tento krok je snadný, pokud používáte atmega 2560, stačí použít adresy, které jsem použil, ačkoli pokud používáte desku s jiným čipem, budete muset najít adresy pro každý z těchto registrů ve vašem uživatelská příručka čipů. Definice nahoře jsou jen konstanty, které budou později použity pro naše funkce. Adresy určujeme jako volatilní bez znaménka, protože nechceme, aby si s nimi kompilátor pohrával.
Krok 2: Pole a globální proměnné
Zde chceme definovat pole Frequency, které bude obsahovat všechny frekvence, které by měl každý klíč vydávat. Tyto hodnoty jsou vypočítány ze skutečných frekvencí not a upřímně jsem zapomněl, jak jsem je získal, ale jsou to správné hodnoty, protože jsem je pro jistotu testoval na osciloskopu. Rovněž definujeme pole not, které obsahuje všechny klávesy, které je třeba stisknout pro každý tón, a také proměnné, které budeme potřebovat pro naše pozdější funkce.
Krok 3: Funkce „serial.begin“
Vlastní funkci, která replikuje funkci „serial.begin“, zavoláme U0init (). Jako vstup vezme požadovanou přenosovou rychlost a spustí sériový port na této přenosové rychlosti.
Krok 4: Funkce „serial.available“
Funkci imitující „serial.available“nazveme U0kbhit (). Nepotřebuje vstup, ale místo toho detekuje, zda došlo ke změně na klávesnici pomocí stavového bitu RDA, a vrátí true, když je změna detekována.
Krok 5: Funkce „serial.read“
Funkci imitující funkci „serial.read“nazveme U0getchar (), která nebere žádný vstup a nevydává žádnou změnu provedenou na klávesnici, která je uložena v registru UDR0.
Krok 6: Funkce „serial.write“
Zavoláme funkci, která napodobuje „serial.write“U0putchar (), která bere data z registru UDR0, když je změna detekována a uložena, a výstupy, které se mění zpět na sériový monitor.
Krok 7: Funkce nastavení
Toto je základní funkce nastavení, která k inicializaci sériového portu použije naši imitaci „serial.begin“a inicializuje naše nastavení bitů pro registry časovačů a nastaví PB6 na výstup našich tónů.
Krok 8: Funkce Loop a ISR
Smyčka funguje takto: pokud je detekována změna s naší funkcí „serial.available“, naše funkce „serial.read“tuto změnu uloží a naše funkce „serial.write“tuto změnu umístí do sériového monitoru. Dokud je proměnná i menší než velikost frekvenčního pole, nastaví výstup na pozici i v tomto poli a vydá frekvenci v této poloze. ISR funguje jako reset, kde pokud se pozice frekvenčního pole nerovná 0 (jinými slovy, pokud není stisknuto „q“), vydá frekvenci, ale když se stiskne „q“, resetuje se. Poznámka: tento kód používá přerušení, ale lze to provést s vypnutými přerušeními. Pokud dostanu nějaké požadavky, kód zveřejním bez přerušení, jen si myslím, že verze přerušení je zábavnější.
Krok 9: Zapojení
Zapojení pro tento kód je velmi snadné, jednoduše připojte výstupní vodič z PB6 na prkénko, zapojte do série bzučák nebo reproduktor a připojte jej zpět k zemi. Poznámka: pokud používáte reproduktor, vložte před něj malý odpor. Pokud chcete výstup pouze vidět, ale neslyšet, připojte PB6 k červenému vodiči osciloskopu a černý vodič k zemi.
Krok 10: Dát to všechno dohromady
K tomuto kroku jsem přidal úplný kód, protože jsem v předchozích krocích vysvětlil všechny jeho části. Stačí jen vstup klávesnice pro různé frekvence a výstupy této frekvence do PB6. Doufám, že jste si užili čtení jiného způsobu kódování pomocí IDE!
Také pro to prosím hlasujte v soutěži o mikrořadič: D
Doporučuje:
Programování Arduina pomocí jiného Arduina pro zobrazení posouvaného textu bez knihovny: 5 kroků
Programování Arduina pomocí jiného Arduina pro zobrazení posouvaného textu bez knihovny: Sony Spresense nebo Arduino Uno nejsou tak drahé a nevyžadují mnoho energie. Pokud má však váš projekt omezení výkonu, prostoru nebo dokonce rozpočtu, můžete zvážit použití Arduino Pro Mini. Na rozdíl od Arduino Pro Micro, Arduino Pro Mi
Dekodér protokolu dálkového ovládání RC5 bez knihovny: 4 kroky
Dekodér protokolu RC5 dálkového ovládání bez knihovny: před dekódováním rc5 nejprve probereme, co je příkaz rc5 a jaká je jeho struktura. takže v zásadě příkaz rc5 používaný v dálkových ovladačích, které se používají v televizorech, přehrávačích CD, d2h, systémech domácího kina atd., má 13 nebo 14 bitů uspořádaných v
Běh bez obrazovky / displeje (bez hlavy) na Raspberry Pi nebo jiných počítačích založených na Linuxu / unixu: 6 kroků
Běh bez obrazovky / displeje (bez hlavy) na Raspberry Pi nebo jiných počítačích založených na Linuxu / unixu: Když si většina lidí koupí Raspberry PI, myslí si, že potřebují obrazovku počítače. Nevyhazujte peníze za zbytečné počítačové monitory a klávesnice. Neztrácejte čas přesunem klávesnic a monitorů mezi počítači. Nezapínejte televizi, když není
Tlačítko STM32CubeMX Debounce s přerušením: 5 kroků
Odbití tlačítka STM32CubeMX s přerušením: Dobrý den, v tomto tutoriálu se pokusím poskytnout jednoduché řešení, jak zabránit odrazu tlačítka, což je velmi závažný problém. Na internetu existuje mnoho videí, která nabízejí řešení tohoto problému, ale žádná z nich pro externí přerušení. U všech těchto videí tlačítko
Nulový chladič / stojan na notebook (bez lepidla, bez vrtání, bez matic a šroubů, bez šroubů): 3 kroky
Nulový chladič / stojan na notebook (bez lepidla, bez vrtání, bez matic a šroubů, bez šroubů): AKTUALIZACE: PROSÍM KINDLY HLASUJTE ZA MOJE POUČENÍ, DĚKUJI ^ _ ^ MŮŽETE TAKÉ JINÉ VSTUPTE NA www.instructables.com/id/Zero-Cost-Aluminium-Furnace-No-Propane-No-Glue-/ NEBO MŮŽETE HLASOVAT O MÉ NEJLEPŠÍ PŘÁTELE