工作してみた(みる)
FMラジオIC Si4703のテスト
まえおき
Si4703は、Si4700の後継チップで、aitendogoogle で購入できるようだ。いつから売ってたはしらないんだけど、2010年3月29日時点でまだ159点の在庫があるようだ。一個500円。
Si4700チップは、Digikeyから買って、以前にフリスクラジオを作ったときに使ったんだけど(Si4700 FMラジオの試作)、外部クロックを独自に確保しなきゃならないのが面倒だった。
今回は、32.786Khz水晶での内部発振も使えるらしいので、うれしい。値段も安いし。ということでテストしてみた。
制作上の注意
aitendoサイトには、実はデーターシートがない。「詳細データシート」となってるリンクがあるが、そこから入手出来るのは「短縮データシート」(short)で、電気仕様、ブロックダイアグラム、フットプリントが載ってるだけで回路図やプログラム仕様は載っていない。だからといって手がないわけじゃない。別の通販サイトからデータシートを入手できる。
Xtal + 内部発振器を用いないで、外部クロック信号を利用するとすれば、基本、Si4700 FMラジオの試作とかわらない。
今回は、Xtalを使うので、GPIO3とSCLKピンにXTAL+コンデンサ(22pF)をつける。
---
GPIO3+-----XTAL------+SCLK
C C
| |
GND GND
このピン配置を見るにつけ、同じくaitendoで売っている上海製のRDA5800Cが、このSi4703(Si4702)のライセンスをもらって作っているのが分かる。
さて、この外部水晶+内部発振回路を使うためには、レジスタの値設定に一工夫が必要。
07hレジスタで、外部水晶+内部発振回路機能を有効に出来る。D15ビットを1にすればいい。
そのさい、留意すべきは2点。(1)このスイッチは、チップがPowerDown時のみ有効。(2)発振機能をONにしたのち、500msまって、PowerUpすること。なお、07hの13-0ビットには、PowerDown時,PoweUP時それぞれで0x100,0x3c04が予約されている。
Arduinoスケッチで、手順を示すと次のようになる(I2C)。
---
#include <Wire.h>;
#define slaveAddress 0x20 >> 1
void i2c_data_write(int data)
{
Wire.send(data>>8);
Wire.send(data>>0x00FF);
}
void setup()
{
pinMode(RST,OUTPUT);
delay(50);
digitalWrite(RST,LOW);
delay(5);
digitalWrite(RST,HIGH);
delay(50);
Wire.begin();
Wire.beginTransmission(slaveAddress);
i2c_data_write(0x00);//PowerDown
i2c_data_write(0x8000 | (3桁の周波数 - 7600));
i2c_data_write(0x10C0);
i2c_data_write(0x53);
i2c_data_write(0x00);
i2c_data_write(0x8100);//07h<==外部Xtal+内部発振回路
i2c_data_write(0x00);
i2c_data_write(0x00);
Wire.endTransmission();
delay(600);
Wire.beginTransmission(slaveAddress);
i2c_data_write(0xC001);//PowerUP
Wire.endTransmission();
}
void loop()
{
}
なお、PowerUP時には07hの値は15ビットの0/1を残して、自動的に書き換えられるようである。
とりあえずこれで動作した。なおXtal周りの配線は可能な限り太く・短くすること。今回は、裏面に表面実装水晶にて対応。