LoginSignup
1
0

More than 3 years have passed since last update.

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

Posted at

はじめに

  • 電子工作の初心者としてDSPラジオに挑戦。
  • RDA5807に続いて、AR1019に挑戦。作例も少なく、手探りだったが、Programming Guideもあって、何とか受信に成功。

使用したもの

  • Aitendoさんのモジュール。AR1019-M(http://www.aitendo.com/product/4765)
  • IC(AR1019)のデータシート、Programming Guide。上記のモジュールのページご参照。
  • Arduino Uno互換機(ELEGOO)

モジュールについて

  • DIP化。この変換基板(http://www.aitendo.com/product/11945) を利用。たまたま店頭で見かけたので使いましたが、他にも変換基板あります。
  • セロテープで仮固定し、フラックスを塗布すれば、はんだ付けは難しくないと思います。 20190821_231506.jpg

配線

  • これもモジュールの説明通りにつなぐだけ。イヤフォンに直接出力可能。出力コンデンサはなくても聞こえます。 AR1019.jpg

I2C読込/書込

  • I2C Scannerによると、Slaveアドレスは0x10。
  • 特に変な癖はなく、普通のコードで読み書きできます。連続した読み込み、書き込みもOK。

レジスタ

  • Programming Guideを見てみると、レジスタTableの説明がスカスカで、Default値が何かわからない箇所が多い。このままでは書き込めないので、まず全レジスタを読み込んでみた。
ADR 既定値 ADR 既定値 ADR 既定値 ADR 既定値
00H FFFA 09H 007D 12H 0000 1BH 65B1
01H 5B15 0AH 82C6 13H 5C80 1CH 1010
02H D0B9 0BH 4E55 14H 0000
03H A010 0CH 970C 15H 0000
04H 0780 0DH B845 16H 0000
05H 28AB 0EH FC2D 17H 0000
06H 2400 0FH 8097 18H 0000
07H 1EE7 10H 04A1 19H 0000
08H 7141 11H DF6A 1AH 0000
  • これを見ながら、必要なデータをレジスタに書き込むことになる。
  • 00HがFFFAとなっているので、クロックとしては内部オシレーター(+水晶)を利用する設定であることがわかる。すなわち、このモジュールにマッチした設定になっているので、クロックについては既定値のままでOKのはず。*
  • また、ENABLEビットが0であることもわかる。

Initialization

  • GuideにはICを起動するための手順がいろいろと書いてあるが、このモジュールを立ち上げるには、単純にENABLEビット(00H.0)を1にすればOK。上記の通り、既定値ではこのビットは0になっているので、1を書き込めばよい。
  • 具体的には、00HにFFFBを書き込めばよい。

Tune

  • Guideの"Pseudo Code"に沿って設定する。GuideではSTCフラグを待つことになっているが、ここでは省略しています。
    • hmuteを1にする。すなわち音を消す。01H.1を1にする。
    • 100ms待つ。
    • TUNEビット(02H.9)を0にする。02Hに全て0を書き込む。02Hは後でまた設定する。
    • SEEKビット(03H.14)を0、BAND/SPACEを設定する。03Hに書き込み。
    • CHANを設定し、Tuneビットを1に設定。02Hに書き込み。
    • hmuteをゼロにする。音を出す。
  • 新しい周波数(CHAN)を設定するときは、一旦TUNEを0にする、ということか 思います。

動作コード

  • 特定の周波数を書き込むシンプルなコード。詳細はコードとGuide見てください。
#include <Wire.h>

void setup()
{
Wire.begin();

//Initialization
Wire.beginTransmission(0X10); //slave address
Wire.write(0X00);  //register
Wire.write(0xFF); //00
Wire.write(0xFB); // ENABLE 1
Wire.endTransmission();
// Initialization end

Wire.beginTransmission(0X10); //slave address
Wire.write(0X01);  //register
Wire.write(0x5B); //
Wire.write(0x17); // hmute 1
Wire.endTransmission();

delay(100);

Wire.beginTransmission(0X10); //slave address
Wire.write(0X02);  //register
Wire.write(0x00); // 
Wire.write(0x00); // Tune 0
Wire.endTransmission();

Wire.beginTransmission(0X10); //slave address
Wire.write(0X03);  //register
Wire.write(0xB8); // SEEK 0
Wire.write(0x20); //  SPACE 1 BAND 11
Wire.endTransmission();

Wire.beginTransmission(0X10); //slave address
Wire.write(0X02);  //register
Wire.write(0xD2); // TUNE 1
Wire.write(0x6E); //  69+110*0.1=80
//Wire.write(0x87); //  69+135*0.1=82.5
//Wire.write(0x5c); //  69+92*0.1=78.2
Wire.endTransmission();

delay(100);

Wire.beginTransmission(0X10); //slave address
Wire.write(0X01);  //register
Wire.write(0x5B); //
Wire.write(0x15); // hmute 0
Wire.endTransmission();
}

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

おまけ

  • 本モジュールはIC単体も入手可能。モジュールを自作してみました。はんだ付けが少し面倒でしたが、上手くいきました。
  • 配線は違いますが、同じコードで受信可能です。 20190822_205826.jpg
1
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
1
0