Generování hudby na piezo měniči

Michal Vojtek, Vladimír Mejzlík, UREL, FEEC, VUT Brno
mvojtekcentrum.cz
tectionatlas.cz

Obsah:

  1. Úvod
  2. Realizace
  3. Závěr
  4. Literatura

Úvod

Cílem projektu bylo vytvořit fungující program, jež umožní generování hudby na piezoměniči připojeném vhodným způsobem k mikroprocesoru. Ideou bylo naprogramovat zdrojový kód co nejvíce univerzální, jež by nebyl omezen použitou taktovací frekvencí krystalu a obecně použitým hardwarem.

Realizace

Základem celého projektu je generování tónu o požadované frekvenci. Toho je dosaženo střídavým spínáním a rozpínáním elektroakustického měniče. Signál k němu přivedený má tedy tvar obdélníku se střídou 1:1. Frekvence s níž je vyvolávána změna stavu (sepnutí) musí být tedy dvakrát vyšší, než je požadovaná generovaná frekvence. Možností generování takového kmitočtu je u mikroprocesoru hned několik. Nejméně přesná a nejnáročnější na odlazení je varianta s použitím zpoždění, tzn. nejčastěji cyklů trvajících známý časový interval.

Mnohem výhodnější a přesnější je použití vlastního čítače/časovače, který je v mikroprocesoru integrován. I zde se nabízí několik cest řešení, vycházejících z možnosti využít velkého množství režimů čítače/časovače.

Tyto dvě varianty a mnohé další do hloubky rozebírá [1]. Z hudební teorie je zřejmé, že nota A4 je povážováná za základní, její frekvence je 440Hz, frekvenci dalších not je možné vypočíst ze vzorce f = 2^(n/12) × 440 Hz, kde n udává počet kroků, o které je námi požadovaná nota vzdálena od základní noty A4 (n může být i záporné pro noty níže A4).

Zdrojový kód je k dispozici zde. Je vhodně zakomentován a vzhledem k jednoduchosti je sem vložen jen základní popis:

Nebyly použity žádné „extra“ funkce. Do pole melodie[100] se zadávají jednoduché noty a doby těchto not. A to tak, že první se zadává „doba“ a následně „nota“. Výběr jednotlivých not a dob je tvořené pomoci ukazatele na jednotlivé adresy v tomto poli. Je důležité zachovat pořadí, nejprve „doba“ (reprezentovaná číslem) a potom „nota“ (reprezentovaná písmenem v anglickém hudebním zápisu (B=H)). Určení těchto parametrů se provádí pomoci příkazu SWITCH. Celá nota má čtyři doby a ta je reprezentována „1“. Půlová nota má dvě doby a ta je reprezentovaná „2“. Čtvrťová nota má jednu dobu a ta je reprezentovaná „4“. Následně je inkrementován ukazatel na pole a pomoci stejného příkazu je vybrána nota. Samotný proces trvání „doby“ je tvořen příkazem for. Zde se inkrementuje pomocná proměnná „pom“ do určité „doby“ která byla experimentálně zvolena a je definovaná na začátku programu. Taktéž konstanty pro generování zvolených not, respektive jim náležících frekvencí, jsou zvoleny experimentálně (meřením).

Závěr

Při řešení projektu bylo dosaženo základní funkčnosti programu a generování not, jakožto i přehrání celé skladby podle not definovaných základní stupnicí a dobou trvání noty (taktem). Nebylo dosaženo univerzálnosti a nezávislosti na taktovací frekvenci použitého hardware. Program sebekriticky označujeme jako holou kostru. To, kam jsme mířili, ale čeho jsme nedosáhli zvláště kvůli špatnému "time managementu" je shrnuto v následujících bodech. Ty také vyjadřují, kam by se projekt ubíral v případě jeho plného dokončení: Výše zmíněné body mohou být inspirací pro možné pokračovatele tohoto projektu.
Závěrem ještě jednou odkaz nazdrojový kód..

Literatura

[1] MATOUŠEK, D. Práce s mikrokontroléry ATMEL AVR - 4. díl. 1. vyd., Praha: BEN – technická literatura, 2006. 320 s. ISBN 80-7300-174-8.