Operácie

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.

Vývojová doska ACROB.

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.

Celkový pohľad na zariadenie.

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.

Schéma zapojenia.


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.

Aplikácia.

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.