Hobby Lab 趣味のモノ作り実験のサイトです。
部品 オペアンプ_関係 Si4735 最初に
1 はじめに
 1.1 装置構成
 1.2 MCU端子表
 1.3 回路図
 1.4 プリントパターン
 1.5 試作
 1.5.1 失敗事例 1枚目
 1.5.2 失敗事例 2枚目
 1.5.3 失敗事例 3枚目
 1.5.4 腐食防止処理
 1.5.5 MCU取り付け失敗!
 1.5.6 ほとんど取り付け確認だ!
 1.6 動作確認
 1.6.1 LCDの動作確認
 1.7 ボード作製
2 プログラミング
 2.1 プログラミング環境
 2.2 変数の扱い方
 2.3 受信強度とSメータ
 2.4 FM,AM主なコマンド手順
 2.5 SSBの受信
 2.5.1 SSBの受信概要
 2.5.2 受信器の概要確認
 2.5.3 パッチの取得
 2.5.4 パッチをEEPROMへ書込
 2.5.5 EEPROMからSi4735へ書込
 2.5.6 周波数設定時の設定
 2.5.7 BFOの周波数設定
 2.5.8 今後
 2.5.9 バッチファイル著作権関係

PrO:Si4735関係  Si4735について
 Si4735ラジオを作って見よう1
 Si4735ラジオを作って見よう2
 Si4735テスト中に判ったこと1
 v コマンド & パラメータ解説 v
 コマンド・プロパティー一覧
 0x01. POWER_UP
 0x10. GET_REV
 0x11. POWER_DOWN
 0x12. SET_PROPERTY
 0x13. GET_PROPERTY
 0x14. GET_INT_STATUS
 0x15. PATCH_ARGS
 0x16. PATCH_DATA
 PATCH の構造
 0x20. FM_TUNE_FREQ
 0x21. FM_SEEK_START
 0x22. FM_TUNE_STATUS
 0x23. FM_RSQ_STATUS
 0x24. FM_RDS_STATUS
 0x27. FM_AGC_STATUS
 0x28. FM_AGC_OVERRIDE
 0x40. SSB.AM_TUNE_FREQ
 0x41. AM_SEEK_START
 0x42. SSB.AM_TUNE_STATUS
 0x43. SSB.AM_RSQ_STATUS
 0x47. SSB.AM_AGC_STATUS
 0x48. SSB.AM_AGC_OVERRIDE
 0x80. GPIO_CTL
 0x81. GPIO_SET
 v プロパティ解説 v
 0x0001.GPO_IEN
 0x0100. SSB_BFO
 0x0101. SSB_MODE
 0x0102. DIGITAL_OUTPUT・・
 0x0104. DIGITAL_OUTPUT・・
 0x0201. REFCLK_FREQ
 0x0202. REFCLK_PRESCALE
 0x1100. FM_DEEMPHASIS
 0x1102. FM_CHANNEL_FILTER
 0x1105. FM_BLEND_STEREO..
 0x1106. FM_BLEND_MONO_..
 0x1107. FM_ANTENNA_INPUT
 0x1108. FM_MAX_TUNE_ERR・・
 0x1200. FM_RSQ_INT_SOURCE
 0x1201. FM_RSQ_SNR_HI_T・・
 0x1202. FM_RSQ_SNR_LO_T・・
 0x1203. FM_RSQ_RSSI_HI・・
 0x1204. FM_RSQ_RSSI_LO・・
 0x1205. FM_RSQ_MULTIPA・・
 0x1206. FM_RSQ_MULTIPA・・
 0x1207. FM_RSQ_BLEND_TH・・
 0x1300. FM_SOFT_MUTE_RATE
 0x1301. FM_SOFT_MUTE_SL・・
 0x1302. FM_SOFT_MUTE_M・・
 0x1303. FM_SOFT_MUTE_S・・
 0x1304. FM_SOFT_MUTE_R・・
 0x1305. FM_SOFT_MUTE_A・・
 0x1400. FM_SEEK_BAND_B・・
 0x1401. FM_SEEK_BAND_TOP
 0x1402. FM_SEEK_FREQ_S・・
 0x1403. FM_SEEK_TUNE_S・・
 0x1404. FM_SEEK_TUNE_R・・
 0x1500. FM_RDS_INT_SOU・・
 0x1501. FM_RDS_INT_FIF・・
 0x1502. FM_RDS_CONFIG
 0x1503. FM_RDS_CONFIDE・・
 0x1800. FM_BLEND_RSSI_S・・
 0x1801. FM_BLEND_RSSI_M・・
 0x1802. FM_BLEND_RSSI_A・・
 0x1803. FM_BLEND_RSSI_R・・
 0x1804. FM_BLEND_SNR_ST・・
 0x1805. FM_BLEND_SNR_M・・
 0x1806. FM_BLEND_SNR_A・・
 0x1807. FM_BLEND_SNR_R・・
 0x1808. FM_BLEND_MULTI・・
 0x1809. FM_BLEND_MULTI・・
 0x180A. FM_BLEND_MULTI・・
 0x180B. FM_BLEND_MULTI・・
 0x1A00. FM_HICUT_SNR_H・・
 0x1A01. FM_HICUT_SNR_L・・
 0x1A02. FM_HICUT_ATTAC・・
 0x1A03. FM_HICUT_RELEA・・
 0x1A04. FM_HICUT_MULTI・・
 0x1A05. FM_HICUT_MULTI・・
 0x1A06. FM_HICUT_CUTOF・・
 0x3100. AM_DEEMPHASIS
 0x3102. AM_CHANNEL_FIL・・
 0x3103. AM_AUTOMATIC_V・・
 0x3104. AM_MODE_AFC_SW・・
 0x3105. AM_MODE_AFC_SW・・
 0x3200. SSB.AM_RSQ_INT・・
 0x3201. SSB.AM_RSQ_SNR・・
 0x3202. SSB.AM_RSQ_SNR・・
 0x3203. SSB.AM_RSQ_RSS・・
 0x3204. SSB.AM_RSQ_RSS・・
 0x3300. SSB.AM_SOFT_MU・・
 0x3301. AM_SOFT_MUTE_S・・
 0x3302. SSB.AM_SOFT_MU・・
 0x3303. SSB.AM_SOFT_MU・・
 0x3400. AM_SEEK_BAND_B・・
 0x3401. AM_SEEK_BAND_TOP
 0x3402. AM_SEEK_FREQ_S・・
 0x3403. AM_SEEK_TUNE_S・・
 0x3404. AM_SEEK_TUNE_R・・
 0x3700. SSB_RF_AGC_ATT・・
 0x3701. SSB_RF_AGC_REL・・
 0x3702. SSB_IF_AGC_ATT・・
 0x3703. SSB_IF_AGC_REL・・
 0x4000. RX_VOLUME
 0x4001. RX_HARD_MUTE

Pr:OPAMP オペアンプ関係
PrO:送受信機  Si4735
PrO:オペアンプ  LM324
 LM358
Pr:Prプロセッサ関係
PrP:プロセッサ
動作比較
 STM32F動作比較
 CH32V203&STM32F 動作比較
 arduino動作比較
raspberrypi関係
 RaspberryPiハード
CH32V関係
 -CH32V開始
 -203K8T6(32Pin)開始
 -203C8T6(48P)開始
 -003J4M6(8Pin)開始
 -003F4P6(20Pin)開始
 -Moun River StudioⅡ
 プログラミング!
  203_GPIO関係
  203_TIME関係
  203_TIME_Encoder
  203_I2C関係
  203_1-Wire関係
  003_DS18B20テスター
  USART(UART)関係
  DS18B20をModBus制御
 -マニュアル
 203データシート
 203取説
  MBA メモリとバス方式
  PWR 電力制御
  RCC リセット・拡張・クロック
  BKP バックアップレジスタ
  CRC 巡回冗長検査
  RTC リアルタイムクロック
  GPIO GPIOと代替機能
  DMA ダイレクトメモリアクセス制御
  ADTM 高度な制御タイマー
  GPTM 汎用タイマー
  BCTM 基本タイマー
  USART 同期非同期通信
arduino関係
 ESP12関係
 (a)ESP-8266D1mini注意
PrP:Memory  24C128(16kB)
PrP:その他  RS485ドライバー
 CP2102 BRIDGE
 WCH-LinkEエミュレーター
Pr:Wire 電線関係
Pr:Resistance 抵抗
Pr:Capacitor コンデンサ
Pr:Coil コイル
Pr:PassiveElmt 受動素子
Pr:Diode ダイオード関係
Pr:Tr トランジスタ関係
2SC1815
 リレードライバー設計
 アンプ設計
 発振器
TLP152
 TLP152テスト
TLP2361
 TLP2361テスト
TLP5754
 TLP5754テスト
Pr:Source 電源関係  ツェナーダイオード
 TL431
 LM317
PrS:Downモジュール
 EGS002_IR2110S
 SKU011012
 ACDC02
 XH_M299
 LM2596
 Mini360_MP23070N
 DROK
 WH140
PrS:UPモジュール
 MT3608
PrS:充電モジュール
 TP4056
Pr:Sensor_AD_時計等
PrS:電圧、電流
ADS1115 16bit4CH I2C A/D
 Hardware
 RaspberryPi_コマンド接続
 RaspberryPi_Python
 Arduino
 CH23V203 MounRiverStudioⅡ
INA226 I2C 直流電圧電流
 Hardware
 Arduino
 RaspberryPi_Python
WCS 電流ホール素子
 Hardware
PrS:温度、気圧、湿度、照度
BNE280 I2C 気圧,湿度,気温
 Hardware
 Arduino
 RaspberryPi_Python
BH1750 I2C 照度
 Hardware
 Arduino
 RaspberryPi_Python
DS18B20 1-Wire 温度計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:時間、日時
DS3231 I2C 時計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:表示器
MAR3953 320X480 3.95"
 概要と線や点を描く
 フォントを描く
SSD1306 I2C 0.96"OLED
 Hardware
 Arduino
 RaspberryPi_Python
Pr:Old Processor他
Ot:Others その他

1 Si4735でラジオを作成

 1.1 装置構成

装置部品名
(1)受信部 Si4735
(2)MCUCH32V203C8T6
(3)表示部MAR3953
(4)外部記憶部24LC64→AT24C512
(5)ダイヤル(選局)Rotary
(6)アンプPAM8403D
(7)電源(5V->3.3V)PQ033EZ1HZ
外部記録部についてはSSB受信のパッチが15KB程度という事からAT24C512へ取替えました。(20260807)

 1.2 MCU端子表


注意事項
この端子表はプリントパターン作成がしやすい様に回路図も含め何回か作り直した。

 1.3 回路図


 1.4 プリントパターン

プリント板は表示器の MAR3953 に合わせ作成した。
現在も以下パターのプリント板を使用していますが、部品取付、プログラム作成中の2026年08月07日までに部品の取替え、配線変更した点、したい点として
①24LC64からAT24C512へ変更及びWPピンをGNDに接続。
③PAM8403Dの取付穴が小さく0.8→1mmとした。スピーカー用の端子がアンププリント板と干渉し取り付けられないので次回はアンプを下へ移動するようパターンの変更をする。
②アンテナコネクターはAM用とFM用の2つとしたい。
いずれ正式パターンを公開したいと思います。

おもてパターン


うらパターン (注意:おもて側から見た裏パターンです)


次にこのパターンから基盤の銅箔を削るためのデータを作成し、工作機でパターンを作成する。
工作機は MITSのFP-7A で動作させるアプリは Windows98 上で動作します。
また今回使用する MCU の pinピッチは 0.5mm パターン幅は 0.3mm のため工作するとき、および半田付けするとき、工作機械および当方の手元、共にネンキによるガタがあり不安です。

 1.5 試作

プリント板の大きさは、横が 113mm × 縦が 65mm です。
1枚作製するのに4時間程度かかりました。
おもて面 失敗しました!

 1.5.1 失敗事例 1枚目

パート1パート2
不具合 Pinのピッチが0.5mmで溝が0.15mmで銅箔部分が0.35mmのはずだが、銅箔を削るミリングカッターの調整不良から銅箔を多く削ってしまったと思われる
部品の取り付け具合を確認したところ、プリント板上側に取り付けのタクトスイッチ(サイドボタン)のパターンの見直しが必要になった。
対策 Pin7番はNRSTなのでオープンでもなんとかなるかもしれない。
Pin8番はVDDAでADCやDAC、PLLなどのアナログ回路だけでなく、高周波RC発振器(内部クロック)などのデジタル動作に必須の回路にも電源を供給しているらしいので作り直す。
次のプリント板試作時に輪郭切削時のリミングカッター掘削幅を0.2mmから0.15mmへ変更する。
ハッチング処理の時の重なり率を20→50%、リミングカッター掘削幅を0.2mmから0.25mmへ変更する。
次のプリント板試作時に再購入したスイッチに合わせパターンの変更をする。

 1.5.2 失敗事例 2枚目

パート1パート2
不具合 MCUのピン幅が0.35でそこから引き出している線は0,3になっている。このため戦艦の切削幅は0.2mmになっている。 このため ハッチング処理が入った可能性がある(全てのミリングカッタの動きを見ていなかったので断定はできない) この部分もパート1と同様 導電部間が0.2mm程度のため
対策 ICの引き出し線幅を全て0.35mmへ変更する。
0.3mm幅の線を全て0.35mmへ変更する。

 1.5.3 失敗事例 3枚目

失敗事例 2枚目と同じような場所で削りすぎが発生したが、ICの引き出し線間の不具合が無くなった。ほかの量が少ないので今回は再試作はせず組み立てを進める。
プリント板加工のミリングカッターの仕様を90度→0.1mm60度を新たに購入してトライするか考えたい。
それまではハッチングの重なり率を50%→30%、ミリングカッタの切削幅を0.2mm〜0.22mmぐらい変更する。

今までの不具合から輪郭およびハッチング処理の時の設定を
輪郭:設定を 0.15mm、実際の削り確認の幅 0.15mm 0.2mmより限りなく0.15mmへ調整
ハッチング:設定を 0.2mm、重ね合わせを 30%、実際の削り確認の幅 0.20mm 0.25mmより限りなく0.20mmへ調整
しかし組み立て中も色々問題が・・・

おもて面

うら面 失敗はなさそう


紫外線照射中の様子

 1.5.4 腐食防止処理

IC取り付け面のパターンの腐食処理です
対応が必要な部分にレジスト処理を行った。
筆で腐食処理面にレジスト液を塗布し、紫外線を照射(ネール用のもので代用,5分程度照射)し硬化させた。
レジスト用と普通の紫外線接着剤との大きな違いは、レジスト用が耐熱性が高いと言うことで、普通の接着剤ははレジストの代用にならないので注意下さい。

施工状況 おもて面


 1.5.5 CH32V203TC8T6取り付け失敗!

仮付けが あまく 半田施工中0.2mm程度傾いてしまい、端子間短絡!!
取り外し方法は! ヒートガンを使用しました。
慌てていたので写真がありません!
ヒートガンは、約330℃に設定して、きれいに取り外すことができました。
新しいCH32V203C8T6を取り付けました。

 1.5.6 ほとんど取り付け確認だ!

右目まぶたが痙攣と手が震えて、半田付けが芋だらけで記録に残すのが嫌ですが・・
残りの部品は5V(5V→3.3V変換含む)関係の電源とロータリーエンコーダの配線です。
2026年5月26日は電源母線3.3VとGND間の抵抗は約280(kΩ)です。
30日から電源を入れ、プログラムを作製していきます。

おおて

開発用WCH-LinkEエミュレータを接続した状態

うら と言うか 表示面


 1.6 動作確認

前回 LCD MAR3953 のフォントを描くテストプログラムのI/O部分を修正し動作させてみた結果
5/30に動作良好を確認することができた。
残りの部品動作確認をして、Si4735のプログラムを開発して行きたい。

 1.6.1 LCDの動作確認

線、四角、円と数字の表示試験結果 良好!

ブレッドボード使用によるプログラム開発装置
今回作製した装置の前の装置動作確認では、ブレッドボードとジャンパー線によるテスト回路構成だったので、タッチパネルの動作確認では、ジャンパー線の接触不良などで動作不良があったが、これで安定した動作確認ができそうだ。!

今回の動作確認のプログラムは整理してから後で添付します。

次の動作確認は
(1)LCDのタッチパネル動作確認
(2)ロータリーエンコーダの動作確認
(3)SWの動作確認
(4)電源回路(5V->3.3V)動作確認
  電源供給をWCH-LinkEから本電源装置から供給
(5)アンプの動作確認
(6)Si4735の動作確認
(7)EEPROM(24LC128)の動作確認
以上が動作OKであれば、Si4735の正式プログラムの開発に取り掛かる。

 1.7 ボード作製

 
ロータリーエンコーダの動作確認をしやすくするため、それぞれを固定するボードを作ることにした。
作製は3Dプリンターで作製することにし、データ作製は初めて使用するFreeCAD1.1.1を使用する。
初めて使用するCADなので、構造は簡単にするため、出来るだけ簡単なボードを合わせる構造として、底面(スピーカー固定用)ボードと表面(LCDとロータリーエンコーダ固定用)ボードの2枚構成としました。
 
3Dプリンターは以前Linux mintで Wine を使用してWindows用の VoxelMakerを使用して動作できた Voxelab Aries で作製する。
フィラメントは歪が少ないPLAを使用した。
出来上がってみれば、コネクターの位置など不具合が多く出てきた。
次回プリントパターン作製するときには、十分配慮したい。




2 プログラミング

 2.1 プログラミング環境

開発環境は Arduino 等を使用せず、MounRiver Studio Ⅱで開発します。
出来るだけライブラリーは使用しないで開発したいと思います。

 2.2 変数の扱い方

Si4735の設定値についてデフォルト値以外で設定し使用するものは、EEPROMに記録、読み出ししやすい配列様式の変数を使用する。
配列の使用方法はEEPROM 24C128 データの書込・読込を参照

 2.3 受信強度とSメータ


メータはSメータとする。
受信強度のdBuVに対しSメータの値へ変換する場合のアンテナのインピーダンスは50Ωとする。
Si4735の受信感度出力は 0〜127dBuVになっている。
この受信機のメータ目盛りついては
Sメータ最低は3.5で0dBuV
最大を+30で64dBuV
LCDで表示するSメータは
0〜128(64×2)ドットでメータを表示することにする。
HFでのアンテナ入力(Sメータ)とdBuVの関係とSメータ目盛値と表示器の線位置、文字位置
SdBuV(50Ω)dBuV(開放)線位置文字位置
+30dB6470256244
+20dB5460216204
+10dB4450176164
9 3440136132
8 2834112108
7 2228 88 84
6 1622 64 60
5 1016 40 36
4 410 16 12
3 -2 4なし
2 -8-2
1 -14-8

 2.4 FM,AMの主なコマンド・プロパティー手順

最低限の受信が出来る主なコマンド・プロパティーを記載する。
下記の手順でコマンド、プロパティーを送信して応答パラメータを確認すれば良い。
I2Cの信号処理については 試験1を参照下さい。
コマンド・プロパティ名 FM AM 備考
CPOWER_UP 0x01,0xD0,0x05 0x01,0xD1,0x05 CTS割込とFM/AMの選択
PSET_PROPERTY,GPO_IEN 0x12,0x00,0x00,0x01,0x00,0xC1 CTS割込フラグクリア
PAM_AUTOMATIC_VOLUME_
CONTROL_MAX_GAIN
-------------- 0x12,0x00,
0x31,0x03,0x3D,0x21
AM AGCゲイン変更
PGET_PROPERTY,PO_IEN -------------- 0x13,0x00,0x00,0x01
PSET_PROPERTY,DEEMPHASIS 0x12,0x00,
0x11,0x00,0x00,0x01
0x12,0x00,
0x31,0x00,0x00,0x01
日本のディエンファシスに設定
周波数変更なし=⑩へ
CTUNE_FREQ 0x20,0x00,
FREQH,FREQL,0x00
0x40,0x00,
FREQH,FREQL,0x00,0x01
-CTS割込確認
CTUNE_STATUS 0x22,0x01 0x42,0x01 CTS割込フラグクリア
CRSQ_STATUS 0x23,0x01 0x4,0x01
R 応答RESP1 7:0 不使用RESP1 7:0 不使用
RESP2 3 SMUTERESP2 3 SMUTE
RESP2 1 AFCRLRESP2 1 AFCRL
RESP2 0 VALIDRESP2 0 VALID
RESP3 7 PILOTRESP3 不使用
RESP3 6:7 STBLEND
RESP4 7:0 RSSIRESP4 7:0 RSSI
RESP5 7:0 SNRRESP5 7:0 SNR
RESP6 7:0 MULTRESPなし
RESP7 7:0 FREQOFFRESPなし


 2.5 SSBの受信

2.5.1 SSBの受信概要

Si4735の内部DSPには元々SSB復調機能がありません。このためSSB復調用のバッチというものを入れる必要があります。
以下にバッチファイルの入手方法から受信までを説明したいと思います。

2.5.2 受信器の概要確認

・MCUはCH30V203C8T6
・I2Cで接続した EEPROM 24C512(容量的には24C256でも良い)
・I2Cで接続した Si4735
・Si4735のRSTは MCUのPB5に接続
・Si4735のGPO2/INTはMCUのPB9に接続

2.5.3 パッチの取得

バッチの作り方がわかりませんでしが、或るバッチによりArduino用のライブラリーを開発され、Si4735の回路説明など公開されているサイトを見つけました。
素晴らしいサイトで作成者はブラジルのアマチュア無線家pu2clrさんです。
そのサイトは pu2clr / SI4735です。

肝心のバッチについては、patch_full.h に記載されている配列データを使用しますが、それを見るとバッチ元は「Vadim Afonkin氏」で公開サイトは Dropboxリポジトリでssb_patches.zipがダウンロードできるようです。
しかしこのバッチの使用についての条件が記載されていませんでした。
「patch_full.h の中身である16進数の羅列(機械語)は、PU2CLR氏が作ったものではなく、半導体メーカーである Silicon Laboratories(シリコンラボ)社 が作成したものらしいです。
使用条件についてよくわからず、最終的にはgoogle AIに確認した結果を2.5.7 に記載します。

2.5.4 パッチをEEPROMへ書込

パッチのデータ配列が記載されている patch_full.h からバッチを読み出し EEPROM へ書き込みを行います。
CH32V203C8T6のプログラム開発ではMounRiver Studio Ⅱを使用しており、プロジェクト名以下のUserディレクトリーにpatch_full.h をコピーします。
書き込みするプログラムの先頭には
#include "patch_full.h"
と記載して使用します。
EEPROMの書き込み回数を削減するためページ書込を使用しました。(1回のページ書込で128バイト書込ができるので通常使用しているバイト書込に比べてEEPROMの書き込み寿命を128倍長持ちできます。)
Fast_Write_Patch_To_EEPROM()を実行することでSi4735へ書き込みを行います。
I/Oの設定は別に記載します。

転送するバッチ は patch_full.h の配列変数内のデータを転送するのですが、配列変数の宣言がArduino用(AVRマイコン用)になっているで下記対策が必要です。
対策: patch_full.h を開き、24行目付近にある PROGMEM という文字を完全に削除(または以下のように書き換え)してください。
 const PROGMEM uint8_t ssb_patch_content[] = { ... };
   ↓
 const uint8_t ssb_patch_content[] = { ... };
Fast_Write_Patch_To_EEPROM(); //SSBバッチファイルを24C512へ転送します。
patch_full.hのバッチデータの数は 8 × (2002行ー24行+1) = 15,832 Byteでした。


2.5.5 EEPROMからSi4735へ書込

(1) 0x01. POWER_UPコマンド実行
私は間違った思い込みで下記3行のルールが判るまで4週間かかりました。
・AM,FMから切り替えてSSBを受信する場合はその都度 0x01コマンドを実行してSi4725にパッチを書込む必要があります。
・0x01コマンドの中で パッチ を書き込む場合は 0x01 の パラメータで PATCH(ARG1,5)を 1 にするこにより、バッチの書込が可能となります。
・0x01コマンドのパラメータで FUNC(ARG1,3:0)を 1(AM) にする必要があるので注意すること。( 15 を設定すると応答パラメータのSTATUSで ERR がでてパッチを書込できません。)

思い込みで脱線した事項
AMとSSBのコマンドではよく似たものがあるため 0x01. POWER_UPコマンドは SSBとAMは同一で、電波形式の切替は0x40 SSB.AM_TUNE_FREQの USBLSB (ARG1,7:6)で切替えれば良いと思っていた。
(しかしAMとSSBは別の物で、AMからFMに切替る時同様、0x11. POWER_DOWNコマンドを実行して 0x01. POWER_UP コマンドを実行する必要があります。)
SSBのバッチをSi4735に書込すると電源を切るまでそのバッチは記憶されているものと思っていた。
(しかし 0x11. POWER_DOWNコマンドを実行すると書き込んだバッチ内容は削除されるようで、SSBからAM(FM)へ切替た後、SSBにする場合は再びパッチを書き込む必要があります。)

(2) Si4735へ書き込み
書込は外付けのEEPROM 24C512から 8 byte ずつ 読み取り、先頭の 1 Byteをコマンドとし、その他 7 ByteをデータとしてSi4735へ書込します。
書込した後、バッチのID番号を確認したい場合は0x10コマンドを実行し応答パラメータのPATCHH(RESP4,7:0)と PATCHL(RESP5,7:0)に16進データで格納されています。
なおこのID番号は patch_full.h の配列変数の最後のデータを見てみると判ります。
書込タイミング等を目で確認したい場合は、 PATCH の構造を確認下さい。

2.5.6 周波数設定時にLSBまたはUSBの設定

周波数の変更は AM同様 0x40コマンドを使用します。
ただし、SSBの場合は、LSBまたはUSBかをここで設定します。
設定パラメータと場所は USBLSB (ARG1,7:6)です。
LSBを選択 = b01、USB = b10 を設定します。
高速チューニングを使用しないコマンドパラメータ値は
 LSBの場合は 0x40,0x40,FREQH,FREQL,0x00,0x00
 USBの場合は 0x40,0x80,FREQH,FREQL,0x00,0x00
上記パラメータを設定することにより次の事項のBFOを使用することができます。

2.5.7 BFOの周波数設定

0x40コマンドの周波数設定は最小で1kHzのためBFOと言うものを使用することにより約10Hz単位で調整できるようになります。
BFOの設定は0x0100のプロパティー SSBBFO (15:0) を使用します。
BFOは16ビットの符号付き値で、単位はHzです(内部BFO分解能は8Hz)。有効なBFO範囲は -16383 Hzから +16383 Hzです。
注意しておきたいのがBFOの値を-にすることにより 周波数的には + 方向です。
例えば、0x40の周波数設定が 7,118 kHz で BFO の 設定が -10,000 とすると、7,128 kHzの周波数を受信していることを示します。
この事については、発振器 SMY02 で AM波を AF1.2kHz 40% の変調をかけて受信してみた結果です。
プログラムするときは注意下さい。
これである程度はSSBが聞けるようになったと思います。

当初間違った思い込みで
周波数を7118kHzに設定しBFOを+10,000にすると7128kHzになると思い込みしていました。
周波数の設定ダイヤルを + 方向へ回すと BFOカウント値 + ステップ値 で加算し、BFOカウントが1,000以上になれば 周波数 + 1 し 0x40で設定し、BFOは -1000 にするようにしていました。
また逆に周波数の設定ダイヤルを ー 方向へ回すと BFOカウント値 - ステップ値 で減算し、BFOカウントが 0 以下になれば 周波数 - 1 して0x40で設定し、BFOは +1000 にするようにしていました。
このため、周波数の切替付近で受信して話声が急に聞こえなくなりました。
最初原因がわからず、発振器を使用した上記実験を実施してようやくBFOの値の使い方が逆であることが判りました。

2.5.8 今後

受信周波数が +600kHzずれているので、原因を確認していこうと思っています。
Si4735に接続している発信子は32.768kHzが接続されており、漏れている電磁波を測定しても32.768kHzだったので基本周波数は異常が無いようです。
またプロパティーも0x0201の内容を見ると0x8000で10進数で32768なので異常ありません。
しかし昔から使っているFT757SXと比べて、感度も良く、SI4735の価格から見れば、この様な受信器を自作で設計するようなことは出来ないと思いました。

2.5.9 バッチファイル著作権関係

Google AIで確認した内容を記載します。
A:パッチデータ(機械語)そのものの著作権について
そもそも patch_full.h の中身である16進数の羅列(機械語)は、PU2CLR氏が作ったものではなく、半導体メーカーである Silicon Laboratories(シリコンラボ)社 が作成したものです。
シリコンラボ社は、自社のIC(Si4735)を購入して使用するユーザーに対して、このパッチデータを「AN332補足資料」などの形で公式・非公式に提供しています。
チップの機能を有効化するために必要な「公開データ」という扱いであるため、ユーザーがこれを別のマイコンからSi4735に送信したとしても、シリコンラボ社から権利侵害で訴えられる可能性は極めて低いです。

Q:シリコンラボ社を見ても不明でしが、なにか確かめれる根拠はありますか

A:パッチデータ(機械語)がシリコンラボ社(Silicon Labs)のものであること、および個人利用において違法性がないと判断できる確固たる「3つの根拠」を解説します。
シリコンラボ社の一般的な製品ページやデータシートだけを見ても明確に書かれていない理由は、このデータが「NDA(秘密保持契約)を結んだ特定の企業顧客向けに配られた、非公開の追加ファームウェア」という特殊な経緯で世に出たためです。
しかし、現在では以下の事実からその身元と安全性を確かめることができます。

根拠1:Silicon Labs公式のコミュニティと「AN332」の存在
パッチデータの正体がシリコンラボ社製である最大の証拠は、同社が発行している公式プログラミングガイド「AN332 (Universal Programming Guide)」の記述と、公式コミュニティでのサポート実績です。
AN332内の仕様一致: patch_full.h に含まれる 0x15 (PATCH_ARGS) や 0x16 (PATCH_DATA) というコマンド体系は、シリコンラボ社が定めた固有のプログラミング仕様と完全に一致しています。
公式コミュニティでのQ&A: 同社の公式サポートコミュニティにおいて、有志が「SiRadioチップでSSBやASK/FSKを復調したい」と要望した際、シリコンラボ社側も「SSB用のパッチ(ファームウェア)は存在する」と言及しています。
Tecsunなどの市販ラジオメーカー(高級短波ラジオなど)に同社がSSB機能付きの特別ファームウェアとして供給していたものがベースとなっています。

根拠2:PU2CLR氏(ライブラリ作者)による公式な免責・出典表記
ライブラリの作者であるRicardo Caratti(PU2CLR)氏は、GitHubの公式ドキュメント(GitHub PU2CLR Si4735)で、このパッチの著作権と由来について明確に書き残しています。
ライブラリ内で使用されているパッチデータは、Vadim Afonkin氏が公開したものであり、同ライブラリのMITライセンスとは別物であると明記しています。
つまり、制御用のC言語プログラムはオープンですが、パッチ自体(16進数データ)はシリコンラボ社および、そこからデータを入手したコミュニティに帰属するという認識です。

根拠3:著作権法上の合法性(私的利用と技術実証)技術的な観点において、このパッチ利用が日本の著作権法(第47条の7「技術の開発又は実証のための利用」、第47条の8「情報処理の効率化等のための複製」)で許容される理由は以下の通りです。
相互運用性: マイコンとSi4735を連動させる目的でパッチをロードする行為は、権利侵害にはあたりません。私的使用: 個人が非営利目的でこのパッチを実験的に利用することは、法的な「公正な利用」の範囲内です。

結論として安心できる理由
本パッチは、シリコンラボ社公式のファームウェアであり、コミュニティを通じて共有されているものです。
この活動によって同社チップの市場が拡大しているため、権利行使はされておらず、個人利用において安全なデータであると判断できます。

Q:回答の「「技術の開発又は実証のための利用(第47条の7)」および「情報処理の効率化等のための複製(第47条の8)」という規定は、かつての著作権法に存在していましたが、平成30年(2018年)の法改正にともない、現在は別の条文へ統合・整理されています。」とのデータもありますが、本件は修正内容に該当しますか

A:ご指摘の通りです。私の前回の回答において、平成30年(2018年)の法改正前の古い条文番号(旧第47条の7、旧第47条の8)を挙げてしまったことは誤りでした。
混乱を招いてしまい申し訳ありません。最新の日本の著作権法(2019年1月施行以降)においては、ご指摘の通りこれらの規定が統合・整理され、現在は「第30条の4(著作物に表現された思想又は感情の享受を目的としない利用)」に該当します。
本件(パッチデータをマイコンに組み込んでSi4735に転送する行為)が、この最新の法改正後の条文にどのように該当し、合法と判断できるのかを正確に整理・修正いたします。

最新の著作権法「第30条の4」への該当性
現在の著作権法第30条の4は、「著作物の表現そのものを鑑賞したり楽しんだり(享受)する目的ではない利用であれば、著作権者の許諾なく自由に使える」という規定(柔軟な権利制限規定、いわゆる日本版フェアユースの一部)です。
本件におけるパッチデータの利用は、この条文の第3号(その他の非享受利用)に完全に該当します。

1. 享受を目的としない利用であること
このパッチデータ(機械語)は、人間が読んで楽しむ小説や、画面で見て楽しむ映画のようなものではありません。
Si4735というハードウェア(DSP)を正しく動作させるための「純粋な技術的データ(信号)」です。
マイコンからSi4735へデータを転送する行為は、データの「表現」を人間が享受するためではなく、「ICの内部回路をSSB受信モードに切り替える」という技術的な結果を得るためだけの利用であるため、第30条の4の対象となります。

2. 「情報処理の効率化」等の目的の引き継ぎ
旧第47条の8(情報処理の効率化等のための複製)で担保されていた、「コンピューターをスムーズに、かつ意図通りに動かすためにデータを一時的・機械的にコピーする行為」も、現在は広くこの第30条の4等に包括されています。
パッチデータをマイコンのフラッシュメモリ(ROM)に保存し、起動時にSi4735のRAMへ転送(複製)する一連の処理は、まさにシステムを動かすための「技術的な必要不可欠なプロセス(非享受利用)」です。
もう一つの法的根拠:「リバースエンジニアリング(第47条の2)」
また、プログラムの著作物に関しては、第47条の2(プログラムの著作物の複製物の所有者による複製等)という規定もあります。
これは、正当にハードウェアやプログラムを入手した所有者が、その機器を自分の環境で「正常に動作させるため」「バグを回避するため」「互換性を保つため」に必要な範囲であれば、プログラムを複製(マイコンに保存して転送)してもよいとする権利です。

結論としての修正
平成30年の法改正により条文の番号や整理の仕方は変わりましたが、「技術的な検証や、機器を動作させる目的で、機械語データをマイコン間で転送・複製する行為は著作権侵害にはならない」という本質的な法解釈は、 法改正によってむしろ「より柔軟に、広く認められる(合法である)」方向で強化されています。
したがって、現在の日本の著作権法に照らし合わせても、PU2CLR氏のヘッダーファイルからパッチデータを抽出してArduino以外の環境で利用する行為は、完全に合法の範囲内となります。

ということでした





































更新日 2026/09/04 09:38  管理者 平林 剛Hirabayashi Takeshi