LoginSignup
2
0

More than 3 years have passed since last update.

SP3777をArduinoで制御 DSP FMラジオモジュール

Posted at

はじめに

  • 電子工作の初心者としてDSPラジオに挑戦。
  • AITENDOさんで入手可能なモジュールを順番にTRY。今回はSP3777に挑戦。作例も少なく、データシートも中国語で苦戦。裏技的な資料を入手して何とか成功。

使用したもの

  • Aitendoさんのモジュール。SP3777-M(http://www.aitendo.com/product/4769)
  • IC(SP3777AHN)のデータシート。上記参照。
  • IC(DX5767)のデータシート。検索してください。
  • Arduino Uno互換機(ELEGOO)

モジュールについて

  • DIP化。この変換基板(http://www.aitendo.com/product/17501) を利用。本来の用途とは違う気もしますが、店頭でみかけたので使っています。念のため、絶縁のため中央部分にはテープを貼って使っています。 20190822_233347.jpg

データシートについて

  • DSP3777AHNのデータシートは中国語でわかりにくい。いろいろ調べていくうちに、「DX5767」とレジスタが同じようだ、ということが判明。
  • 技術的な話も少し載っていて、主としてこのデータシートを使って、コードを書きました。

配線

  • これもモジュールの説明通りにつなぐだけ。イヤフォンに直接出力可能です。出力コンデンサも不要。
  • よく見ると、本モジュールはAR1019とピン配置が同一。代替品としての利用も想定されていたのかもしれません。 SP3777.jpg

Slaveアドレス

  • 本モジュールは2つのアドレスあり。RDA5807に似ています。
    • 0x10 A mode 今回はこちらを使います。
    • 0X60 P mode TEA5767互換モード(ここでは取り扱わず)

I2C通信

  • 本モジュールの 0x10 はレジスタ連続書込/読込用に設定されていて、個別レジスタへの書き込みはサポートされていない(RDA5807と同様)。
  • このアドレスを用いると、自動的に以下のレジスタから連続して書込/読込が行われる。個別のレジスタを指定することはできない。書込:03Hから  読込:00Hから。
  • 書込コード例。このコードで03Hと04Hに書き込まれる。
Wire.beginTransmission(0X10); //slave address
Wire.write(0x44); // 03h
Wire.write(0x81); // 03l
Wire.write(0x7C); // 04h
Wire.write(0xFA); // 04l 82.5
Wire.endTransmission();
  • 読込コード例。このコードで00Hから6バイト読み込まれる。つまり、00H、01H、02Hの3つのレジスタを読み込むことになる。
Wire.beginTransmission(0X10); // slave address
Wire.requestFrom(0x10,6); //n byte read

コード作成のポイント

  • DISABLE=0 ICを起動するにはDISABLEビット(03h.15)にゼロを書き込めばよい。
  • TUNEビット0→1 他のDSPモジュールと同様に、特定周波数をレジスタに書き込む場合、以下の手順を踏む必要がある。
    • まず、TUNEビット(03h.9)をゼロにする。
    • 次に、特定周波数、VOLUME、BNADなどをセット
    • 最後にTUNEビットを1にする。
  • CHANの計算 とにかく50Khzを使って計算する。80Mhzを選ぶなら、CHANは200になる。

動作コード

  • 上記のポイントを考慮して作成した、特定の周波数を書き込むシンプルなコード。3つのレジスタだけ操作すればよく、後はDefaultのままでOK。
  • 03h → 04h → 05h → 03h と書き込めばよいので、連続書込みでも特に難しくはなかった。
  • 今回は、0bxxxxyyyyの形で表記してみた。この方がわかりやすいかも。
#include <Wire.h>

void setup()
{
delay(1000);

Wire.begin();

Wire.beginTransmission(0X10); //slave address
                        //  write starts from 03H
Wire.write(0b01000100); // 03h TUNE 0
Wire.write(0b10000001); // 03l
Wire.write(0b01111100); // 04h
Wire.write(0b11001000); // 04l 80Mhz
//Wire.write(0b11111010); // 04l 82.5
Wire.write(0b10011001); // 05h
Wire.write(0b11000000); // 05l
Wire.endTransmission();

Wire.beginTransmission(0X10); //slave address
Wire.write(0b01000110); // 03h TUNE 1
Wire.write(0b10000001); // 03l
Wire.endTransmission();
}

void loop() {
  // put your main code here, to run repeatedly:
}

おまけ

  • 本ICは台湾製と説明があるが、データシートにはメーカーの表記が見当たらず。中国語のデータシートは何となく意味はわかった。
  • TEA5767との互換モードもあるらしいので、互換品としてのニーズを狙った製品なのかも。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0