Akordy s procesorom AVR: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 40: | Riadok 40: | ||
Register OCR0A je priamo napojený na katódu (pozitívnu nožičku) pasívneho meniča. Anóda meniča je pripojená na zem. Do registra OCR0A však nemôžem v AVR kóde napísať skutočnú frekvenciu zvuku ako mechanického vlnenia v prírode, ale treba ju prepočítať. Tento prepočet je daný jednoduchým vzťahom: | Register OCR0A je priamo napojený na katódu (pozitívnu nožičku) pasívneho meniča. Anóda meniča je pripojená na zem. Do registra OCR0A však nemôžem v AVR kóde napísať skutočnú frekvenciu zvuku ako mechanického vlnenia v prírode, ale treba ju prepočítať. Tento prepočet je daný jednoduchým vzťahom: | ||
[[Obrázok:vzorec_na_vypocet_frekvencie_tonu_v_AVR.png| | [[Obrázok:vzorec_na_vypocet_frekvencie_tonu_v_AVR.png|100px|center|Forma rozpoloženia podregistrov v registroch TCCR0A a TCCR0B.]] | ||
Verzia z 20:19, 7. máj 2024
Záverečný projekt predmetu MIPS / LS2024 - Kristián Pauliny
Zadanie
Naprogramujte nejakú pesničku aj s akordmi (využite skutočnosť, že procesor má až tri nezávislé časovače).
Literatúra:
Analýza a opis riešenia
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
Zapojenie, vypracovanie je inšpirované cvičením 5 – Generovanie tónov, kde sme dostali funkčný program, v ktorom stačilo len “naprogramovať melódiu“.
Hranie tónov cez AVR je založené na vstavaných perifériách – počítadlá v stave CTC (Clear Timer on Compare Match). Budem používať všetky 3 nezávislé počítadlá (T0, T1, T2) – konkrétne ich výstupy OC0A, OC1A, OC2A (Output Compare Register) na riadenie výšky tónov. Nastavenie počítadiel vysvetlím konkrétne ako pre počítadle T0 – po pochopení jedného sa proces dá zopakovať aj pri ostatných.
Počítadlo T0 je 8-bitové. Cez registre TCCR0A a TCCR0B (Timer/Counter control register) možno nastaviť jeho preddeličku, PWM mód a hlavne režim generovania priebehu. Do TCCR0A a TCCR0B ide číslo ktorým nastavujeme počítadlo (8-miestny kód v binárnej sústave alebo to isté číslo prepočítané do inej sústavy). Viem, že potrebujem pre počítadlo nastaviť:
- Toggle OC0A on compare match – oživiť register OC0A - Normal port operation, OC0B disconnected – register OC0B nechať vypnutý - CTC – režim počítadla Clear Timer on Compare Match - Preddelička 256 – ako “rýchlo“ má počítať
V tabuľkách DataSheetu dohľadám ako treba nastaviť podregistre COM0A1, COM0A0, COM0B1, COM0B0, WGM02, WGM01, WGM00, CS02, CS01, CS00 a zadám ich dokopy do registrov TCCR0A a TCCR0B podľa rozloženia: (obrázok)
Pre počítadlo T0 majú byť TCCR registre nastavené nasledovne: TCCR0A = 0b01000010; TCCR0A = 0b00000100; Register OCR0A je priamo napojený na katódu (pozitívnu nožičku) pasívneho meniča. Anóda meniča je pripojená na zem. Do registra OCR0A však nemôžem v AVR kóde napísať skutočnú frekvenciu zvuku ako mechanického vlnenia v prírode, ale treba ju prepočítať. Tento prepočet je daný jednoduchým vzťahom:
Nezabudnite doplniť schému zapojenia!
Algoritmus a program
Algoritmus programu je....
#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
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 záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.