Si4732レシーバー(ATS-20+)のファーム改造
前回ファームを(現時点で)最新のV3.0.8に更新したが操作性が自分に合わないので改造
改造のポイントとしては日本向けの実用的な受信機にすることにして実験用の多機能受信機は別途
画面
基本操作になるが,ロータリーエンコーダを回すと周波数が変わり,ロータリーエンコーダを押すと周波数の変更桁を変えることができる様にした
機能別操作
機能 | ボタン | V3.0.8の操作 | 改造後の操作 | 備考 |
周波数変更 | ロータリーエンコーダの回転で周波数ステップ分の周波数が上下,サブ時はサブ周波数の上下 | ロータリーエンコーダの回転で設定桁の周波数が上下 | ||
周波数ステップ | STEP | ボタン押下,ロータリーエンコーダの回転で周波数ステップ変更(1/5/9/10/50/100kHz),サブ時はサブ周波数ステップ変更 | ロータリーエンコーダのスイッチを押下,回転して周波数の変更桁を設定,再度押下か操作なしで(自動)解除 |
SW時のみで,MWは9kHz,FMは0.1MHz固定 |
AGC/アッテネータ | AGC | ボタン押下,ロータリーエンコーダの回転で変更(AT0/AGC/AT1-36) | 変更なし | 選択肢が多いので変更なしとした |
バンド切替 | BAND+ | ボタン押下,ロータリーエンコーダの回転でバンド変更 | ボタン押下でバンドアップ | 前回更新した日本向けバンドと同じ |
Soft Mute control | BAND- | ボタン押下,ロータリーエンコーダの回転で変更 | ボタン押下でバンドダウン | 機能は未対応 |
音量 | VOL+ | ボタン押下,ロータリーエンコーダの回転で音量を調整,長押しで連続可変 | ボタン押下で音量アップ,長押しで連続可変 | |
Automatic Volume Control | VOL- | ボタン押下,ロータリーエンコーダの回転で変更,長押しで音量ダウン連続可変 | ボタン押下で音量ダウン,長押しで連続可変 | 変更は未対応だが機能はON |
帯域変更 | BW | ボタン押下,ロータリーエンコーダの回転で変更 | ボタン押下で順に帯域変更 | 受信モードで設定帯域が異なる |
受信モード | MODE | ボタン押下,ロータリーエンコーダの回転で変更(AM/LSB/USB) | ボタン押下で順にモード変更(AM/LSB/USB) | WMはAM,FMバンドはFMのみ |
周波数SCAN | Rotry | ロータリーエンコーダのスイッチでSCAN開始/停止,SCAN周波数の方向は事前のロータリーエンコーダ操作に準じる | STEPボタンでSCAN開始/停止,SCAN周波数の方向は事前のロータリーエンコーダ操作に準じる | 周波数SCANは周波数変更でも停止 |
サブ周波数切替 | Rotry | 受信モードがSSB時(LSB/USB)ロータリーエンコーダのスイッチのトグルで切替 | なし(SSBで自動的に使用) | STS-20ではBFOのON/OFF |
消音 | Rotry | ロータリーエンコーダのスイッチを長押しでトグル | 変更なし |
- 機能別にボタン押下してロータリーエンコーダで変更が面倒(操作の一貫性はあるが良く使う機能は簡単に操作したい)
- ロータリーエンコーダのみで周波数変更可能(周波数合わせを重視した操作性)
- 機能ボタン押下,ロータリーエンコーダの回転による操作は2~3秒操作なしで自動解除(V3.0.8では10秒)
バンド別画面
(MW画面)
(FM画面)
(SW画面(AM))
周波数変更桁の変更
ロータリーエンコーダのスイッチ押下で桁マーク設定時表示が出るのでロータリーエンコーダを回転させ左右に周波数変更桁マークを移動(100kHz~1Hz)
ロータリーエンコーダのスイッチ押下または2~3秒操作なしで桁マーク設定時表示が消える
AGC/アッテネータ
AGCボタンを押下するとAGC/アッテネータ表示部がリバース表示(V3.0.8と同じ)
機能の操作
機能ボタン通りに変更(V1.1.5と同じ)
Sメーター
Sメータの基準でS9を指す状態は30MHz以下の場合コネクタへの入力電圧は100μV,アンテナ端子の入力インピーダンス50Ωとして終端時の電圧は50μVとのこと
ライブラリの値は「0-127 (dBμV)」と記載されていた(μVと思って良いのかな)→ dBなので0-127で良いのでした勘違いしていた
50でS9になるようにしてみた(rssi * 9 / 50)
S9オーバーは+dB10/+dB20/+dB30と示されるが現状は未対応
当初は表示バーをスペースのリバースで表現していたが無信号(S0)状態だと何だか判らないので目印的に文字を表示した(グラフィック表示は処理性能的に最初からやる気なし)
正式な定義ではないがS1毎に+6dBが一般的でS9オーバーはdBμVの場合+20,+40,+60となる(Vの場合は20log,Wは10log)
スプラッシュ
改造版かどうか判断できなくなるので起動時のスプラッシュが「V3.0.8-By PU2CLR」の表示の後「Update Edition X」と変わる
「X」は「A」から始まる版数としている
→
スケッチ
更新は以下の1ファイルのみで,V3.0.8のスケッチに入れ替えてコンパイル
SI473X_ALL_IN_ONE_OLED_RDS_CHINESE_V8.ino(UTF-8N, LF, TAB4)
自分が見易いようにコーディングスタイルを変更(全部ではない)しているが冗長など削除していないので判りにくい部分もあるかも
不具合修正や更に改造したら連絡もらえると幸い,予告なく更新することがあるので了承を
注意事項
kHzより上をメイン周波数(もしくは単に周波数),下をサブ周波数(もしくは単にサブ)と記載
ATA-20の取説やスケッチでは「BFO」と記載されているが厳密には「BFO」ではないのでサブ周波数とした(BFOはSSBを復調するためのキャリア生成器でデジタルでは使用しない)
メイン周波数の変更時は一時的に受信周波数なしになるためか「ザー」と音がする(SDRでも発生することだが周波数値を変更する際のArduino・Si4732間の通信時間が関係するのかと思われる)
周波数を連続的に扱うためサブ周波数を「0 - 999Hz」で使用し1kHz超で基準周波数をアップ(逆はマイナス時にダウン)するように対応したところ1kHzの切れ目で周波数が連続しないことに気付く
どうやら周波数のズレがあるのだろうと思われるが厳密に調査はしていない(例えばVFOで調べてはいない)
※)基準周波数が7101kHzと基準周波数7100kHz+サブ(+1000Hz)は同じ(周波数を受信)ではないということ
影響するのはSWL(アマチュア無線局の受信)のみで,通常はkHz単位の使用すると想定し(-500 - +500Hz)で切り替えるようにした
同様に500Hz単位でも連続しないようだ
上記の対応変更によりSSBからAMに切り替えた際に1kHzの間引きが発生する場合がある
また周波数の終了指定端で問題あるかも(未確認および対応しない)
Sメーター対応は上記(S9オーバーは未対応)
LWバンドはなし
RDSは対応未
Automatic Volume Control は設定変更は未対応だがSSBなどの音量が少ないので機能はONにしている
ロータリーエンコーダの回転方向が当方の基板の場合のみか逆になっていたので回転方向の判定を修正している(648~696行あたり)
// Use Rotary.h and Rotary.cpp implementation to process encoder via interrupt
void rotaryEncoder()
{
// rotary encoder events
uint8_t encoderStatus = encoder.process();
if(encoderStatus) {
if(encoderStatus == DIR_CCW) { //was DIR_CW
encoderCount = 1;
} else {
encoderCount = -1;
}
}
}
FMで周波数SCANを途中で終了させると,稀に変更できない(SCAN単位である)10kHz位置で止まることがある(最後に補正しているのに)
周波数SCANはMW:9kHz, SW:1kHz, FM:10kHzの固定
拙者は縦横が基板と同じの最小サイズで厚みは30㎜の筐体で使用中
ボブ
ATS-20に関する記事,参考にさせていただいております.ありがとうございます.
一つ疑問なのですが,ATS-20に使われているArduino NANOの電源は5Vが必要だと思ううのですが,なぜ3.3Vでも動かすことができるのでしょうか?8MHzで動作するように設定された物を使用しているのでしょうか?もしご存じでしたら,お教えいただけるとありがたいです.よろしくお願いします.