
V prejšnji številki revije smo se lotili izdelave analognega generatorja binauralnega nihanja. Logično nadaljevanje projekta je seveda izdelava digitalnega generatorja. Analogni generator sicer deluje čisto v redu. Maksimalna frekvenca na izhodu OC0A je enaka polovici frekvence takta.
Frekvenca signala na izhodu OC0A je definirana z naslednjo enačbo:
fOC0A = fclk / (2*N*(1+OCR0A)) .....................E1
N - preskaler faktor (1, 8, 64, 256, 1024)

Sedaj lahko izračunamo, katero vrednost je potrebno vpisati v register OCR0A, da bo na izhodu frekvenca 220 Hz. Iz zgornje enačbe izpeljemo:
OCR0A = (fclk / (2*N* fOC0A)) - 1 ....E2
Vrednost preskalerja določimo na 256, frekvenca takta je 8 MHz.
Iz zgornjih podatkov dobimo vrednost registra OCR0A = 70,0227. V izhodni primerjalni register OCR0A lahko vpišemo celoštevilčno vrednost 70. Če še enkrat preračunamo izhodno frekvenco za celoštevilčno vrednost 70, dobimo fOC0A = 220,07 Hz.
Poglejmo še, kakšen korak dobimo z 8-bitnim timerjem pri danih nastavitvah.
Če vpišemo v register OCR0A za 1 manjšo vrednost, torej OCR0A = 69, dobimo na izhodu OC0A frekvenco 223,21 Hz. Torej, korak je nekaj več kot 3 Hz, zato je za manjši korak potrebno uporabiti 16-bitni timer.
Za generiranje spremenljive frekvence s korakom 1 Hz sem uporabil 16-bitni timer1, ki generira pravokotni signal na izhodu OC1A (PIN15). Tudi ta timer mora delovati v CTC načinu, zato je potrebno pravilno vpisati vrednosti v naslednje registre:
Timer/Counter Control Register A - TCCR1A,
Timer/Counter Control Register B - TCCR1B,
Output Compare Register A - OCR1A.
Celotni članek: 161_24-29
Binauralika – generator binauralnega nihanja (3)
2009_SE161_24
