JH3DRN 趣味の徒然

主にアマチュア無線、電子工作について書いてます.

K3NG CW Keyer を作る:ソフトウェア編 その弐

その壱の纏め
  • IDEは2.3.2を使用する
  • スケッチはK3NG専用ディレクトリに置く
  • libraries にはK3NG関連の物しか置かない
  • 1602液晶I2Cコンバータのアドレスを確認する
共通定義ファイルの修正

K3NGは幾つかの定義ファイルが有り、機能を拡張したりハードウェアの違いによる修正を行ったりする事が出来る。ここではCPUの違いによらない修正を進めて行く。

key_settings.h の修正(変更箇所のみ)
// #define initial_speed_wpm 26    // "factory default" keyer speed setting  
#define initial_speed_wpm 12        // "factory default" keyer speed setting  → 初期のスピードを少し遅く

// #define initial_sidetone_freq 600   // "factory default" sidetone frequency setting  
#define initial_sidetone_freq 2000    // "factory default" sidetone frequency setting  → 圧電ブザーに対する周波数

// #define initial_pot_wpm_low_value 13      // Potentiometer WPM fully CCW  
/// #define initial_pot_wpm_high_value 35  // Potentiometer WPM fully CW  
#define initial_pot_wpm_low_value 5       // Potentiometer WPM fully CCW  
#define initial_pot_wpm_high_value 30   // Potentiometer WPM fully CW  

//#define lcd_i2c_address_ydv1_lcd 0x27    // I2C address of display for FEATURE_LCD_YDv1
#define lcd_i2c_address_ydv1_lcd 0x3f       // I2C address of display for FEATURE_LCD_YDv1

#ifdef FEATURE_BUTTONS  
//  #define analog_buttons_number_of_buttons 4  // includes the command button (command button + 3 memory buttons = 4)  
  #define analog_buttons_number_of_buttons 5  // includes the command button (command button + 3 memory buttons = 4)  
  #define analog_buttons_r1 10  
  #define analog_buttons_r2 1   → メモリの数を3〜4に変更
#endif    

// #define potentiometer_always_on 0  
#define potentiometer_always_on 1   → VRによる速度調整を電源ONから可能にする
key_pin_settings.h の修正(変更箇所のみ)
// #define tx_key_line_1 11     // (high = key down/tx on)  
// #define tx_key_line_2 12  
#define tx_key_line_1 6        // (high = key down/tx on)  
#define tx_key_line_2 7    → 送信出力先変更

// #define cw_decoder_pin 0   // This is for use with external decoding hardware  
#define cw_decoder_pin 2      // This is for use with external decoding hardware  
1602 液晶表示器用ライブラリ

JH1LHVさんがHPで書かれている通り、オリジナルのスケッチをそのままコンパイルするとエラーがでる。この1602に対するライブラリとしては "LiquidCrystal_I2C" が有名で私も以前から使っている。しかしK3NGスケッチと共にコンパイルするとエラーになる為、LHVさんのHPに掲載されている "NewliquidCrystal" を使った所コンパイルに成功した。

CPUの種類で変わる定義ファイル keyer_features_and_options.h

この定義ファイルはkeyerに持たせる機能を色々選択出来る。全ての機能が実装出来るかどうかは分からないが(使用するCPUによると思う)少なくても機能を絞ればUNOでも実装出来た。UNO用とMega用のファイル(有効化した部分だけ)を紹介する

// Arduino UNO 用 keyer_features_and_optiopns.h の内容

// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior

#define FEATURE_BUTTONS
#define FEATURE_COMMAND_MODE
// #define FEATURE_SIDETONE_SWITCH   // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h). 
#define FEATURE_SERIAL_HELP
#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_LCD_YDv1                // YourDuino I2C LCD display with old LCM 1602 V1 ic
#define FEATURE_SLEEP   // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
#define FEATURE_STRAIGHT_KEY
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
// Arduino Mega 2560, pro用 keyer_features_and_optiopns.h の内容
// compile time features and options - comment or uncomment to add or delete features
// FEATURES add more bytes to the compiled binary, OPTIONS change code behavior

#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_SIDETONE_SWITCH   // adds switch control for the sidetone output. requires an external toggle switch (assigned to an arduino pin - see keyer_pin_settings.h). 
#define FEATURE_SERIAL_HELP
#define FEATURE_DEAD_OP_WATCHDOG
#define FEATURE_AUTOSPACE
#define FEATURE_LCD_YDv1                // YourDuino I2C LCD display with old LCM 1602 V1 ic
#define FEATURE_SLEEP                   // go to sleep after x minutes to conserve battery power (not compatible with Arduino DUE, may have mixed results with Mega and Mega ADK)
#define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION  // Use when activating both FEATURE_WINKEY_EMULATION and FEATURE_COMMAND_LINE_INTERFACE 
                                                             //    simultaneously.  This will make Winkey emulation be the default at boot up; 
                                                             //    hold command button down at boot up to activate CLI mode
#define OPTION_INCLUDE_PTT_TAIL_FOR_MANUAL_SENDING
#define OPTION_EXCLUDE_PTT_HANG_TIME_FOR_MANUAL_SENDING
#define OPTION_WINKEY_STRICT_HOST_OPEN      // require an admin host open Winkey command before doing any other commands
#define OPTION_WINKEY_2_SUPPORT        // comment out to revert to Winkey version 1 emulation
#define OPTION_WINKEY_SEND_BREAKIN_STATUS_BYTE
#define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
#define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET  // (Required for Win-Test to function)
#define OPTION_WINKEY_IGNORE_LOWERCASE               // Enable for typical K1EL Winkeyer behavior (use for SkookumLogger version 1.10.14 and prior to workaround "r" bug)
#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_KEYBOARD_CAPSLOCK_BEEP
#define OPTION_DO_NOT_SEND_UNKNOWN_CHAR_QUESTION
#define OPTION_EXCLUDE_EXTENDED_CLI_COMMANDS
総括

UNOで使える事は大きな利点で、私のUNO互換機は確か7,8年前の物。こう言った手持ちの部品で手軽に高性能な Keyer が楽しめるのは良いと思う(良い意味で遊べる)
また、K3NG 自体が結構な頻度でバージョンアップされているのでそれらの新機能が楽しめる事も嬉しい。今回領府頂いた基板に付いては満足していて特徴としては
1. Arduino のシールドととして使えるので手持ちのCPUで取りあえず試せる
2. 領府品のCPU接続ボードにMega-pro CPU (Ali で1300円位)を載せればほぼフルで機能が実装出来る
3. 基板としての完成度が高い
こんな感じかな。本来はこんな事やってないで、CW実戦訓練と On Air すれば良いのに、どうしても物作りとか開発に目が行ってしまうのは病気?なのだと思う。まあ、楽しければ良いのでこれはこれで良しとする。さあ、後はケーシングなのだが ”ケースにいれた編” の実現はどうなる??

追記
  • 2024/03/14 keyer_features_and_options の内容を一部修正しました