Druhé pokračování popisu konstrukce Logického analyzátoru nás seznámí s inicializací analyzátoru a zprovozněním použitého SW. Mám-li říct pravdu, tak smekám před tím geniálním nápadem použít existující program. Při mé stupiditě bych se spíš vrhnul na psaní nového programu, než abych se zamyslel, jak to provedl autor.

1. Osazení DPS
Osazení DPS by nemělo činit žádné potíže, jen je třeba s předstihem rozvážit pořadí osazování součástek, abyste se vyhnuli práci s mikropájkou ve „složitém terénu“. Přidám pouze několik poznámek, které by mohly přijít vhod.
Resetovací obvod je možné bez obav osadit ve variantě R-C-D, nutnost použít IO TPS3820 (zmiňovaná v EZ-USB FX2LP™/AT2LP™ Reset and Power Considerations, viz předchozí díl) se neprokázala. Po několika desítkách studených startů vždy došlo ke korektní identifikaci a zavlečení firmware. Podle použité LED1 je možné zvážit zvýšení velikosti R14. S ohledem na vybraný typ a variantu IC1 je nutné zkontrolovat a případně patřičně upravit velikost R11 a napětí D5 (detaily viz taktéž předchozí díl). Pokud by vám vadila příliš vysoká zástavba JP1 a JP2, je možné osadit pouze mírně zkrácené kolíky a použít propojky se sníženým profilem (občas se dají najít na starších motherboardech; jak je to v maloobchodě, nevím). Výškově se tak dají ušetřit až 4 mm. Nebo je možné podle konfigurace nahradit JP1 a JP2 drátovými propojkami. Konektor X2 je možné osadit i ve variantě „s ohrádkou“. Je tak menší šance na nějaký ten nechtěný zkrat. Vůbec by nebylo špatné nějakou vhodnou ochranou zamezit zkratu mezi DPS logického analyzátoru a okolím. Na místě paměti Flash EEPROM jsem použil typ 24LC02B. Vývod č. 5 (SDA) jsem před zapájením ohnul mírně vzhůru tak, aby byl asi 0,5 mm nad DPS. V případě změny obsahu paměti potom není nutné přeinstalovat ovladače – stačí pouze vývod odpojit, připojit logický analyzátor k USB a vývod zase spojit s CY7C68013A. O naplnění obsahu EEPROM je pojednáno níže.

Krystalový rezonátor 24 MHz... Člověk míní a věci se mění. V předchozím díle jsem psal, že krystal zakoupený v GME podle předběžných měření vyhoví. No, on sice vyhoví, ale věc se má tak. Krystal jsem zakoupil, osadil a až potom jsem si uvědomil, že by stálo za to ověřit, že krystal skutečně kmitá v základním módu na 24 MHz a že jeho zatěžovací kapacita je cca. 8 až 10 pF. Nechtělo se mi krystal z desky vytahovat, a tak jsem změřil stejný 24MHz krystal zakoupený loni u stejné firmy k staré dobré 89C2051 (ano, představa, že budou mít oba krystaly stejné parametry, byla naivní – taky se mně to pěkně vrátilo). Parametry krystalu byly následující: sériová rezonance 23,995390 MHz, paralelní rezonance 24,006310 MHz, činitel jakosti 175000, zatěžovací kapacita pro posun sériové rezonance na 24 MHz 8,4 pF. Jak nepříjemné bylo zjištění, že oscilátor 24 MHz s nově zakoupeným krystalem kmitá na 24,009610 MHz, tedy o +400 ppm výše. Kmitočtová odchylka je sice v toleranci specifikace USB 2.0 (±500 ppm) a přijímač USB se s takovým kmitočtovým ofsetem musí vyrovnat, ale pokud budete chtít logický analyzátor využít i pro přesnější měření kmitočtu/časových vzdáleností, bude chyba kmitočtu oscilátoru dominovat nad chybou způsobenou diskretizací signálu (vzorkovací kmitočet 24 MHz) pro kmitočty nižší než asi 10 kHz a časy větší než 100 us. Kmitočet lze mírně snížit zvýšením kapacity kondenzátoru C8 na vývodu XTALIN, snižuje se však absolutní hodnota přenosu kladné zpětné vazby oscilátoru a při příliš velké kapacitě oscilátor přestane kmitat. Nějak výrazněji zvyšovat kapacitu C7 bych nedoporučoval, zvyšuje se zátěž aktivního prvku oscilátoru a opět hrozí zánik oscilací. Mně se podařilo zvýšením kapacity C7 o 10 pF snížit kmitočet oscilátoru na 24,0074 MHz a zvýšením C7 o 27 pF snížit kmitočet na 24,0059 MHz. Evidentně jsem měl smůlu a koupil krystal s extrémně velkou zatěžovací kapacitou nebo dokonce krystal určený pro provoz v tzv. sériovém módu.

Obr. 1. Osazená DPS.

2. Úprava obsahu EEPROM
Na tomto místě popíšu postup úpravy obsahu paměti EEPROM logického analyzátoru platný pro OS Windows. Pokud někdo do diskuze přidá postup pro Linux, budu rád.

Je-li DPS logického analyzátoru korektně osazena, můžete ji bez obav připojit na rozhraní USB podporující HS USB 2.0. Neobsahuje-li první bajt osazené paměti Flash EEPROM kód 0xC0 nebo 0xC2, detekuje operační systém logický analyzátor jako neznámé zařízení s VID = 0x04B4 a PID = 0x8613, viz obr. 2.

Obr. 2. Identifikace logického analyzátoru při prvním připojení.

Pro další komunikaci s kontrolérem CY7C68013A, a tedy otevření možnosti modifikovat paměť EEPROM, je třeba nainstalovat Cypress SuiteUSB 3.4 – USB Development tools for Visual Studio [1]. Já jsem použil aktuálně dostupný balík CySuiteUSB_3_4_5_B192.exe; před stažením je třeba se registrovat. Instalace probíhala bez potíží. V nabízených programech se objevila záložka Cypress, v ní Cypress Suite USB 3.4.5 a v ní dalších šest položek, z nichž nejdůležitější je samozřejmě adresář Help a aplikace CyConsole.

K tomu, aby bylo možné z aplikace CyConsole komunikovat s kontrolérem CY7C68013A, je třeba upravit patřičný soubor CyUSB.inf, tj. především doplnit správné VID (= 0x04B4) a PID (= 0x8613), a nainstalovat příslušnou variantu ovladače CyUSB.sys podle OS. Přiloženy jsou ovladače pro W2K, WXP a WV&W7 – u mě byly v adresáři C:\Cypress\Cypress Suite USB 3.4.5\Driver\bin. O adresář výše jsou soubory CyUSB.chm a CyUSB.pdf, které celý postup instalace ovladačů podrobně popisují. Jen upozorňuji, že v případě 64bitových OS je nutné OS nejprve restartovat, při zavádění systému vyvolat bootovací menu (F8) a zvolit „Disable Driver Signature Enforcement“. Po úspěšné instalaci ovladače CyUSB.sys není třeba OS restartovat, pouze stačí logický analyzátor odpojit a znovu připojit. Logický analyzátor by se měl objevit v seznamu USB zařízení s korektním VID a PID.

Nyní spusťte aplikaci CyConsole. V nabídce Select Device (bezprostředně pod menu) musí být logický analyzátor vidět i se všemi parametry. V menu zvolte Options –> EZ-USB Interface. Objeví se nové okno (viz obr. 3), které vám umožní tlačítkem S EEPROM zavést nový obsah do paměti EEPROM (samozřejmě při správně vybraném Device). Obsah paměti EEPROM je nutné si připravit např. v nějakém hexadecimálním editoru a uložit v binární podobě s příponou iic. Já jsem si připravil 256bajtový soubor s hodnotami 0xFF, pouze prvních osm bajtů obsahovalo 0xC0, VID_LO, VID_HI, PID_LO, PID_HI, 0x00, 0x00, 0x00. Změna obsahu EEPROM probíhá tak, že je do CY7C68013A zavlečen firmware, který posléze změní obsah EEPROM – situace je dobře vidět z výpisu v okně na obr. 3 (doporučuji si obr. 3 prohlédnout detailně). Po odpojení a opětovném připojení logického analyzátoru dojde ke změně jeho VID a PID a ovladač CyUSB.sys s ním přestane komunikovat. Pokud někdy v budoucnu budeme chtít obsah EEPROM opět modifikovat, budeme muset buď přeinstalovat ovladač CyUSB.sys s novým VID a PID (a ovladače, které byly pro tyto VID/PID registrovány, z OS odstranit), nebo před studeným startem logického analyzátoru odpojit signál SDA paměti EEPROM od CY7C68013A (viz text výše).

Obr. 3. EZ-USB Interface těsně po změně obsahu EEPROM.

3. První měření
Pro úvodní pokusy lze použít např. originální software pro Saleae Logic (v licenčním ujednání není nic o tom, že by software nešlo tímto způsobem použít – v legislativě zběhlejší diskutéři mě možná vyvedou z omylu). Doporučuji nejprve logický analyzátor odpojit od USB, nainstalovat Logic Software (já jsem použil verzi 1.1.8 Vista & 7 64-bit) a poté logický analyzátor znovu připojit. Proběhne instalace ovladače (obr. 4) a ve Správci zařízení pod Řadiči USB by se měl objevit Saleae Logic USB Logic Analyzer.

Obr. 4. Instalace ovladače logického analyzátoru.

Pokud nyní spustíte aplikaci Logic 1.x.x, nebude již ve stavu Disconnected, ale ve stavu Connected, a můžete si začít s logickým analyzátorem hrát (to vše platí samozřejmě za podmínky, že EEPROM logického analyzátoru obsahuje správný VID a PID).

Začněme nejprve jednoduchým testem. Na kanál 4 logického analyzátoru byl přiveden periodický signál pravoúhlého průběhu o kmitočtu 1 kHz se střídou 1:1 a úrovněmi 0 V/+3,3 V. Zdrojem signálu byl generátor libovolných průběhů s výstupní impedancí 50 ohmů připojený pomocí cca. 20cm kablíků s dutinkami (to ostatně platí pro všechna další měření). Naměřený průběh signálu snímaného vzorkovacím kmitočtem 12 MHz je na obr. 5.

Obr. 5. Signál pravoúhlého průběhu 1 kHz na kanálu 4.

[Pozn.: Vzorkování 24 MHz jsem nepoužil z prostého důvodu – můj notebook zkrátka odmítá akceptovat rychlost 24 MHz (jeden z asi 20 záznamů se podaří přenést do počítače kompletní) a 16 MHz (tady je to tak napůl, jednou se podaří, podruhé ne). Proč tomu tak je si ukážeme v příštím dílu. Na stolním PC však 24 MHz běží jak má, jen k měřicí technice to mám nějakých 10 metrů.]

Odhad relativní chyby měření periody (potažmo kmitočtu) vycházející z nejistoty ±1 perioda vzorkovacího kmitočtu (tj. 83,3 ns) je pro jednokilohertzový signál ±83,3 ppm; kmitočet 1 kHz jsme tedy schopni měřit s přesností ±0,0833 Hz. Indikovaná hodnota má odchylku –0,4165 Hz, tedy přibližně pětkrát větší (–416,5 ppm). To odpovídá dříve zmíněné nepřesnosti oscilátoru 24 MHz. Měření kmitočtu (periody) je tedy zatíženo systematickou chybou, kterou je sice možné výpočtem korigovat, měření však ztrácí svůj půvab (nakonec ten krystal stejně budu muset vyměnit).

Obr. 6. Signál pravoúhlého průběhu 6 MHz na kanálu 4.

Na obr. 6 je zobrazen stav po záznamu periodického pravoúhlého signálu o kmitočtu 6 MHz se střídou 1:1. Ti zběhlejší již vědí, že jsem přitlačil analyzátor ke zdi – vzorkovací kmitočet je velmi blízko dvojnásobku kmitočtu snímaného signálu a dá se očekávat, že budu mít co do činění s Whittaker-Shannonovým (někdy Shannon-Kotelnikovovým, Nyquistovým, Hartleyovým aj. dle vašeho vyznání) vzorkovacím teorémem. Ten pro obecný v čase spojitý signál v základním pásmu (tj. spektrálně lokalizovaný v kmitočtovém pásmu 0..fh) tvrdí, že k tomu, abychom byli schopni z ekvidistantně odebíraných vzorků tohoto signálu zjistit jeho hodnotu v libovolném časovém okamžiku (proces rekonstrukce signálu), musíme odebírat vzorky vzorkovacím kmitočtem fsmp > 2fh. Nedodržením této podmínky dochází k efektu známému jako aliasing – překladu spekter zrcadlených okolo násobků vzorkovacího kmitočtu fsmp. V rekonstruovaném signálu v časové oblasti potom vznikají artefakty, které v původním spojitém signálu nebyly přítomny.

Bohužel, periodický pravoúhlý signál rozhodně nelze považovat za příkladně kmitočtově omezený signál. Jeho spektrum je diskrétní lokalizované na násobcích základního opakovacího kmitočtu a výkon spektrálních složek s rostoucím kmitočtem sice klesá, ale nijak závratným tempem.

Pokud budeme vzorkovat periodický pravoúhlý signál kmitočtem řádově vyšším, než je opakovací kmitočet vzorkovaného pravoúhlého signálu, lze z důvodu malého výkonového podílu vyšší harmonické složky pravoúhlého signálu, které budou způsobovat aliasing, zanedbat. Výsledkem operace vzorkování je potom diskrétní signál, který dobře kopíruje původní spojitý signál. Zanedbání vyšších harmonických složek se v časové oblasti projeví nejistotou určení pozice hran pravoúhlého signálu ±1/2 vzorkovací periody.

Budeme-li kmitočet pravoúhlého signálu zvyšovat, bude vliv aliasingu narůstat a nejistota určení hrany (v absolutní hodnotě stále konstantní) začne být srovnatelná se vzdáleností hran vzorkovaného pravoúhlého signálu. V tento okamžik může docházet ke ztrátě schopnosti detekovat pulsy a podoba diskrétního signálu zdaleka nemusí korespondovat s původním spojitým signálem.

Zrcadlení spektra kolem násobků vzorkovacího kmitočtu lze ale využít i pozitivně, a to v případě pásmově omezených nebo periodických signálů. V případě periodických signálů lze vhodnou volbou vzorkovacího kmitočtu vzhledem ke kmitočtu vzorkovaného signálu v důsledku zrcadlení přeskupit diskrétní spektrum signálu tak, že v časové oblasti vznikne replika původního vzorkovaného signálu, ale s podstatně pomalejším časovým vývojem – hovoříme o tzv. sekvenčním vzorkování v ekvivalentním čase, s kterým se lze setkat například u vzorkovacích osciloskopů... Ne, rozhodně nemám v úmyslu obtěžovat partiemi teorie signálů, proto si ukážeme pouze některé závěry vycházející z teorie sekvenčního vzorkování periodických signálů v ekvivalentním čase přímo na naměřených záznamech.

Víme, že vzorkovací kmitočet fsmp (12,004805 MHz) není přesně násobkem kmitočtu vzorkovaného periodického signálu fs (6 MHz). V tomto případě existují dva stavy, kdy je vzorkovací okamžik v časové koincidenci s hranou pravoúhlého signálu – jednou s hranou náběžnou a podruhé s hranou týlovou. Tyto dva stavy se cyklicky opakují s kmitočtem daným absolutní hodnotou rozdílu kmitočtu vzorkovaného periodického signálu a poloviny vzorkovacího kmitočtu, tj. abs(fs – fsmp/2) = 4,805 kHz. Z obr. 7 nahoře lze zjistit změřenou periodu opakování 0,2080833 ms, tedy opakovací kmitočet je 4,8058 kHz – to je ve shodě s vypočteným výsledkem. Podíváme-li se v detailu na diskontinuitu v signálu (obr. 7 dole), je zřejmé, že vzdálenost mezi koincidencí vzorkovacího kmitočtu s náběžnou a týlovou hranou je asi 2,5 us. Měřený signál tedy zřejmě nemá činitel plnění přesně 50 % (střída 1:1), ale 1/2·(1 + (2,5 us)/(208,0833 us))·100 % = 50,6 % (střída 50,6:49,4) ve prospěch log. 1.

Obr. 7. Signál pravoúhlého průběhu 6 MHz na kanálu 4 v globálním a detailním pohledu.

Budeme-li vzorkovat periodický pravoúhlý signál o kmitočtu velmi blízkém vzorkovacímu kmitočtu (obr. 8, fsmp = 12,004805 MHz, fs = 12 MHz), obdržíme repliku vzorkovaného signálu s vzorkovacím kmitočtem fsmp – fs = 4,805 kHz (změřeno 4,79233 kHz).

Obr. 8. Vzorkování pravoúhlého signálu 12 MHz vzorkovacím kmitočtem 12,004805 MHz.

A na závěr vzorkování periodického signálu symetrického trojúhelníkového průběhu o kmitočtu 10,004 kHz se špičkovými hodnotami 0 V/+3,3 V. Z vyznačené šířky pulsu 42,6667 us lze přibližně určit rozhodovací hladinu IC1 +1,41 V. Na tomto místě taktéž musím dementovat existenci hystereze u obvodu 74LVC8T245 firmy TI, kterou jsem zmínil v předchozí části. Měřitelnou hysterezi se mi u tohoto obvodu prokázat nepodařilo, ta je, zdá se, až výsadou 16bitových budičů. Jak je to s obvody od NXP, nevím, IDT slibuje hysterezi na všech obvodech řady LVC i ALVC.

Obr. 9. Vzorkování trojúhelníkového signálu 12 MHz vzorkovacím kmitočtem 12,004805 MHz.

Nutno dodat, že uvedený software umí provádět i analýzu několika sériových protokolů (viz demo na webu Saleae). Bohužel jsem žádné otevřené zařízení s podporovaným sériovým rozhraním neměl po ruce, takže praktickými zkušenostmi v tomto směru nemohu sloužit.

4. Logický analyzátor jako generátor signálu
Kolega Mard ve svém příspěvku z 25. 5. 2011 (na jiném místě) zmínil existenci aplikace PWM Logic [2], která obrací tok dat mezi logickým analyzátorem Saleae Logic a počítačem a vytváří z logického analyzátoru osmikanálový PWM generátor. Aktuální verze 0.1.5.12 je ke stažení na http://brrrbaybay.com/index.php/pwm-logic-202121545/download. PWM Logic je napsán pod .NET framework a využívá již nainstalované ovladače od Saleae Logic. Pokud tedy pomocí propojky JP1 obrátíme směr toku signálu v IC1, můžeme směle začít experimentovat (na tu propojku nezapomeňte, jinak se s vámi IC1 nebo IC2 nejspíš rozloučí).

Testoval jsem PWM Logic pouze krátce a musím souhlasit s autorem, že aplikace je opravdu v plenkách. PWM Logic byl sice schopen generovat PWM až do kmitočtu 1 MHz, se střídou to bylo ale poněkud horší. Pro vyšší kmitočty byl signál pouze se střídou 1:1 (nevím, nakolik to souviselo s tím, že na ostatních kanálech byla ponechána původní střída 1:1), jindy zase měl výstupní signál kmitočet poloviční oproti nastavené hodnotě. Asynchronní režim ani pulsní generátor pro modelářská serva (R/C model control) nejsou ještě implementovány. Škoda, že autor neuvolnil zdrojové kódy, osobně bych totiž raději ocenil generátor, který by jednorázově/cyklicky s daným vzorkovacím kmitočtem předával data na výstup i třeba po blocích 512 bajtů. Komplikovanější časové průběhy by stejně bylo nutné vytvářet mimo aplikaci. Uvidíme, jak se bude software vyvíjet. Pro představu o výstupním signálu přikládám vybrané naměřené průběhy. Napájení IC1 bylo +3,3 V, výstup byl s osciloskopickou sondou provizorně propojen krátkými asi 15cm kablíky.

Na obr. 10. je zachycen signál o kmitočtu 500 kHz a střídě 1:1. Původně byl požadován signál o kmitočtu 1 MHz, avšak po manipulaci se střídou došlo ke změně kmitočtu na polovinu.
Na obr. 11. je signál o kmitočtu 100 kHz s činitelem plnění 20 %. Šířka kladného pulsu je sice správná (2 us), avšak kmitočet (perioda) signálu nikoliv.

Obr. 10. Signál o kmitočtu 500 kHz a střídě 1:1.

Původně byl požadován signál 1 MHz, po manipulaci se střídou došlo ke změně kmitočtu na polovinu.

Obr. 11. Signál 100 kHz s činitelem plnění 20 %.

Šířka kladného pulsu je sice správná (2 us), avšak kmitočet (perioda) signálu nikoliv.

Literatura:
[1] Cypress SuiteUSB 3.4 – USB Development tools for Visual Studio, odkaz
[2] PWM Logic, stary odkaz: odkaz Nový odkaz: odkaz

První část článku je zde.

Příště: Na USB s osciloskopem.
Autorem čánku je: email
mla2b.zip