Nakresli si na papier sinusovku (alebo iny casovy signal).
Rozdel ju napriklad devatnastimi zvislimy ciarami rovnako od seba vzdialenymi.
Vzniknute “stlpceky” (malo by ich byt dvadsat) zarovnaj, tak aby Ti vznikli obdlzniky.
Najvyssiemu pridel precentualne nejaku hodnotu, napriklad 100.
Ak si neskor nakreslis sinusovku s mensou amplitudou, jej maximalna hodnota bude potom ina, napriklad 20.
Teraz tym stlpcekom prisud hodnotu v pomere s tou maximalnou hodnotou.
Ak by si si nakreslil trojuholnikovy signal (lahsie sa mi budu hodnoty z hlavy pocitat) a maximalnej hodnote si prisudil hodnotu 100%, ziskas hodnoty
h01=50
h02=60
h03=70
h04=80
h05=90
h06=100
h07=90
h08=80
h09=70
h10=60
h11=50
h12=40
h13=30
h14=20
h15=10
h16=0
h17=10
h18=20
h19=30
h20=40
Ak na generovanie signalu pouzijes 8b PWM (mohol by si pouzit vacsie alebo i mensie PWM, preto Ti to popisujem takto cez percenta
) to znamena, ze pocitadlo bude vzdy pocitat od 0 do 255 a ked dosiahne hodnotu v registry na to urcenom, na vystupe bude log.0, inak hodnota 1. Kludne to moze byt i negovane, v tomto priprade na tom nezalezi.
Vystupny signal bude vyzerat nejako takto (jedna perioda):
|~~~~|________|
Do registra pre PWM vloz hodnotu H = h01 * 255/100
Odpocitaj 5 period pocitadla PWM
Do registra pre PWM vloz hodnotu H = h02 * 255/100
Odpocitaj 5 period pocitadla PWM
…
…
Do registra pre PWM vloz hodnotu H = h20 * 255/100
Odpocitaj 5 period pocitadla PWM
a opakuj to stale dokola.
Na vystupe filtra (ten tam musi byt, aby do zosiku nesli “pazvuky” z nosnej PWM) budes pocut zvuk toho trojuholnika.
Ak odpocitas menej ako 5 period pocitadla PWM, ton bude mat vyssiu frekvenciu. Naopak, ak na rovnakej hodnote PWM zotrvas viac period, zakladna frekvencia bude nizsia.
Ak chces, aby vystupny signal bol tichsi, pouzi nasledovne
hodnoty h
h01=50
h02=52
h03=54
h04=56
h05=58
h06=60
h07=58
h08=56
h09=54
h10=52
h11=50
h12=48
h13=46
h14=44
h15=42
h16=40
h17=42
h18=44
h19=46
h20=48
Vystupny signal bude 5x tichsi.
Vsimni si, ze PWM nejde az na nulu. Preto tam musi byt ten filter (PP - pasmova prepust ), ktory nepusti jednosmernu zlozku a nepusti nosnu samotneho PWM.
Princip prehravania lubovolnych zvukov cez PWM je tvoreny presne na tomto principe.
Na “papier si nakreslis” cely zvukovy priebeh napriklad v dlzke 10 sekund. Rozdelis ho na tolko dielikov, aku najvyssiu frekvenciu chces preniest. Ak chces prenies (cize pocut v repraku) 10kHz, musis spravit minimalne 200.tisic (slovom dvesto tisic, nie iba sto tisic) stlpcekov. Dalsi postup je uplne identicky s hore popisanym.
Ale nastastie to nemusis robit na papieri, spravi to za Teba DA prevodnik. Ak chces preniest 10kHz, DA prevodnik musi stihat 20tisic prevodov za sekundu a Ty ich musis zachytavat a ukladat do pamate. Ak by sa Ti vsak do signalu na vstupe priplietli frekvencie vyssie ako 10kHz, budes ich pocut ako neprijemne nizke kmitocty. 11kHz ako 1kHz a tak podobne. O tom je shanon-kotelnikova teorema. Ak Ta to zaujima, tak googli.
Ukladat nasnimany zvuk cez DA by si mal v pohode zvladat.
Do AT45DBxxx mozes vlozit 256/512B v ramci jedneho pamatoveho bufera. Samotny zapis trva 4.5ms, ale pocas neho mozes plnit druhy bufer. Dobre vymysleny svab 
Bufer staci plnit 10ms. Pri 256B (pocitam bajt na vzorku pri 8b DA) sa dostavas 12.8 kHz (25.6ksps).
Tak Ti vznikne zaznam. Ale kludne pouzi zaznam i z nejakych CD. Napr. program Audacity Ti ho pomoze vhodne upravit, osekat a zarovnat.
No a taketo 8b sample (slovensky vzorky, ale to slovo sa mi tam hodi viac) mozes pouzit priamo ako hodnoty pre PWM. Na jednu vzorku by malo prebehnut viac period PWM kvoli lepsej realizovatelnosti vystupneho PP filtra. Ziaden filter nie je idealny a ma urcitu frekvencnu a fazovu charakteristiku. To je ale uz uplne ina kategoria problematiky.
Myslim, ze ak si na zaciatku skusis vygenerovat ten trojuholnik a budes sa trochu hrat s frekvenciami a amplitudami, posunies sa omnoho dalej v chapani problematiky.
Daj vediet ako Ti to ide.