Monday 1 March 2021

Κατασκευή K3NG Keyer

 Η εκμάθηση του κώδικα μορς δεν είναι εύκολη υπόθεση! Tο παλεύω εδώ και λίγα χρόνια. Για όποιον το πάρει απόφαση 2 είναι οι βασικές μου συμβουλές. 1) Καθημερινή εξάσκηση. τουλάχιστο 15 λεπτά την ημέρα. Έιτε στην ακρόαση είτε στην εκπομπή. Δυστυχώς αυτό ήταν το δύσκολο για μένα. Δεν είχα την αφοσίωση να εξασκούμαι καθημερινά. 2) Να μάθετε τους χαρακτήρες σαν ήχους και όχι να μετράτε τα στίγματα! Ακόμα και αν τα μάθετε έτσι αυτή η μέθοδος θα είναι ένα συνεχόμενο εμπόδιο στην μετέπειτα πορεία σας στα μορς.

Αυτά 2 βασικά σημεία αλλά δεν ειναι αυτό το θέμα του σημερινού άρθρου. Πιο κάτω είναι μια κατασκευή για τους "Cheaters" που θέλουν να ξεγελάσουν το δύσκολο έργο του να μάθεις τον κώδικα. Ένας συνάδελφος μου ανέφερε σε μια συζήτηση ότι ένας τρόπος να μάθεις τον κώδικα είναι να κάνεις επαφές έστω και μέσω υπολογιστή και σιγά σιγά επειδή θα ακούς τον κώδικα θα σου αποτυπωθεί και παράλληλα θα έχεις και την επιβράβευση ότι έκανες επαφή.

 

Το K3NG Keyer είναι ένα interface βασισμένο σε Arduino με πολλές δυνατότητες. Μέσα στον κώδικα έχει πολλά features που μπορείς να ενεργοποιήσεις ή να απενεργοποιήσεις ανάλογα με τι Arduino θα χρησιμοποιήσεις (για να μειώσεις το μέγεθος του κώδικα και την μνήμη που καταλαμβάνει) καθώς επίσης και τι θα συνδέσεις πάνω . Γράφτηκε από τον K3NG και μπορείτε να διαβάσετε όλη τη λίστα δυνατοτήτων του εδω.

Στην κατασκευή μου χρησιμοποίησα τα ακόλουθα : 

  • CW speed adjustable from 1 to 999 WPM
  • Up to six selectable transmitter keying lines (Χρισημοποίησα μονο 1 εξοδο)
  • Programming and interfacing via USB port (“command line interface”)
  • Logging and Contest Program Interfacing via K1EL Winkey 1.0 and 2.0 interface protocol emulation
  • Up to 12 memories with macros (προσθεσα 4 macro keys)
  • Serial numbers (ειναι ήδη στον κώδικα)
  • CW keyboard (via a terminal server program like Putty or the Arduino Serial program) (ενεργοποίησα το command line interface αρα εχω και αυτή τη δυνατότητα)
  • Speed potentiometer / Rotary Encoder Speed Control (optional – speed also adjustable with commands)
  • Iambic A and B (για χρήση με paddle)
  • QRSS and HSCW (ειναι ηδη στον κωδικα - κανει τα dit και dah πιο μεγαλα ή πιο μικρά)
  • Paddle reverse (ειναι ήδη στον κώδικα)
  • Farnsworth Timing 
  • Adjustable frequency sidetone
  • Command mode for using the paddle to change settings, program memories, etc.
  • Keying Compensatioν
  • Dah to Dit Ratio adjustment
  • Weighting
  • Callsign receive practice
  • Send practice
  • Alphabet Sending Practice
  • Training Module

Είχα χρησιμοποιήσει τον κώδικα και πιο παλιά με arduino nano ενεργοποιώντας μόνο τα Cw practice and training modules και το decoder με LCD monitor 4 γραμμών ,ίσα ίσα που χωρούσαν στη μνήμη. Ήταν μια κατασκευή που έφτιαξα για να με βοηθήσει να μάθω τον κώδικα.


Αυτή τη φορά ήθελα να έχω την δυνατότητα να ενεργοποιήσω όσα περισσότερα features χωρίς να κοιτάζω πως θα τα χωρέσω στην μνήμη .Επίσης αφού δουλέψει θα ήθελα την δυνατότητα να μπορώ να προσθέσω και άλλες λειτουργίες στο μέλλον. Έτσι πήγα κατευθείαν με arduino Mega 2560.



το γενικό σχεδιο κυκλώματος φαίνεται πιο κάτω: 



Πλήκτρο command και memory keys

Πρώτα ετοίμασα την συνδεσμολογία των push button. Μια pullup αντίσταση 10KΩ προς τα 5V από την έξοδο 5V του Arduino. Μετά μπαίνει ο πρώτος διακόπτης ο οποίος λειτουργεί σαν command button. Δίνει εντολή στο winkeyer να μπει σε configuration menu. Άλλη λειτουργία είναι αν ενεργοποιήσεις το winkeyer και το command line feature πατώντας το command button on boot εναλλάσσει την αρχική λειτουργία.

Παράλληλα από τον διακόπτη μπαίνει αντίσταση 1ΚΩ και ακολουθεί το επόμενο πλήκτρο. Μπορούν με τον ίδιο τρόπο να προστεθούν άλλα 12 πλήκτρα που θα λειτουργούν ως memory ή macro buttons.

Προσοχή η σειρά των αντιστάσεων δεν πρέπει να τερματίζει στην γή. Αν γίνει αυτό τότε θα δίνει σήμα οτι έχουμε συνεχώς πατημένο το τελευταίο πλήκτρο.

Μετά την πρώτη αντίσταση των 10ΚΩ το σήμα πάει σε ένα αναλογικό pin του arduino που καθορίζουμε εμείς στον κώδικα του προγράμματος. Στη δική μου κατασκευή χρησιμοποίησα το Pin 10 λόγω τοποθέτησης των κουμπιών πιο κοντά σε εκείνο το σημείο. ήταν καθαρά για λόγο ευκολίας.


Ποτενσιόμετρο ταχύτητας / Rotary Encoder Speed Control

Έπειτα το ποτενσιόμετρο 10K συνδέεται οι 2 άκρες το ένα στην τροφοδοσία και το άλλο στην γείωση και ο μεσαίος ακροδέκτης στο arduino pin Α8. Και πάλι η επιλογή του Pin ειναι ευέλικτη, μπορεί να επιλεγεί οποιοδήποτε Pin από τα analog. 



Speaker 

Η προσθήκη speaker στην κατασκευή δεν είναι αναγκαία αλλά βοηθά για να δίνει feedback η κατασκευή οτι λειτουργεί καθώς επίσης και αν θα χρησιμοποιηθεί για εκπαιδευτικούς σκοπούς.

Το κύκλωμα αποτελείτε από ένα transistor NPN 2N2222 ,2 αντιστάσεις 100Ω και ένα κεραμικό πυκνωτή 0.1μF.





Ο εκπομπός του transistor πάει στην γείωση. Η βάση μεσω αντίστασης 100Ω πάει στο Pin D48, ο συλλέκτης μέσω αντίστασης 100Ω παει στην τροφοδοσία. Το ακουστικό συνδέεται σε σειρά μέσω πυκνωτή 0.1μF στον συλλέκτη του transistor.




Υποδοχή για CW paddle


Το shield του 3.5" audio jack πάει στην γείωση. Οι αλλοι δυο ακροδέκτες, το tip και το middle παν αντίστοιχα στα Pins D44 και D40 και εχουν decoupling capacitors δυο κεραμικούς 0,1μF προς την γείωση.

Έξοδος προς Key ασυρμάτου

Μέσω αυτής της εξόδου μπορούμε να στείλουμε CW απο τον υπολογιστή στην υποδοχή Key του ασυρμάτου. Η συγκεκριμένη κατασκευή μπορεί να οδηγήσει μέχρι και 4 ασυρμάτους επαναλαμβάνοντας το πιο πάνω κύκλωμα για κάθε άξοδο που θέλουμε να προσθέσουμε.

Βάση του σχηματικού του ασυρμάτου μου (FT450) το tip του audio jack ειναι το Key το Middle δεν συνδέεται πουθενά και το shield πάει στην γείωση. Άρα το tip απο το audio jack συνδέεται στον συλλέκτη του 2N2222 παράλληλα με ενα κεραμικό πυκνωτή 0.1μF. Η βάση πάει μέσω αντίστασης 1KΩ στο pin D32 και ο εκπομπός πάει στην γείωση.

Προγραμματισμός Arduino 

Για να ανεβεί το πρόγραμμα στο Arduino χρειάζεται το Arduino IDE απο την σελίδα της Arduino
Το πρόγαμμα του K3NG CW Keyer το οποιο είναι στο Github
Στον πιο πανω σύνδεσμο στο github πάνω δεξιά το πλήκτρο code και download Zip
Αποσυμπιέζουμε τον φάκελο στο documents/Arduino/K3NG CW Keyer
Πριν το ανεβάσουμε πρέπει να κανουμε κάποιες αλλαγές για να το φέρουμε στα μέτρα της κατασκευής μας.
Μεσα απο το Arduino IDE ανοίγουμε το k3ng_keyer.ino . Αυτό θα μας ανοιξει αρκετα tab μεσα στο πρόγραμμα:


επιλεξουμε τα fetures που θα ενεργοποιήσουμε . Όσα έχουν " // " μπροστά στην γραμμή είναι απενεργοποιημένα.

Πιο κατω ποιά εχω ενεργοποιημένα στην κατασκευή μου:
#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
#define FEATURE_COMMAND_LINE_INTERFACE  // Command Line Interface functionality
#define FEATURE_MEMORIES             // on the Arduino Due, you must have FEATURE_EEPROM_E24C1024 and E24C1024 EEPROM hardware in order to compile this
#define FEATURE_MEMORY_MACROS
#define FEATURE_WINKEY_EMULATION    // disabling Automatic Software Reset is highly recommended (see documentation)
#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
#define FEATURE_POTENTIOMETER         // do not enable unless you have a potentiometer connected, otherwise noise will falsely trigger wpm changes
#define FEATURE_SERIAL_HELP
#define FEATURE_CW_DECODER              //https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
#define FEATURE_ROTARY_ENCODER          // rotary encoder speed control
#define FEATURE_ALPHABET_SEND_PRACTICE  // enables command mode S command - created by Ryan, KC2ZWM
#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE // enables command mode U
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION  // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE 
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
#define OPTION_WINKEY_2_SUPPORT 
#define OPTION_WINKEY_IGNORE_LOWERCASE
#define OPTION_PROG_MEM_TRIM_TRAILING_SPACES         // trim trailing spaces from memory when programming in command mode
#define OPTION_DIT_PADDLE_NO_SEND_ON_MEM_RPT         // this makes dit paddle memory interruption a little smoother
#define OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR  // https://github.com/k3ng/k3ng_cw_keyer/wiki/385-Feature:-CW-Decoder
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
#define OPTION_EXCLUDE_MILL_MODE
#define OPTION_DISPLAY_MEMORY_CONTENTS_COMMAND_MODE
#define OPTION_WINKEY_PROSIGN_COMPATIBILITY

Στο tab keyer_hardware.h εφόσον δουλεύουμε με Mega2560 δεν θα ενεργοποιήσουμε κάποια άλλη πλατφόρμα.
Aν χρησιμοποιούσαμε αλλο arduino εδω θα δηλώναμε το hardware.

Kαι τέλος στο keyer_pin_settings.h 
επιλέγουμε τα Pins στα οποια συνδέσαμε ολα τα πιο πάνω.

#define paddle_left 40
#define paddle_right 44
#define tx_key_line_1 32       // (high = key down/tx on)
#define sidetone_line 48         // connect a speaker for sidetone
#define potentiometer A8        // Speed potentiometer (0 to 5 V) Use pot from 1k to 10k

#ifdef FEATURE_BUTTONS
  #define analog_buttons_pin A10
  #define command_mode_active_led 0
#endif //FEATURE_BUTTONS

#ifdef FEATURE_SIDETONE_SWITCH
  #define SIDETONE_SWITCH 8
#endif //FEATURE_SIDETONE_SWITCH

#define cw_decoder_pin 0             // This is for use with external decoding hardware
#define cw_decoder_audio_input_pin A2 // This is for audio detection decoding using OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR; this must be an analog pin!
#define cw_decoder_indicator A3       // Output - goes HIGH when cw tone is detected by OPTION_CW_DECODER_GOERTZEL_AUDIO_DETECTOR

#if defined(FEATURE_COMPETITION_COMPRESSION_DETECTION)
  #define compression_detection_pin 13
#endif //FEATURE_COMPETITION_COMPRESSION_DETECTION

Απενεργοποίηση του auto reset


Ένα θέμα που με ταλαιπώρησε γιατί όσο και αν δοκίμαζα να συνδέσω το logbook Μου με την κατασκευή έκανε timeout και δεν συνδεόταν. Έπρεπε να απενεργοποιήσω το autoreset του Arduino. Για να το πετύχω αυτό έβαλα ένα πυκνωτή απο την γείωση στο reset pin του arduino αλλά αυτό πρέπει να γίνει αφού προγραμματιστεί επιτυχώς το arduino . Eπίσης τον πυκνωτή τον τοποθέτησα απλά μέσα στις υποδοχές πάνω στην πλακέτα του arduino για να μπορώ να τον προσθέτω και να τον αφαιρώ κατα βούληση. Αν τον συνδέσετε μόνιμα πάνω στην πλακέτα τότε μπορείτε και πάλι να προγραμματίζετε το arduino πατώντας manualy το reset button πριν να αρχίσει να φορτώνει το πρόγραμμα στο arduino 



















No comments: