OK1UFC, České Budějovice, JN78fx, dne 25. ledna 2018: | ||
Úvod Poznámka: Zde, proboha, nepovažujte, že pro psaní takových programů je ten nejsprávnější nástroj Visual Studio. Pokud občas SW píšete, dělejte to s nástroji, se kterými umíte dělat a práce vám jde od ruky. Protože jsem na webu v minulosti dávné i v minulosti nedávné popsal několik svých řešení, u kterých jsem nechal nahlédnout pod pokličku, ve Visual Basicu, ukázal jsem vidláckou algoritmizaci zde právě v tomto nástroji. Algoritmizace sekvenceru Klasicky hamové řeší sekvencer tak, že odvozují posloupnosti spínání od události PTT. Pokud řídíme stanici pro WSJT, nemusíme ji řídit od události PTT, ale můžeme řízení realizovat přímo od času, kterým se synchronizuje při JT provozu všechno. Výhoda řešení: Hlavní výhodou popsaného řešení je čas, který máme na všechna spínání. Jak to pracuje, bych vyjádřil na analogii postupu, kdy chceme odjet v 9.30 vlakem ke kamarádovi. Musíme udělat několik kroků: nasadit si na ruku (nebo vzít do kapsy) hodinky - odejít včas z bytu - zamknout a odejít včas na stanici - cestou si včas koupit před odjezdem jízdenku z mobilu - přijít včas na perón - nastoupit a odjet. Sekvencer je dokonce ještě jednodušší. Musíme v PC umět sehnat čas (abychom věci dělali včas), spustit časovač, který nám bude s pravidelným intervalem spouštět 3 hlavní procedury programu. V té první se z časové informace vydolují hodiny, minuty a sekundy. Ve druhé se provede srovnání s nastavenými prvky, tedy, zda chceme jen poslouchat RX nebo zda chceme vysílat v liché nebo v sudé minutě. Ve třetí se odešlou povely do kontroleru v outdoorové jednotce. Jak to vypadá, jste viděli na stránce s popisem kontroleru - viz úvod článku. Než to budeme mít ve finální verzi, můžeme si napsat algoritmus samostatně v přehledné maličké verzi, kde si ho vyzkoušíme. Taková verze ke zkoušení vypadala v mém případě takto (na obrázku obrazovky je třikrát spuštěná, zachycená v konkrétním čase 18.46 46 a v každém okně je jiný režim - jen RX, TX v liché a TX v sudé minutě):
Tak jednoduchý algoritmus napsaný v jediném okně zabere jen asi 20 kB. Můžete si demoverzi sami stáhnout např. zde a spustit na svém PC. Jak je to naprogramováno? Nebo napsáno, nakresleno? Vidlácky.
Neprogramátorsky. Co se dalo, tak jsem nepsal, ale nakreslil ve
Visual Basicu. Technik neprogramátor se od programátora liší v tom, že
programy raději kreslí, než píše :-) Jenže nakreslit nejde všechno a občas
je třeba nějaké informace od někud číst, formátovat, zpracovávat,
zobrazovat, uchovávat, odesílat. Tak je to, bohužel, i v tomto jednoduchém
prográmku.
Poznámky: 1.Na deklaracích upozorňuji na jednu supervidláckou techniku programování. Po sériovém portu se z PC dobře posílají data jako celé bajty. Jeden byte je celkem 8 bit a reprezentuje číslo od 0 do 255 (v desítkovém tvaru). Vidlák si ulehčuje život, šetří časem i námahou a tak si klidně posílá místo jednobitové informace celý bajt a jeho hodnotu testuje (např. zjišťuje, jestli je stejně veliká jako jiný celý bajt) také jako celý bajt a podle té hodnoty třeba spíná pouze jeden kontakt. 2. Zobrazení čísel, bajtů a bitů (1 byte - 8 bit), se často píše jak v desítkovém, tak v hexadecimálním formátu. Bity se často zobrazují jako nuly a jedničky, jako úrovně L a H. V úlohách, které souvisejí s komunikací po sériovém portu, např. z PC do kontroléru TCVRu nebo do kontroléru pro řízení azimutu a elevace, se běžně pracuje se zobrazením ve všech zmíněných formátech a občas je také třeba přepočítat z jedné soustavy do druhé. K tomu v ham praxi slouží různé kalkulátory. Stáhnete je z internetu, najdete je na bakelitových kalkulačkách, bývají často součástí vývojových nástrojů pro práci s mikropočítači. Můžete si je také sami napsat nebo nakreslit. Příklad, včetně spustitelného programu ke stažení, včetně okomentovaného výpisu zdrojového kódu, najdete také na této stránce. 2. Hlavní procedura, kterou se spouštím periodicky, intervalem časovače:
Co k tomu dodat? Skutečně mám v hlavní proceduře jen tři řádky, tři skoky do podporogramů. V prvním zjišťuji, kde se pohybuji v čase, v druhé nastavuji sekvence, což znamená, že zkoumám, co chci dělat (jen RX, sudá/lichá minuta TX), kolikátá je sekunda a nastavuji povely. Konkrétně v 53 sekundě odpojuji LNA a přepínám anténní relé, v 54 sekundě zapínám PA a 58 sekundě zapínám TX. Vše je tedy připraveno a v další minutě od sekundy 00 jde z programu WSJT-X do TX modulace. A to až do 50 sekundy. V 52 sekundě odpojuji TX, PA, přepínám anténní relé a zapínám LNA. Vše je tedy několik sekund před novou minutou a 00 sekund opět v pohotovosti se zapnutým RX. A to až do 53 sekundy. A tak to jede pořád dokola. 3. Procedura Prave_nyni ()
Opět k tomu není co dodat. Procedura má
jen 4 řádky, na kterých se postupně: 4. Procedury Nastavuj_sekvence() a Makej() Domnívám se, že fakt nemá smysl další proceduru tady popisovat, jak fachčí, je to vidět z komentovaného výpisu. Proceduru Makej(), která se týká odesílání bajtů do sériového portu jsem z demoverze vymazal. Sériovou komunikaci jsem popsal už dřív a jindy. Povely jsou navíc poplatné mikropočítači v zařízení, tj. protokolu, který si navrhneme (já používám Icom), adrese, kterou si pro zařízení zvolíme, povel, který si zvolíme pro spínání LNA, ANT, PA, TX. Já posílám za sebou celkem čtyři bajty ve správném místě protokolu (LNAb, ANTb, PAb, TXb). Každý nabývá jen hodnot 255 nebo 0 a hodnoty znamenají zapnuto nebo vypnuto. Závěry Jak jsem psal v úvodu, u supervidláckých
věcí se není čím chlubit. Přesto jsem je na přání čtenářů jako námět
uvedl, aby čtenář viděl: Vlastní sekvencer nemá u stanice praktické využití. Proto byl PC kontrolér rozšířen o další algoritmy, jako jsou spínací hodiny (spínačky) napájecích zdrojů, voltmetry napájecích napětí, voltmetry směrových odbočnic PA, o astro část pro výpočet dat pro nastavování astronomické montáže Skywatcher (směr hlavního laloku antén) a pro nastavování Doppleru v TCVRu.
|
||
TU 73, Mira, ok1ufc |