[準備]
◆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)




























