#はじめに
- 電子工作の初心者としてDSPラジオに挑戦。
- メジャーなモジュールは一通りさわってみたので、作例の少ないICにも挑戦。データシートがあれば何とかなりそう。
- 今回のCHIPは外部からクロックを供給する必要あるため、32.768kHzの水晶発振回路を利用しています。他記事をご参照ください。
#Chipについて
- 今回はQN8035。中国のメーカー(Quintic)なのかな? ChipはAliexpressで調達。10個で210円(送料込み)。安すぎ。
- Aliexpressで検索すると、多数出てくるので、中国ではメジャーなChipなのかも。百度で検索すると資料が出てくるが、利用しにくい。
- Aitendoさんで同じ会社のQN8065というChipを販売していますが、データシートが心許ない感じ。調べてみると、このQN8035については、データシートがそろっていたので、こちらのChipを選んでみました。
- 実はQN8065も入手したのですが、試行錯誤の上受信に成功しました。時間があれば別途投稿します。
#使用したもの
- QN8035 Quintic社 Aliexpress
- AitendoさんのDIP化基板(http://www.aitendo.com/product/17448)
- IC(QN8035)のデータシート 検索してください。
- パスコン 0.1μF
- Arduino Uno互換機(ELEGOO)
- 32.768kHzの水晶発振回路
#DIP化
- Chipが0.5ミリピッチなのではんだ付けは少し苦労しました。AitendoさんのDIP化基板を利用。* パスコン(0.1μF)を空中配線しています。
- パスコン以外はそのままはんだ付けしています。本CHIPは出力コンデンサも不要で、そのままイヤフォンで聴けます。
#配線
#I2C通信、Slaveアドレスについて
- ArduinoのI2C Scanner によると、Slave addressは"0X10"でした。
- I2C通信は、普通のコードで読み書きともOK。下にあるように、各レジスタが1バイトなのですが、特に難しいところはありません。コード例は割愛します。
#コード作成のポイント
- このCHIPもレジスタにデータを書き込むことで制御しますが、他のモジュールと違い「各レジスタは1バイト」となっています。他モジュールでは2バイトのことが多いのですが、本CHIPは1バイト。
- コードとしては特に難しいことはなく、「レジスタ番号」+「1バイトデータ」の形でOkです。
- 幸いなことにデータシートにPrograming Guideもあるので、それに従ってコードを書けばよい。
- ①まず初期化。ソフトウェアリセットを行うことで、各レジスタが初期値になる。具体的には、レジスタ00h[7]を1にすればよい。
- 次にクロック周波数の選択ですが、初期値が32.768kHzなので、ここでは操作不要。
- ②次に周波数を書き込み。「(周波数-60)/0.05」を07hと0Ahに分けて書き込みます。80mHzならば、400(=190h)を次のように書込み。0Ah:01, 07h:90。
- ③ChipをReceiveモードに。同時に、SEEK機能をOFFにして、Manual選局を選択。具体的には00hに0b00010001を書き込めばよい。
- ④ボリュームの設定など。MUTEをオフにして、ボリュームを適当に設定する。具体的には14hに0b00000111等と設定する。
- 以上で受信できるはず。クロックなど初期値のままで変更不要なため設定項目は意外と少ない。
#動作コード
- 特定の周波数を書き込むシンプルなコード。レジスタの書き込みにWhile文を使ってみました。
#include <Wire.h>
const unsigned int QN8035[]=
{
0x00,0x80, // initialize ①
0x0a,0x01, // 80.0mHz ②
0x07,0x90, //
//0x0a,0x01, //82.5 ②
//0x07,0xC2, //
0x00,0b00010001, // receive, seek0 ③
0x14,0b00000111, //mute0,de50,vol111 ④
0xff,0xff,
};
void setup() {
Wire.begin();
int i=0;
while (QN8035[i] !=0xff) {
Wire.beginTransmission(0x10); // slave address 0x10
Wire.write(QN8035[i]); // Register i
Wire.write(QN8035[i+1]); // data
Wire.endTransmission(); //
i+=2;
delay(100);
}
}
void loop() {
}
#おまけ
- 少しノイズが多い気がしました。Arduinoからの電源を(USBを抜いて)乾電池経由にすると、Noiseが減少したように感じました。
- 本件は、水晶発振回路の作成や、Chipのはんだ付け、データシートの読込など、かなり自力で作業することができ、楽しかったです。