Abych mohl lépe fungovat s replikou MK14 Cassette Interface, napsal jsem si pro PC jednoduchou utilitu pro převod binárních souborů na WAV, který pak můžu v pohodě přehrát z jakéhokoli audio přehrávače na PC nebo třeba mobilního telefonu. No a když už jsem byl v tom, upravil jsem i můj stávající firmware pro TZXDuino/CASDuino tak, aby korektně fungoval s MK14 Cassette Interface. Nebylo to tak jednoduché, jak jsem si zpočátku myslel.
Nejprve PC prográmek pro konverzi binárních souborů na WAV. Ten byl poměrně jednoduchý. WAV soubor vytvářím natvrdo mono 8-bitů, vzorkování 11025 Hz. Trochu se pokouším i nedělat natvrdo obdélníky, ale napodobit signál z kazeťáku, byť je to celkem jedno. MK14 Cassette Interface snese poměrně dost. Samozřejmě s vyměněným R6 za 2k4 nebo 2k7. Spustitelný soubor i se zdrojovými kódy si můžete stáhnout tady.
MK14WAV converter (sources and binary)
Projekt je vytvořený ve Windows ve Visual Studio 2015. Zkompilované binárky jsou Win32, takže by měly fungovat pod běžnými Windows, ale testoval jsem je jen ve Windows 10. Zdroják je fakt jednoduchý a myslím, že by neměl být problém to upravit pro cokoli jiného. Zvlášť pro kohokoli, kdo programuje lépe než já, což bude skoro každý .
Trochu složitější to bylo s úpravou kódu proTZXDuino/CASDuino na MK14Duino. Myslel jsem, že v podstatě změním jen výstupní pin a tím to zhasne. Protože jsem to ale nechtěl úplně odfláknout, přidal jsem i modulaci 1 kHz impulzy. Nejprve jsem se lehce zasekl na tom, že jsem si na desku Cassette Interface nezapojil napájení. To je fakt potřeba , bez ní mi z tranzistoru ani výstupu nic nelezlo. Ovšem ani po zapnutí napájení nefungovalo nahrávání správně. Trochu jsem se probíral nahranými daty a vzorek byl celkem patrný, vše bylo posunuté o jeden bit. Tak jsem se zaměřil na začátek přehrávání a bylo to jasné.
Na pinu 9 se mi před vlastním přehráváním udělal jakýsi “bordýlek”, který nahrávací rutina interpretovala jako jeden bit. Abych šetřil paměť, která je v Arduino Nano na hraně, napsal jsem rutinu tak, že se data přímo četly z SD karty a nevím proč, první datový přístup na SD kartu asi načte celý sektor a ze mně neznámého důvodu cvičí datovým pinem 9, přesto, že by ho neměl na nic potřebovat. To je samozřejmě pin, který je v TZXDuino/CASDuino zapojený na vstup zesilovače. Obětoval jsem tedy 256 bytů RAM a upravil rutinu, tak, aby nejprve načetla data ze souboru, pak 5 vteřin počkala a pak teprve zahájila přehrávání dat. Těch 5 vteřin je tam proto, aby měl uživatel čas zmáčknout GO na MK14. Samozřejmě se předpokládá, že ještě předtím si nachystáte na adresu 0FF9 adresu, kam program nahrát a adresu spuštění 007C. MK14Duino startovací adresu a žádost o GO napíše i na displej a těch 5 vteřin odpočítává. Celkem by mě zajímalo, jestli TZXDuino/CASDunio používá jiné knihovny, ale podle mně určitě nemá prostor na buffer dat, takže se taky musí data načítat přímo z SD karty. Navíc to přímé načítání určitě musí dělat i nějakou krpu v časování. Když bude čas, ještě na to mrknu, ale mám pocit, že nebude . Kdybyste se v tom někdo vrtali, budu rád za jakékoli hinty, úpravy, vylepšení, program je Public Domain, dělejte si s ním, co chcete. Stahovat můžete tady:
Jestli jsem to dobře pochopil, tak 1 bit trvá 25 ms, x 9 (se stopbitem) = 225 ms na Bajt? 40 bd?
1 bit trva cca 30 ms (32 ms nula a 28 ms jednicka), zadny start bity, zadny stop bity. Proste prijde nabezna hrana a 14 ms po ni se zmeri uroven. Easy peasy. Tj. nejakych
33 baudu. Tvuj klavesnicovy interface je urcite rychlejsi 😉
No to mě překvapilo, já tam mám 8 ms stisk, 4 oddech, tj 12 ms/KDK (klofanec do klávesnice), jeden bajt teda 36 ms to odpovídá cca 220 baudům