CW Decoder完成
2018.06.07
液晶ディスプレイLCD2004が入手出来ましたのでケースに入れ、CW Decoderを完成させました。
LCD2004は予想以上に大きくスイッチ類を取付けると手持ちのケースはギリギリの状態でした。
LCD2004で表示出来る様にスケッチを変更しました。
1行目は速度、欧文/和文モード、Tone検出周波数、BandWidthを表示します。
2行目~4行目が受信データの表示です。
新しい受信データは4行目に表示して古い受信データは3->2行目に繰上る様にしています。
スイッチで欧文/和文モード強制切替、Tone検出周波数/BandWidthの変更が出来ます。
Tone検出周波数/BandWidthの変更は使用スイッチの関係上、各々3通りの設定となっています。(スケッチ上は各々4通り可能)
取り合えずは完成、まずまずの性能と言う事ですがあくまでも苦手な和文の練習用で実戦での使用は考えていません。
LCD2004は予想以上に大きくスイッチ類を取付けると手持ちのケースはギリギリの状態でした。
LCD2004で表示出来る様にスケッチを変更しました。
1行目は速度、欧文/和文モード、Tone検出周波数、BandWidthを表示します。
2行目~4行目が受信データの表示です。
新しい受信データは4行目に表示して古い受信データは3->2行目に繰上る様にしています。
スイッチで欧文/和文モード強制切替、Tone検出周波数/BandWidthの変更が出来ます。
Tone検出周波数/BandWidthの変更は使用スイッチの関係上、各々3通りの設定となっています。(スケッチ上は各々4通り可能)
取り合えずは完成、まずまずの性能と言う事ですがあくまでも苦手な和文の練習用で実戦での使用は考えていません。
CW Decoder
2018.05.19
手持ちのATMEGA328P-PUと表示器LCD1602の組み合わせで欧文/和文対応CW Decoderを作ってみました。
当初はJH7UBC局のトーン検出に567Dを使用したもの及びスケッチを利用させて頂き作成しました。
トーン検出性能の問題なのか入力レベルの大小、周波数、ノイズ等の影響なのか解読率が今一つでした。
中華製でAliExpress等にて1K円程度で売られているPIC16F+567Dの組み合わせのCW Decoderも解読率が悪く実用に耐えないと聞いています。
(トーン検出の前段にフイルタアンプ等を組み込めば改善されるかも?)
そこで今回は解読率アップを狙いOZ1JHM局のアナログ入力FFT方式、和文対応スケッチを採用してみました。
OZ1JHM局サイト
http://skovholm.com/cwdecoder
欧文スケッチ
https://github.com/SkillfulHacking/arduino-cwdecoder
和文対応スケッチ
http://www.skovholm.com/decoder_kh.ino (JA9MAT局が和文対応)
回路は簡単で外付け部品も少なくArduino UNO (nanoも可)を利用すれば簡単に作成出来ます。
サイトの図面でArduinoのD13に接続している発光ダイオードの向きは逆になっていますので修正して下さい。
和文対応スケッチで強制的に和文/欧文切り換えを行う場合はArduinoのD2及びD3に押しボタンスイッチ追加が必要です。
D2/D3に電圧がかかってい無くプルアップしないとD2/D3をスイッチでアースに落としても切り換え出来ませんでした。(アースに落とすのではなく+5vをスイッチ経由で入力すればOK? )
又、D13はDigital信号ON/OFF表示で使用していますので欧文/和文切り換え表示はD4に変更しました。LCDにモードが表示されますのでD4に接続するLEDは必要ないですが当初作成Dcoderでモート表示に使用していましたのでそのまま流用しました。
----------------------スケッチ112行目付近の修正---------------------
void setup() {
pinMode(2,INPUT) ; //スイッチに接続ピンをデジタル入力に設定
pinMode(3,INPUT) ; //スイッチに接続ピンD4をデジタル入力に設定
digitalWrite(2,HIGH); //D2プルアップ
digitalWrite(3,HIGH); //D3プルアップ
// pinMode(13,OUTPUT) ; //LEDに接続ピンをデジタル出力に設定
pinMode(4,OUTPUT) ; //LEDに接続ピンD4をデジタル出力に設定
---------------------スケッチ160行目付近の修正-----------------------
if (digitalRead(2) == LOW) { //スイッチの状態を調べる ORG:HIGH
// digitalWrite(13,HIGH) ; //和文スイッチが押されているならLEDを点灯
digitalWrite(4,HIGH) ; //和文スイッチが押されたならLEDを点灯
sw = 1; //和文に強制的に切り替える
}
if (digitalRead(3) == LOW) { //スイッチの状態を調べる ORG:HIGH
// digitalWrite(13,HIGH) ; //欧文スイッチが押されているならLEDを点灯
digitalWrite(4,LOW) ; //欧文スイッチが押されたならLEDを消灯
sw = 0; //欧文に強制的に切り替える
}
--------------------------------------------------------------------------
スケッチはTone検出周波数:744Hz / BandWidth:140Hz設定にてコンパイルしました。
OZ1JHM局のFFT方式は解読率は良く入力レベル変動、ノイズ等の影響は少ないようです。
スピードも10~30wpmの範囲内で若干タイムラグがありますが自動追従で解読出来ました。
後日、20x4の表示器に取り換え及びスイッチ等でTone検出周波数/BandWidthを変更出来る様に改良、ケースに入れたいと考えています。
567Dトーン検出方式からアナログ入力FFT方式に変更、回路はそのまま残しています。
写真右側中央付近の8Pソケットが567D用です。567Dを取付け、スケッチを変更すればトーン検出方式でも動きます。
LCD1602を取付けた写真です。表示エリアが狭いためLCD2004を使用した方が良いです。
---------追記-------------------
サイトURL https://k2jji.org/2014/09/18/arduino-base-cw-decoder/ を参考にAroduino(Atmega328P)のA0~A3の入力でTone検出周波数/BandWidthを各々4通りに設定、及び設定値をLCDに表示出来る様にスケッチを変更しました。
LCD2004(送料込み300円)はAliExpressに注文しましたので到着後交換予定です。
当初はJH7UBC局のトーン検出に567Dを使用したもの及びスケッチを利用させて頂き作成しました。
トーン検出性能の問題なのか入力レベルの大小、周波数、ノイズ等の影響なのか解読率が今一つでした。
中華製でAliExpress等にて1K円程度で売られているPIC16F+567Dの組み合わせのCW Decoderも解読率が悪く実用に耐えないと聞いています。
(トーン検出の前段にフイルタアンプ等を組み込めば改善されるかも?)
そこで今回は解読率アップを狙いOZ1JHM局のアナログ入力FFT方式、和文対応スケッチを採用してみました。
OZ1JHM局サイト
http://skovholm.com/cwdecoder
欧文スケッチ
https://github.com/SkillfulHacking/arduino-cwdecoder
和文対応スケッチ
http://www.skovholm.com/decoder_kh.ino (JA9MAT局が和文対応)
回路は簡単で外付け部品も少なくArduino UNO (nanoも可)を利用すれば簡単に作成出来ます。
サイトの図面でArduinoのD13に接続している発光ダイオードの向きは逆になっていますので修正して下さい。
和文対応スケッチで強制的に和文/欧文切り換えを行う場合はArduinoのD2及びD3に押しボタンスイッチ追加が必要です。
D2/D3に電圧がかかってい無くプルアップしないとD2/D3をスイッチでアースに落としても切り換え出来ませんでした。(アースに落とすのではなく+5vをスイッチ経由で入力すればOK? )
又、D13はDigital信号ON/OFF表示で使用していますので欧文/和文切り換え表示はD4に変更しました。LCDにモードが表示されますのでD4に接続するLEDは必要ないですが当初作成Dcoderでモート表示に使用していましたのでそのまま流用しました。
----------------------スケッチ112行目付近の修正---------------------
void setup() {
pinMode(2,INPUT) ; //スイッチに接続ピンをデジタル入力に設定
pinMode(3,INPUT) ; //スイッチに接続ピンD4をデジタル入力に設定
digitalWrite(2,HIGH); //D2プルアップ
digitalWrite(3,HIGH); //D3プルアップ
// pinMode(13,OUTPUT) ; //LEDに接続ピンをデジタル出力に設定
pinMode(4,OUTPUT) ; //LEDに接続ピンD4をデジタル出力に設定
---------------------スケッチ160行目付近の修正-----------------------
if (digitalRead(2) == LOW) { //スイッチの状態を調べる ORG:HIGH
// digitalWrite(13,HIGH) ; //和文スイッチが押されているならLEDを点灯
digitalWrite(4,HIGH) ; //和文スイッチが押されたならLEDを点灯
sw = 1; //和文に強制的に切り替える
}
if (digitalRead(3) == LOW) { //スイッチの状態を調べる ORG:HIGH
// digitalWrite(13,HIGH) ; //欧文スイッチが押されているならLEDを点灯
digitalWrite(4,LOW) ; //欧文スイッチが押されたならLEDを消灯
sw = 0; //欧文に強制的に切り替える
}
--------------------------------------------------------------------------
スケッチはTone検出周波数:744Hz / BandWidth:140Hz設定にてコンパイルしました。
OZ1JHM局のFFT方式は解読率は良く入力レベル変動、ノイズ等の影響は少ないようです。
スピードも10~30wpmの範囲内で若干タイムラグがありますが自動追従で解読出来ました。
後日、20x4の表示器に取り換え及びスイッチ等でTone検出周波数/BandWidthを変更出来る様に改良、ケースに入れたいと考えています。
567Dトーン検出方式からアナログ入力FFT方式に変更、回路はそのまま残しています。
写真右側中央付近の8Pソケットが567D用です。567Dを取付け、スケッチを変更すればトーン検出方式でも動きます。
LCD1602を取付けた写真です。表示エリアが狭いためLCD2004を使用した方が良いです。
---------追記-------------------
サイトURL https://k2jji.org/2014/09/18/arduino-base-cw-decoder/ を参考にAroduino(Atmega328P)のA0~A3の入力でTone検出周波数/BandWidthを各々4通りに設定、及び設定値をLCDに表示出来る様にスケッチを変更しました。
LCD2004(送料込み300円)はAliExpressに注文しましたので到着後交換予定です。
OLEDでオシロスコープ
2018.05.06
Arduino UNO + 0.96インチOLEDでオシロスコープをブレッドボードに組んでみました。
説明、及びスケッチは
https://www.youtube.com/watch?v=XHDNXXhg3Hg を参照しました。
コンパイルで必要なライブラリAdafruit_GFX_Library及びAdafruit_SSD1306は事前にArduinoIDEに追加しておきます。
0.96インチOLED(128x64)の場合のコンパイルエラー #error ("Height incorrect, please fix Adafruit_SSD1306.h!"); が出るのでAdafruit_SSD1306.hの修正が必要です。
修正内容は
#define SSD1306_128_64 のコメントを外す、#define SSD1306_128_32 のコメント化、及び #define SSD1306_LCDHEIGHT 64 の追加をします。
--------Adafruit_SSD1306.h (73行目付近)------------
#define SSD1306_128_64
// #define SSD1306_128_32
// #define SSD1306_96_16
#define SSD1306_LCDHEIGHT 64
----------------------------------------------------
取りあえずは動きましたが画面が小さすぎて当局の目では使用し難いためブレッドボードに組込み実験のみで製作はしません。
説明、及びスケッチは
https://www.youtube.com/watch?v=XHDNXXhg3Hg を参照しました。
コンパイルで必要なライブラリAdafruit_GFX_Library及びAdafruit_SSD1306は事前にArduinoIDEに追加しておきます。
0.96インチOLED(128x64)の場合のコンパイルエラー #error ("Height incorrect, please fix Adafruit_SSD1306.h!"); が出るのでAdafruit_SSD1306.hの修正が必要です。
修正内容は
#define SSD1306_128_64 のコメントを外す、#define SSD1306_128_32 のコメント化、及び #define SSD1306_LCDHEIGHT 64 の追加をします。
--------Adafruit_SSD1306.h (73行目付近)------------
#define SSD1306_128_64
// #define SSD1306_128_32
// #define SSD1306_96_16
#define SSD1306_LCDHEIGHT 64
----------------------------------------------------
取りあえずは動きましたが画面が小さすぎて当局の目では使用し難いためブレッドボードに組込み実験のみで製作はしません。
中国製のRFボード到着
2017.01.15
DVMEGAもどきで1台C4FMで調子が悪いので対応の為注文していた中国製のRFボードRF7021SEが年始に到着していました。
暇を見つけて到着したRFボードの水晶発振器交換、ClockOut配線の改造実施。
テスト結果はDV/C4FMとも動作OKとなりました。
調子の悪いRFボードを調査した所、取替えた14.7456MHzの水晶発振器の周波数が650Hz上にずれていました。
RFボードのADF7201RFチップの水晶発振器精度は10ppm以内の物を使用する様規定されているので誤差は147Hz以内でないとNGです。
元々10個セットで買った中国製14.7456MHzの水晶発振器は精度25ppmと書いてありますから当たりはずれがありますね。
調子の悪いRFボードの水晶発振器を別の物に交換、C4FMもOKになりました。
DVは周波数の中心付近の2値(2FSK)を使用していますのでOKですがC4FMは中心より離れた所まで使用する4FSKなので周波数ズレには敏感なのかなと考えます。
暇を見つけて到着したRFボードの水晶発振器交換、ClockOut配線の改造実施。
テスト結果はDV/C4FMとも動作OKとなりました。
調子の悪いRFボードを調査した所、取替えた14.7456MHzの水晶発振器の周波数が650Hz上にずれていました。
RFボードのADF7201RFチップの水晶発振器精度は10ppm以内の物を使用する様規定されているので誤差は147Hz以内でないとNGです。
元々10個セットで買った中国製14.7456MHzの水晶発振器は精度25ppmと書いてありますから当たりはずれがありますね。
調子の悪いRFボードの水晶発振器を別の物に交換、C4FMもOKになりました。
DVは周波数の中心付近の2値(2FSK)を使用していますのでOKですがC4FMは中心より離れた所まで使用する4FSKなので周波数ズレには敏感なのかなと考えます。
周波数カウンター
2017.01.13
DVSP2のDVMEGA化で余ったArduinoNanoを使用して周波数カウンターを作ってみました。
ArduinoNanoと16x2 Character LCD Display Module の組合せです。
「あちゃんでいいの」の回路を使用しました。
ソースファイルは こちら です。
(マウス右クリックでダウンロードしてください。)
DDSの25KHz出力を測定していますが3Hz上を表示しています。精度はArduinoNanoの16MHz水晶発振子の精度になります。
測定周波数の上限はArduinoNanoが16MHzなので1/2の8MHz以下になります。ArduinoNanoの処理能力から5~6MHz程度と推定します。
精度2ppmの周波数カウンターは持っていますが0.1MHz以下の低い周波数が測定できないのでこのカウンターは重宝します。
ArduinoNanoと16x2 Character LCD Display Module の組合せです。
「あちゃんでいいの」の回路を使用しました。
ソースファイルは こちら です。
(マウス右クリックでダウンロードしてください。)
DDSの25KHz出力を測定していますが3Hz上を表示しています。精度はArduinoNanoの16MHz水晶発振子の精度になります。
測定周波数の上限はArduinoNanoが16MHzなので1/2の8MHz以下になります。ArduinoNanoの処理能力から5~6MHz程度と推定します。
精度2ppmの周波数カウンターは持っていますが0.1MHz以下の低い周波数が測定できないのでこのカウンターは重宝します。