Prehrávač melódie s ovládaním
Zo stránky SensorWiki
Záverečný projekt predmetu MIPS / LS2026 - Miroslav Klein
Zadanie
Cieľom tohto zadania je realizácia mikropočítačového prehrávača melódií. Toto zadanie vyžaduje kontrolované prehrávanie melódií z poľa, čo znamená že k zariadeniu sú pripojené aj tri tlačidlá Play/Stop/Next pre obsluhu. Zadanie slúži na demonštráciu práce s časovačmi, generovanie signálu a spracovanie vstupov od používateľa.

Literatúra:
Analýza a opis riešenia
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.

Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.

Algoritmus a program
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto...
Projekt je realizovaný na vývojovej doske Arduino Uno s mikrokontrolérom ATmega328P. Mikrokontrolér pracuje s frekvenciou 16 MHz, čo je definované makrom F_CPU 16000000UL na začiatku programu. Táto hodnota je kľúčová pre všetky časové výpočty v projekte, najmä pre generovanie zvukových frekvencií a oneskorenia.
Pre generovanie hudobných tónov sa využíva 8-bitový časovač Timer0 v režime CTC. Tento režim je nastavený bitom WGM01 v registri TCCR0A (WGM01=1, WGM00=0). V CTC režime sa časovač TCNT0 zvyšuje každý takt hodinového signálu po aplikácii preddeličky. Keď hodnota časovača dosiahne hodnotu uloženú v registri OCR0A, dôjde k zhode, časovač sa automaticky vynuluje a zároveň sa môže vykonať akcia na výstupnom pine PD6.
Preddelička: V registri TCCR0B je nastavený bit CS02, čo znamená preddeličku 256. Timer0 sa teda zvyšuje každých 256 taktov CPU.
Výstupný pin a signál: Výstupný pin je PD6. Bit COM0A0 v registri TCCR0A zapína režim toggle – pri každej zhode sa logická úroveň pinu PD6 prepne (z 0 na 1 alebo z 1 na 0). Tým sa generuje obdĺžnikový signál s presnou frekvenciou určenou hodnotou OCR0A.
Štruktúra melódií Každá melódia je definovaná pomocou troch premenných – dvoch polí a jednej konštanty: Pole sX_t[] obsahuje hodnoty OCR0A, ktoré určujú výšku jednotlivých tónov Pole sX_c[] obsahuje trvanie jednotlivých tónov v milisekundách Premenná sX_len udáva celkový počet tónov v melódii Táto štruktúra umožňuje jednoduché pridávanie nových melódií bez nutnosti zásahu do hlavného algoritmu prehrávania. V projekte sú definované tri melódie: s0, s1 a s2.
Pre ovládanie prehrávača slúžia tri tlačidlá pripojené na port D mikrokontroléra. V programe sú zapnuté interné pull-up rezistory príkazom PORTD |= (1 << PD2) | (1 << PD3) | (1 << PD4). Bez stlačenia tlačidla sú piny vďaka pull-upu v stave HIGH (5V). Stlačením tlačidla sa pin pripojí k zemi (GND) a program detekuje stav LOW.
Funkcia hraj_ton(int hodnota, int trvanie) realizuje tri kľúčové úlohy. 1. Nastavenie frekvencie a zapnutie výstupu: Ak je parameter hodnota nenulový a prehrávanie je povolené, nastaví sa register OCR0A na požadovanú hodnotu a zapne sa toggle mód na pine PD6. Ak je hodnota nulová alebo prehrávanie je zastavené, výstup sa vypne. 2. Čakanie s kontrolou tlačidiel: Namiesto jedného dlhého oneskorenia sa používa cyklus s krokmi 10 ms. Celkové trvanie tónu sa rozdelí na intervaly po 10 ms, pričom v každom kroku sa skontroluje stav tlačidiel. 3. Debouncing a detekcia tlačidiel: V cykle sa kontroluje stav tlačidiel STOP, PLAY a NEXT. Pri detekcii stlačenia sa vykoná príslušná akcia Výpis kódu je nižšie...
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
#include <avr/io.h>
void adc_init(void); // A/D converter initialization
unsigned int adc_read(char a_pin);
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:
Zdrojový kód: zdrojaky.zip
Overenie
Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku hotového zariadenia.

Video:
Čo by som urobil inak
Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak.
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.