Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:synchro-wav

Toto je starší verze dokumentu!


Úvod

Synchronní přehrávání zvukových stop se řeší od dob, kdy započalo spojování různorodých médií, schopných uchovat určitou kontinuitu času. Dlouho si vědci a techniční pracovníli lámali hlavu nad tím, jak synchronizovat zvuk s filmovým vyprávěním. Zkoušela se spojení hřídele motoru filmového projektoru s pohonem gramofonu na šelakové desky, dlouhou dobu bylo právě mechanické spojení pohonů tou jedinou možnou cestou maximální synchronizace.

Filmoví amatéři kdysi zasahovali do konstrukcí kotoučových magnetofonu, čítali rychlost posuvu filmu ve svém projektoru a převáděli ji na ss napětí, kterým ovlivňovali tovární nastavení chodu pardubického kotoučáku.

S nástupem digitální technologie se jednoduché fyzické ovlivňování rychlosti čtení media ztratilo někde v propasti dějin (dnešní děti už si zřejmě nepustí z legrace gramofonovou pohádku místo na 45 ot./min s rychlostí 33,3 ot./min., aby proměnili ráskosníčka na mužného štamgastu páté cenové). Avšak stále existuje početná komunita, která se o výdobytky analogového světe nechce nechat připravit, ba naopak, chtějí si staré technologie vyzkoušet. Proto se, především v Praze, uskutečňuje řada analogových projekcí nezávislých filmařů z celého světa - a všichni řeší stále stejný problém - jak přehrát externí zvuk sychnronně, i se zkreslením, které zavádí nestálý chod starého projektoru. Tato práce nastiňuje cestu, kterou lze právě starý kotoučový magnetofon simulovat. Digitální technika se ubírá směrem maximální přesnosti plnění daných norem. Dostupné DA převodníky k těmto nápadům a potřebám uměleckého světa nejsou zrovna přívětivé. Vyzkoušel jsem si to sám při lámání své hlavy nad tím, jak převodník CS43L22 donutit k nesynchronicitě a jiné, než tabulkové rychlosi DA převodu.

O zavrženíhodném DAC CS43L22

Pro pochopení možností i omezení tohoto převodníku je vhodné prolistovat dokumentaci: http://www.cirrus.com/en/pubs/proDatasheet/CS43L22_F2.pdf

Veškerá možná nastavení DA převodu nalezneme na straně 29. Konfiguraci je možno načíst i zapsat po sběrnici I2C do registrů 05h a 06h. Rychlost DA převodu lze standardně, bohužel, jak je vidno na str. 29, přepínat pouze po velkých skocích. Můžeme tedy přepnout převodník do modu SLAVE, kdy má přejímat referenční masterclock po sběrnici I2S (MCLK), od MCLK jsou generovaný BCLK, i LRCLK, takže by v rozladění frekvence převodu problém být neměl. Cesta řešení úlohy změnou hodin DAC se však při hlubším ponoření do tématu ukázala jako slepá. Parametry lze totiž měnit pouze při vypnutém PLL.

Stál jsem před rozhodnutím, zda to nějak obejít programově a vytvořil hybrid, který stejně nedosáhne tíženého výsledku, nebo se poohlížet po jiném převodníku. Nejčistším řešením by bylo užití obyčejného průmyslového převodníku, který je natvrdo řízen externí frekvencí - jak rychle posíláme data, tak rychle je dalším kontrolním vstupem odpalujeme v napěťové úrovni ven. Mě se však čas krátil a musel jsem vařit z toho, co se v mém bydlišti nabízelo. Přes studium zvukové tvorby na FAMU stále formálně pracuji pro opavskou Tipu, v tamní sekci vývoje jsem posbíral (i vypájel), co dům dal a hlavně uloupil obvod VS1053, připravený pro vývoj nové stavebnice MP3 playeru. Díky CNC vrtačce, kterou vývojové odd. disponuje, bylo možné okamžitě nafrézovat plošný spoj a vrhnout se s rukama nezasviněnýma od chloridu do práce.

Jelikož se zde pracuje především s ARM procesory od NXP a já sám jsem už měl za sebou projekty na řízení galvo systému skrze moduly lpcxpresso, tedy vývojové prostředí od NXP je mi bližší, napsal jsem kód nakonec v prostředí Code Red 4 a použil procesor LPC1769.

O báječném kodeku VS1053 s interním DAC

Datasheet: http://www.vlsi.fi/fileadmin/datasheets/vs1053.pdf

Pokud bychom použili jednoduchý průmyslový převodník, museli bychom řešit změnu rychlosti posílaných dat k dekódování. Kodek VS1053 však obsahuje 32B buffer, jehož vyprázdnění (schopnost pojmout alespoň 32B) je indikováno na pinu DREQ hodnotou log. 1. DREQ je přepnut do log. 0, pokud je buffer dostatečně zaplněn.

Data se tak do kodeku posílají na vyžádání, vyšší rychlostí, než jakou probíhá samotné dekódování. Díky tomu neřešíme přesné dávkování dat o frekvenci, která by byla řízena vnější zdrojem referenční frekvence. Kodek navíc podporuje i spoustu jiných formátů, je možné tak synchronní přehrávač rozvinout do podoby, kdy akceptuje jakýkoli formát tímto kodekem zpracovatelný. Podle hlavičky přehrávaného souboru kodek rozpozná parametry i typ záznamu, který přijímá na svém datovém vstupu.

Komunikace mezi procesorem a kodekem probíhá po rozhraní SPI, rychlost dekódování pak můžeme ovlivnit pomocí registru SCI_CLOCKF. Užití externího zdroje frekvence namísto krystalu se v dokumentaci obvodu výslovně zakazuje.

2014/synchro-wav.1421582094.txt.gz · Poslední úprava: 2015/01/18 12:54 autor: Richard Vacula