Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

  • 電子工作の初心者として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との互換モードもあるらしいので、互換品としてのニーズを狙った製品なのかも。
dabodabo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした