venerdì 13 marzo 2009

KEYER PER CW CON PIC

Il microchip PIC 16F84 è stato progettato come microcontroller a memoria flash per programmare servomeccanismi e piccoli robot. Tuttavia, negli ultimi anni, ha avuto anche un impiego illegale, facilmente intuibile, che esula dalla presente trattazione.

Trovare una utilizzazione per scopi radioamatoriali del suddetto chip è stato sempre un aspetto oscuro per me fino a quando ho scoperto un progettino di EI9GQ, al secolo E. Skelton, pubblicato sul suo sito (www.homepage.tinet.ie/ei9gq). Quello che mancava, forse perché ritenuto ovvio ai più, era la procedura di programmazione del chip in questione. Con il mio articolo ho voluto colmare questa lacuna.

Al progetto ho apportato delle semplici modifiche per adattarlo anche alla telegrafia con il tasto verticale tradizionale e dotarlo di un elementare sidetone composto da un buzzer a 12 V, sempre utile per ascoltare la propria manipolazione. Ovviamente ho provveduto a ridisegnare il circuito stampato per ridurre le dimensioni in modo da poter inserire il keyer nei ricetrasmettitori homebrew.

Lo schema si commenta facilmente perché tutto è configurato attorno al chip dove sono montati pochissimi componenti. In particolare il condensatore C3 provvede a generare la base dei tempi e P1 regola la velocità di manipolazione. La generazione della sequenza dei punti e delle linee avviene con un paddle (nella foto uno autocostruito donatomi da IW9ATY, Roberto).

Dal piedino 6 del chip il segnale commuta in conduzione Q1 che aziona il PTT del trasmettitore. Tramite il tasto telegrafico e la resistenza R8 la tensione manda in conduzione il transistor permettendo di comandare il TX. Il diodo D1 evita un ritorno di tensione che potrebbe danneggiare il 16F84.

Il circuito stampato è molto semplice e il progetto si appronta in poco tempo. Seguire la disposizione dei componenti.

La sezione software dedicata a questo progetto in apparenza sembrerà complicata ma vi assicuro che, una volta compreso il meccanismo, sarete in grado di risolvere il problema.

Preciso che le operazioni che andrete ad eseguire non hanno niente di illegale per cui potete stare tranquilli.

Innanzitutto occorre procurarsi i necessari programmi, tutti scaricabili dalla rete usando un qualsiasi motore di ricerca. Personalmente, oltre ad un normale word processor ( Word, Wordpad ecc ), ho usato i seguenti programmi:

- MPASM v. 01.50 scaricabile gratuitamente dal sito www.microchip.com
- PIC 24C13 v. 1.10

Preciso che quest’ultimo software lavora in DOS e non gira con il sistema operativo Windows XP per il quale è consigliabile usare il PICPROG che si presenta con una diversa interfaccia ma con le stesse peculiarità.

Inoltre è necessario l’uso di un programmatore di chip. Io ho realizzato un programmatore chiamato Ludipipo il cui progetto si trova facilmente in rete.

Ecco la sequenza da seguire per la programmazione:

1. Create e date un nome (es. KEYER) a una nuova cartella sul vostro computer;
2. Copiate i due software (MPASM e PIC 24C13) nella cartella KEYER;
3. Trascrivete, con il programma di word processing il listato della figura 2 facendo attenzione a non modificare le istruzioni o sbagliare qualche carattere e salvatelo in formato testo (.txt), con un nome a vostro piacimento ( es. jambic ), nella cartella precedentemente creata;
4. Lanciate il programma MPASM e aprite il file jambic.txt. Cliccare su ASSEMBLE: il programma genererà quattro file: jambic.cod, jambic.lst, jambic.err e jambic.hex che si trascriveranno in modo automatico nella cartella;
5. Inserire il chip PIC16F84 nel programmatore prestando attenzione alla piedinatura e lanciare il programma PIC 24C13;
6. Settare il programma selezionando, in OPTIONS il tipo di programmatore (Ludipipo), la porta COM (COM1, COM2 ecc) sulla quale è inserito e verificare (TESTHARDWARE) che tutto sia “ visto “ dal computer;
7. Selezionare DEVICE e successivamente, nella finestra, PIC16F84;
8. Selezionare FILE e nella finestra LOADHEX il file jambic.hex;
9. Selezionare ACTION e poi PROGRAM;

A questo punto si aprirà una finestra nella quale un cursore indicherà lo stato di avanzamento della programmazione alla fine della quale potrete estrarre il chip e inserirlo nello zoccolo del circuito stampato del keyer.
Per testare il corretto funzionamento del keyer, prima di collegarlo al trasmettitore, occorre inserire un buzzer a 12 V (lo stesso che si utilizzerà successivamente per il sidetone) così come indicato dalla parte tratteggiata dello schema in figura 1. Manipolare il paddle e controllare che la durata dei caratteri e delle sequenze sia corretta. Con l’interruttore S2 si potrà escludere il buzzer del sidetone. Se il lavoro è stato compiuto bene si avrà a disposizione un preciso ed economico keyer.

 G.Lorenzi


Lista dei componenti

RESISTENZE
R1 = 1.2 kohm
R2 = 5.6 kohm
R3 = 100 kohm
R4 = 100 kohm
R5 = 4,7 kohm
R6 = 4.7 kohm
R7 = 4.7 kohm
R8 = 2,2 kohm
R9 = 2.2 kohm
P1 = 22 k kohm Potenziometro

CONDENSATORI
C1 = 100 mF Elettrolitico
C2 = 47 mF Elettrolitico
C3 = 470 pF Ceramico a disco
C4 = 10 nF Ceramico a disco
C5 = 10 nF Ceramico a disco

CIRCUITI INTEGRATI
IC1 = PIC 16F84
IC2 = 78L05 Regolatore di tensione

TRANSISTOR
Q1 = BC108
Q2 = BC108

VARIE
D1 = 1N4148
BUZZER 12 V






LIST P=16F84
 

 __CONFIG 0x3FFB  ;RC, NO WDT,  PWR-UP, NO CP.

RA EQU 05H  ;PORT A
RB EQU 06H  ;PORT B
COUNT1 EQU 0CH  ;COUNT FOR DELAY LOOP
COUNT2 EQU 0DH  ; "
FLAG EQU 0EH  ;USER FLAGS

DIT_FLG EQU 00H  ;DOT FLAG
DIT_SW EQU 00H  ;DOT SWITCH (ON PADDLE KEY)
DAH_SW EQU 01H  ;DASH SWITCH (ON PADDLE KEY)
KEY EQU 00H  ;KEYING OUTPUT

 ORG 00H  ;PROGRAM EXECUTION BEGINS FROM HERE
 GOTO START

DAH MOVLW 0x1E  ;MAIN DOT/DASH DELAY LOOP
 GOTO CONT
DIT MOVLW 0x0A
CONT MOVWF COUNT1
LP2 MOVLW 0x6E
 MOVWF COUNT2
LP1 DECFSZ COUNT2,1
 GOTO LP1
 DECFSZ COUNT1,1
 GOTO LP2
 RETLW 0  ;END OF DELAY

START BSF 3,5  ;SWITCH TO F REGISTER PAGE 1  
 MOVLW 0FFH  ;PORT A ALL INPUTS
 MOVWF RA
 MOVLW 00H  ;PORT B ALL OUTPUTS
 MOVWF RB
 BCF 3,5  ;SWITCH TO F REGISTER PAGE 0 
 
 MOVLW 0
 MOVWF RB  ;MAKE SURE TX IS NOT KEYED ON POWER UP
 MOVWF FLAG  ;CLEAR DOT AND DASH FLAGS

NEXT BTFSS RA,DIT_SW ;IS THE DIT PADDLE PRESSED?
 GOTO DOT
 BTFSS RA,DAH_SW ;IS THE DAH PADDLE PRESSED
 GOTO DASH
 GOTO NEXT  ;LOOP UNTIL NEXT PADDLE PRESS

DOT BTFSS RA,DAH_SW ;ARE BOTH PADDLES PRESSED
 GOTO IAMBIC  ;YES 
DOT2 BSF RB,KEY  ;KEY TRANSMITTER  
 CALL DIT  ;DELAY FOR 1 DOT LENGTH
 BCF RB,KEY  ;UNKEY TRANSMITTER
 CALL DIT  ;DELAY FOR 1 DOT LENGTH
 BSF FLAG,DIT_FLG ;LAST MORSE ELEMENT SENT WAS A DOT (FOR IAMBIC ACTION)
 GOTO NEXT  ;BACK AND WAIT UNTIL NEXT PADDLE PRESS

DASH BTFSS RA,DIT_SW ;ARE BOTH PADDLES PRESSED
 GOTO IAMBIC  ;YES 
DASH2 BSF RB,KEY  ;KEY TRANSMITTER  
 CALL DAH  ;DELAY FOR 1 DASH LENGTH (3 DOT LENGTHS)
 BCF RB,KEY  ;UNKEY TRANSMITTER
 CALL DIT  ;DELAY FOR 1 DOT LENGTH
 BCF FLAG,DIT_FLG ;LAST MORSE ELEMENT SENT WAS A DASH (FOR IAMBIC ACTION)
 GOTO NEXT   ;BACK AND WAIT UNTIL NEXT PADDLE PRESS

IAMBIC BTFSC FLAG,DIT_FLG ;CHECK TO SEE IF LAST CHAR SENT WAS A DOT OR A DASH
 GOTO DASH2  ;IT WAS A DOT, SEND A DASH
 GOTO DOT2  ;IT WAS A DASH, SEND A DOT 
 
 END