Da quando ho iniziato a fare il radioamatore, alcuni anni fa, ho sempre desiderato costruirmi un keyer, pur non utilizzando la telegrafia molto di frequente. Di circuiti adatti allo scopo ne esistono molti e basta andare a spulciare il Radio Amateur's Handbook o gli altri manuali che tutti conosciamo. Tuttavia molti di questi circuiti prevedono l'utilizzo di chip dedicati, relativamente costosi e non sempre reperibili con facilità, e non sono in genere privi di una certa complessità circuitale.
Seguendo la tendenza odierna, per cui i circuiti, l'hardware, tendono sempre più ad essere sostituiti dai programmi, mi sono chiesto se non si potesse realizzare un keyer semplice ed economico, in cui tutte le funzioni fossero svolte dal software.
Il problema poteva essere risolto solo utilizzando un microprocessore di basso costo, capce tuttavia di ospitare un programma non banalissimo e di gestire un certo numero di porte di input/output. La scelta è quindi caduta sul "meraviglioso" Microchip PIC 16F84, che è in pratica un computer completo, sia pure ridotto ai minimi termini. Ospita infatti una memoria di programma su Flash Ram, una memoria dati (Ram) e persino una piccola Eeprom dove memorizzare dati non volatili.
Oltre a questo ha due oscillatori interni (per quello principale serve un quarzo esterno), possibilità di gestire interrupt interni ed esterni e 13 porte di input/output, capaci di gestire carichi di circa 25 mA ognuna. Ecco dunque che con una manciata di componenti ero finalmente in grado di affrontare il progetto del keyer.
Devo confessare a questo punto che la cosa che mi ha divertito di più, visto che faccio il programmatore come lavoro, è stata l'attività di apprendimento delle caratteristiche del PIC e del relativo linguaggio assembler. Le informazioni a questo proposito sono facilmente reperibili sul sito Internet del produttore (www.microchip.com) insieme agli strumenti di sviluppo necessari, tutti gratuiti (compilatore, debugger ecc.).
Qualche giorno di lavoro, poi una bella pausa per fare altro, poi un'altra tornata di lavoro intenso per ottimizzare il tutto ed ecco pronto il keyer.
Penso di essere riuscito a rendere l'uso molto semplice ed intuitivo, ma naturalmente sono sempre pronto a ricevere consigli di qualsiasi genere da parte di chi vorrà utilizzarlo, specie naturalmente dagli appassionati del CW, che sono per fortuna ancora molti.
Alla fine della pagina ci sono i collegamenti alle versioni precedenti del programma, mentre qui è descritta l'ultima realizzata, la 2.2.
Essa è simile alla 2.1, con la differenza che ora si può utilizzare indifferentemente un commutatore binario a 16 posizioni (0-F), oppure BCD a
10 posizioni (0-9). È anche possibile usare un quarzo da 2 MHz, come nelle versioni precedenti, oppure da 4 MHz. Sembra strano, ma ho notato che i quarzi da 2 MHz sono più difficili da trovare. Ho cambiato anche molte altre cose, come descritto nel seguito.
Ecco lo schema del Keyer IK0WRB versione 2.2
Per questo stesso schema a risoluzione più elevata, clicca qui.
Si può prelevare qui il modulo HEX da inserire nel PIC16F84, per la versione 2.2 del keyer.
Download: wrbk22i.zip
Il file zip contiene le immagini dello schema, questa pagina ed anche il modulo .HEX
Ho totalmente riscritto la routine di manipolazione iambic inclusa nel keyer, dopo qualche
osservazione fatta da appassionati del CW a velocità estremamente alta. Ora anche questi strani tizi, che trasmettono
in baudot a mano libera... dovrebbero essere soddisfatti (almeno spero).
Visto che molti hanno trovato qualche difficoltà nel reperire il commutatore binario a 16 posizioni (numerate da 0 ad F),
ho mappato le funzioni dalla A alla E anche sulle posizioni da 5 a 9, prima inutilizzate. In questo modo si può installare,
senza modifiche al programma, anche un commutatore BCD a 10 posizioni (da 0 a 9), che è più facile da trovare.
Stesso problema, anche se minore, per i quarzi da 2 MHz. Ho deciso di supportare anche i quarzi da 4 MHz, più diffusi.
Naturalmente ci deve essere un modo per dire al PIC quale quarzo si sta usando (dirglielo a voce non è una soluzione...), per
cui, avendo un paio di porte I/O ancora libere, ne ho utilizzata una a questo scopo. Bisogna quindi lasciare il pin 13 del PIC
scollegato (livello logico 1), se si usa il quarzo da 2 MHz, mentre se si installa il quarzo da 4 MHz, il pin 13 va collegato a massa.
Queste modifiche sono state possibili perché ho cambiato il modo di calcolare i ritardi per le varie velocità di trasmissione.
Fino alla versione 2.1 avevo utilizzato una tabella precalcolata e memorizzata nel programma. Ora invece utilizzo una routine di divisione e
questo mi ha permesso di liberare un pò di spazio per le nuove funzioni.
Ho prolungato il timeout che fa "addormentare" il chip da 33" a 2'45", un tempo probabilmente più normale.
Ciò comunque non modifica il funzionamento del keyer, sempre pronto anche quando è in stato di sleep, ma almeno il keyer sembra attivo anche durante
l'ascolto del corrispondente, in una conversazione CW.
Infine, ho ritoccato i tempi per far coincidere la velocità annunciata con quella effettiva, visto che il keyer era in ritardo di circa il 9,8%.
Posizione commutatore |
Stato | Colore LED | Paletta sinistra | Paletta destra | Pulsante |
---|---|---|---|---|---|
0 | Sleep | Spento | Nessun effetto | Nessun effetto | Nessun effetto |
1 | Ready | Verde in ricezione. Rosso in trasmissione. Giallo se esercizio. |
Punto | Linea | Trasmette singolo CQ |
2 | Velocità | Giallo | Diminuisce velocità | Aumenta velocità | Suona velocità attuale (Snn) |
3 | Peso | Giallo | Deminuisce peso | Aumenta peso | Suona peso attuale (Wn or Wn.5) |
4 | TX | Verde se disabilitato. Giallo se abilitato. |
Abilita trasmettitore | Disabilita trasmettitore | Suona stato attuale (TY o TN) |
5 o A | Audio | Verde se disabilitato. Giallo se abilitato. |
Abilita monitor audio | Disabilita monitor audio | Suona stato attuale (AY or AN) |
6 o B | Beacon | Verde se c'è un messaggio. Spento se memoria vuota. |
Inizia sequenza Beacon. Durante portante: chiamata immediata. |
Durante chiamata: pausa con portante. Durante portante: prolunga portante. |
Inizia o termina sequenza Beacon. |
All'accensione inizio automatico sequenza Beacon | |||||
7 o C | CQ | Verde se c'è un messaggio. Spento se memoria vuota. |
Inizia sequenza di CQ. Durante pausa: CQ immediato. |
Durante CQ: pausa. Durante pausa: prolunga pausa. |
Inizia o termina sequenza CQ |
8 o D | Direct | Verde. Rosso o giallo in tx. |
Emette portante finché premuta | Emette portante finché premuta | Portante per 5 secondi |
9 o E | Enter | Giallo all'inizio poi verde |
Memorizza un punto | Memorizza una linea | Premuto una volta: inserisce una pausa tra parole. 2 pressioni consecutive: cancella ultimo carattere. |
Memorizza una pausa tra caratteri, quando ci si ferma per 0,25 sec. | |||||
F | Sleep | Spento | Nessun effetto | Nessun effetto | Nessun effetto |
Questa pagina è disponibile anche in lingua inglese (in English).
Versioni precedenti: v1.0 - v2.0 - v2.1