Jste zde

Jambický telegrafní klíč s ASCII výstupem

Light verze je verze obsahující základní myšlenky s maximálním využitím kitu SPYDER. Využívá výstupu HW SCI periferie přestože pin není na 8pinové verzi kontroléru QG4. Konstrukci jsem připravil jako dárek tátovi OK2BND k 60. narozeninám / light verze pro soutěž se SPYDER.

Jambický telegrafní klíč je pomůcka pro snazší vysílání Morseovy abecedy (skvízování) bez nutnosti vyťukávat jednotlivé „tečky a čárky“ ale pomocí dvou horizontálních páček kde jedna vytváří automaticky „tečky“ druhá tvoří automaticky „čárky“ a při stisku obou vytváří jambický výstup kdy  po dobu stisku obou střídá „tečky a čárky“ nebo„čárky a tečky“ podle toho, co bylo stisknuto dříve. 

Existují dva typy klíčů (s pamětí poslední tečky nebo bez ní), spousty funkcí, které klíče mohou plnit - od proměnné rychlosti po změny poměru časů „teček“, „čárek“ a mezer mezi nimi, přehazování funkce jednotlivých páček ovladače (pastičky) pro snazší život leváků, po různé paměťové a komunikační možnosti, což je již doménou mikrokontrolerů.

Nevytvářím zde projekt finálního telegrafního klíče, nýbrž předkládám myšlenky aplikované na tento příklad, zaměřené na maximální využití kitu SPYDER a v něm obsaženého kontroléru; samotný klíč – opožděný dar bude vytvořen na bázi 16vývodového kontroléru QG4 s plnohodnotným obousměrným spojením SCI periferie s PC a spoustou přídavných funkcí jako paměť vlastní volací značky, automatické inkrementování pro účely závodního použití včetně doplnění o report spojení a ostatní kódy. Samozřejmě nastavitelné jak z klíče jako „Stand alone solution“ tak i z PC pomocí dedikovaného SW vytvořeného nejspíše pod Visual Basic for Applications – komponentu MS Office Excelu, s výstupy právě do Excelu i do standardních formátů používaných v radioamatérském světě doplněné o časové značky (data a časy). 

Mechanická část – pastička se dvěma pádlíčky je mimo zaměření této práce, pro prezentační účely jsou pádlíčka nahrazena tlačítky na desce plošného spoje.

Viz wikipedia: http://en.wikipedia.org/wiki/Telegraph_key

Iambic (dual-lever) Paddles

Keys offering one contact for dits (left key) and another for dahs (right key) were dubbed "iambic paddles," when each contact may be closed simultaneously. The iambic function (alternating dits and dahs) are created with an electronic keyer by squeezing the paddles together.

GES nabízí finální výrobek včetně ovládače http://www.ges.cz/?lang=cz&ipp=12&cur=CZK&or=sort&page=index&inc=detail&cl=rt&gesid=GES08900299

Quick start – rychlé oživení vzorku

Vzorek je postaven na univerzálním PCB, obsahuje pouze kontrolér, k němu připojená tlačítka, LED nahrazující klíčovaný vysílač a převodník na RS232 s obvodem MAX232.

Pro připojení BDM rozhraní SPYDERu je připraveno 4vodičové spojení, pro případ samostatné funkce je vzorek napájen z kitu přes žluto-zelenou dvojici vodičů. Pro případ externího napájení je možné využít připravené dutinky, systém není vybaven ochranami ani regulátorem!


Stand alone – samostatná funkce

Pro rychlé spuštění vzorku stačí nakonfigurovat Hyperterminál na přenos ze vzorku a připojit COM, připojit žlutý a zelený vodič spřažené  konektůrkem (s vyrytým značením) na pozice pinu  3 (Vcc - žlutý) a 4 (GND - zelený) na kitu SPYDER  (bez kontroléru) zasunutém v USB portu.

Stiskem levého tlačítka generujeme „tečky“, stiskem pravého tlačítka generujeme „čárky“, stiskem obou skvízujeme. Tyto dvě tlačítka generují KBI. Třetí tlačítko negeneruje interrupt, při jeho stisku se mění funkce následného stisku dříve zmíněných dvou tlačítek na zrychlování (levým) a zpomalování (pravým) generované morseovky jako nutná podmínka pro základní použitelnost klíče.

Algoritmus v kontroléru převádí vygenerované znaky morseovy abecedy na ASCII znaky a posílá je do terminálu. Pro zjednodušení se generují pouze velká písmena a čísla, nesmysly se nefiltrují. Po delší prodlevě je text na terminálu odsazen o mezeru a oddělují se tak generovaná slova.

Zařízení se přihlásí pozdravem, poté lze zahájit vysílání.

Připojení pro debugging

Pouhým připojením modrého a bílého vodiče k pinům na pozicích 1 a 2 kitu získáme verzi pro ON Board debugging pomocí kitu SPYDER a prostředí CodeWarrior.


Okno Hyperterminálu s pozdravem, v pozadí CodeWarror s originální rutinou kopírování výstupu HW SCI modulu na PTA1- bude rozebráno podrobněji.

Kontrolér 9S08QG4 - nastavení

K nastavení byl využit nástroj Device inicialization prostředí CodeWarrior, nastavení bylo provedeno pro 16vývodovou verzi :

  • Bus speed 8MHz
  • Real time interrupt každých 8ms je použit jako časová základna aplikace
  • Keyboard interrupt kontroluje 2 tlačítka na pinech PTA2 a PTA3
  • Aktivován SCI modul
  • 1 vstup osazený tlačítkem SET PTA5
  • 2 výstupy, PTA0 je výstupem telegrafního signálu, na PTA1 je překopírován výstup HW SCI modulu 
  • BKGD pin vyhražený pro debugging / po odladění převezme funkci PTT
  • Nevyužité nevyvedené piny pouzdra jsou nastaveny jako výstupy a ponechány plovoucí

HW - schéma

  • Kontrolér 9S08QG4 DIP8
  • Piny 1-4 jsou připojitelné ke kitu SPYDER za účelem napájení nebo debuggingu
  • K pinům 5, 6 a GND je připojena dutinková lišta pro případné připojení externího ovladače,
  • k pinům 3 a 4 je připojena dutinková lišta pro případné připojení správně orientovaného externího regulovaného napájení.
  • Napájecí napětí 3.6V

SW

RTI tvoří základní časovací rámec aplikace s periodou 8ms. Kód je jednoduchý a přehledný. Za povšimnutí stojí generování morse kódu, překlad do ASCII a generování SCI signálu.

Generování morse kódu

Pro generování morse je použita vlastní  rutina KBI (keyboard interupt) nastavená na stisk a držení tlačítek.

Wait(1); //ceka T*8ms  (debounce)
   Odeslano=0; 
     
   if ((Port&(Iambic))==0) 
                {if (Flag==1) { HrajCarku(); goto exit;} 
                 if (Flag==2) { HrajTecku(); goto exit;}
                }
   if ((Port&(Tecka))==0)  
                { 
                 HrajTecku();
                 goto exit;
                }
   if ((Port&(Carka))==0)  
                { 
                 HrajCarku();
                 goto exit;
                }

Tato přerušovací rutina volá podle stisknutého tlačítka (tlačítek a flagu) odpovídající rutinu HrajTecku() nebo HrajCarku(), poměr „tečky“ a „čárky“ je napevno nastaven na 1:3.

void HrajTecku(void){
  
                  Timeout=0;               //zamezí nežádoucímu odeslání
                  Port|=KeyerOutHigh;
                  Wait(Timing);
                  Port&=~KeyerOutHigh;
                  Wait(Timing);
                  Znak=(Znak<<1); Znak++;
                  Flag=1;
                  Timeout=(Timing);
}

void HrajCarku(void){
  
                  Timeout=0;               //zamezí nežádoucímu odeslání
                  Port|=KeyerOutHigh;
                  Wait(3*Timing);
                  Port&=~KeyerOutHigh;
                  Wait(Timing);
                  Znak=(Znak<<1);
                  Flag=2;
                  Timeout=(Timing);
}

Překlad do ASCII

V rutinách HrajTecku() a HrajCarku() se posouvá nebo posouvá a inkrementuje proměnná Znak. Po přetečení Timeout je hodnota v proměnné Znak pořadím v poli proměnných ASCI ze kterého je vyčtena, a v rutině Send(C) odeslána a hodnota znak je nastavena na počáteční hodnotu 1.

Hraje li se „tečka“ Znak=(Znak<<1); Znak++;   posouváme Znak a na novou pozici vkládáme 1.
Hraje li se „čárka“ Znak=(Znak<<1);                posouváme Znak a na novou pozici vkládáme 0.

#define  ASCI               "  TEMNAIOGKDWRUS  QZYCXBJP L FVH09 8   7        61       2   3 45"

Generování SCI signálu

Ke generování SCI signálu používám originální postup, který považuji za svůj nápad, nikde jsem nic podobného neviděl používat. Na generování SCI nepoužívám SW rutinu, nýbrž HW modul, který je běžně používán na 16pinové verzi. Prapůvodní myšlenka plyne z toho, že čip uvnitř 8pinové verze je tentýž jako v 16pinové, pouze některé pady nejsou vyvedeny fyzicky na piny pouzdra, HW SCI modul tedy na čipu je, jen jej zpřístupnit. Při obsluze vysílání při použití HW modulu kontroléru S08QG  se do registru SCID zapíše hodnota k odeslání a pak se čeká v nic nedělající smyčce do nastavení SCIS1_TDRE. Jednoduchou úpravou  -  doplněním smyčky o kopírování stavu výstupu modulu na dostupný pin jsem SCI TX zpřístupnil.

#define AsciiOut           PTAD_PTAD1

void Send(unsigned char C){

SCID=C;
while (SCIS1_TDRE==0) {AsciiOut=PTBD_PTBD1;}    //kopíruje nepřístupná HW periferií vysílaná data na výstup AsciiOut

Znak=1;                       //vyčistí Znak pro nové načítání
Odeslano=1;
FlagMezery=1;
Flag=0;
//FlagCRLF=1;
}
Zvláštní cena

Závěr

Vzorová aplikace není finálním produktem ale plní základní požadavky na použitelnost a nabízí můj pohled na přístup k aplikacím s mikrokontroléry. Kód není optimalizován, jako Flagy lze používat jednotlivé bity, nikoli celé Byte, ale vzhledem k nadbytku paměti a výpočetního výkonu tohoto 8bitového krasavce není nutné k optimalizacím přistupovat. Rutina přesměrování výstupu TX modulu SCI může být užitečná v případě, že pro účely testování je potřeba poslat data jinou cestou než již zapojenou sériovou linkou na jiný právě dostupný pin, případně data posílat paralelně z několika pinů, popravdě důvod takového konání mě nenapadá, ale jde to. :)

PřílohaVelikost
Package icon Project pro CodeWarrior90.59 KB
Hodnocení článku: