[準備]
◆Arduino IDE (PCにインストール無料)
https://www.arduino.cc/en/Main/Software
◆Arduino Uno
→
◆Arduino IDE (PCにインストール無料)
https://www.arduino.cc/en/Main/Software
価格:0.6MONA(送料含まず)
価格:570DOGE(送料含まず)
◆USBケーブル
◆FMradio モジュール TEA5767HN
価格:0.5MONA(送料含まず)
価格:470DOGEA(送料含まず)
◆ATMEGA8L-8PU
価格:0.25MONA(送料含まず)
価格:240DOGE(送料含まず)
◆その他(other)
LED: x2
ohm:1M x2、6.8k x6
コンデンサ(Capacitor): 104 x1、105 x2
タクトスイッチ(TactSwitch): x2
イヤホンジャック(Earphone Jack): x1
電池(battery)
アンテナ(antenna)
イヤホン(earphone)
工作開始
◆Arduino IDE で ATMEGA8L 使えるようにする
ツール > シリアルポート > Arduino Unoがつながっているポート
ファイル > スケッチの例 > ArduinoISP> ArduinoISP
◆Atmega8L と Arduino(ArduinoISP) をつなぎましょう.
◆Atmega8L にブートローダ を書き込みましょう
ツール > 書き込み装置 > "Arduino as ISP"
ツール > ボード > ATmega8
ツール > Clock > "8 MHz internal"
ツール > シリアルポート > Arduino Uno(ArduinoISP)が接続されているポート
↓不要(Unnecessary) 「ブートローダ書き込み(to write Boot loader )」
ツール > ブートローダ書き込む
ツール > 書き込み装置 > "Arduino as ISP"
ツール > ボード > ATmega8
ツール > BOD > Disable
↑不要(Unnecessary) 「ブートローダ書き込み(to write Boot loader )」
◆Atmega8L にスケッチ を書き込みましょう
/*
This sketch
Created on 17 February 2018
by dd647
*/
#include <Wire.h>
//TEA5767HN 76~108MHz
//Japanese FM band 76~91MHz
//US/Europe FM band 87.5~108 MHz
//int DATA[6]//{0x00,0x29,0xED,0xf0,0x30,0x00} Japanese FM band
//int DATA[6]//{0x00,0x29,0xED,0xf0,0x10,0x00} US/Europe FM band
int DATA[6] = {0x00, B101001, B11101101, 0xf0, 0x30, 0x00};
////DATA[0] = dummy, DATA[1~5] = "DATA-BYTE(1~5) data sheet TEA5767"
int PLL = 0;
byte r;
//**********************
void setup() {
Wire.begin();
writeMode();
DDRB = B11111100;//出力ピン10~13,入力ピン8,9(Output pins 10~13, Input pins 8,9)
}
//**********************
void loop() {
if (digitalRead(8) == 0){//push switch1
r = 54;//preset()
}
if (digitalRead(9) == 0){//push switch2
r = 53;//search()
}
switch(r){
case 53:
search();
break;
case 54:
preset();
break;
default:
break;
}
r=0;
delay(900);
}
//**********************
void search(){
DATA[1] = (DATA[1] | B01000000);
int Beforepll=0, Afterpll=0, ud=0;
if (plltoHz(PLL)<=76){
DATA[3] = DATA[3] | B10000000;
writeMode();
}
if (91<=plltoHz(PLL)){
DATA[3] = DATA[3] & B01111111;
writeMode();
}
ud = DATA[3] >> 7;
if(ud==0){
ud = -1;
}
do{
flashLED2();
PLL = PLL + (1 * ud);
Beforepll = PLL;
plltod12();
writeMode();
delay(900);
PORTB &= B11110111;
delay(900);
Afterpll = readMode();
}while((Beforepll==Afterpll) && ( (76<plltoHz(PLL)) && (plltoHz(PLL)<91) ) );
do{
Beforepll = Afterpll;
Afterpll = readMode();
}while(Beforepll != Afterpll);
PLL = Afterpll;
plltod12();
}
//**********************
void preset(){
flashLED();
DATA[1] = (DATA[1] & B10111111);
byte presetNo;
switch(presetNo){
case 0:
PLL = hztoPll(81.3);//J-WAVE
plltod12();
writeMode();
presetNo = 1;
break;
case 1:
PLL = hztoPll(78.0);//ベイエフエム
plltod12();
writeMode();
presetNo = 2;
break;
case 2:
PLL = hztoPll(80);//エフエム東京
plltod12();
writeMode();
presetNo = 3;
break;
case 3:
PLL = hztoPll(82.5);//日本放送協会
plltod12();
writeMode();
presetNo = 4;
break;
case 4:
PLL = hztoPll(83.0);//エフエム富士
plltod12();
writeMode();
presetNo = 5;
break;
case 5:
PLL = hztoPll(89.7);//InterFM--外国語放送
plltod12();
writeMode();
presetNo = 6;
break;
case 6:
PLL = hztoPll(90.5);//TBSラジオ
plltod12();
writeMode();
presetNo = 7;
break;
case 7:
PLL = hztoPll(91.6);//文化放送
plltod12();
writeMode();
presetNo = 8;
break;
case 8:
PLL = hztoPll(93.0);//ニッポン放送
plltod12();
writeMode();
presetNo = 9;
break;
case 9:
PLL = hztoPll(77.1);//放送大学学園
plltod12();
writeMode();
presetNo = 0;
break;
}
delay(500);
PORTB &= B11111011;
}
//**********************
void writeMode(){
Wire.beginTransmission(0x60);//IC address: 110 0000b//page11 data sheet TEA5767
for(int i=1; i< 6; i++){//Write mode:Fig8. page14 data sheet TEA5767
Wire.write(DATA[i]);
}
Wire.endTransmission();
}
//***********************
double readMode(){
int D[6]={0,0,0,0,0,0}, pll=0;
byte j=0, k=0;
Wire.requestFrom(0x60, 5);////Read mode:Fig10. page16 data sheet TEA5767
while(Wire.available()){
j = Wire.read();
k = k+1;
D[k] = j;
}
pll = ((D[1] & B00111111)<<8) + D[2];//PLL13~PLL0:page16 data sheet TEA5767
return pll;
}
//**********************
void plltod12(){
DATA[1] = (PLL >> 8) + (DATA[1] & B11000000);
DATA[2] = PLL & 0x00FF;
}
//***********************
double plltoHz(int pl){
double d;
d = ((pl*32768.00/4.00)-225000.00)/1000000.00;//page30 data sheet TEA5767
return d;
}
//***********************
int hztoPll(double hz){
int p;
p = ((hz*1000000)+225000)*4/32768;//page30 data sheet TEA5767
return p;
}
//**********************
void flashLED(){
PORTB |= B00000100;
}
void flashLED2(){
PORTB |= B00001000;
}
◆TEA5767 と ATMEGA8 をつなぎましょう
◆操作説明(How to use)