2018年2月17日土曜日

Arduino と FMラジオTEA5767 と AVRマイコンATMEGA8L-8PU 使ってみた

[準備]
 ◆Arduino IDE (PCにインストール無料)
https://www.arduino.cc/en/Main/Software


 ◆Arduino Uno
価格: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 IDE と Arduinoハードをつなぎましょう.



Arduino Unoに ArduinoISP を書き込みましょう
ツール > ボード > Arduino

ツール > シリアルポート > Arduino Unoがつながっているポート

ファイル > スケッチの例 > ArduinoISP> ArduinoISP



◆Atmega8L と Arduino(ArduinoISP) をつなぎましょう.
Atmega8L にブートローダ を書き込みましょう
ツール > 書き込み装置 > "Arduino as ISP"

ツール > ボード > ATmega8

ツール > BOD > Disable

ツール > Clock > "8 MHz internal" 

ツール > シリアルポート > Arduino Uno(ArduinoISP)が接続されているポート

不要(Unnecessaryブートローダ書き込み(to write Boot loader )」
ツール > ブートローダ書き込む
不要(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)





0 件のコメント:

コメントを投稿