DomovRevijaBinauralika - generator binauralnega nihanja (3)

Binauralika – generator binauralnega nihanja (3)

KLIK za povečavo

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)
Slike ni
Povečava

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