~はじめに~
aitendoの"Si4730-M"を使用して、si4730を動かしてみました。
si4730とは、Silicon Labs社のラジオICです。
~苦労したこと~
・"Si4730-M"の足はんだ付けのPIN距離が独自?であるので、
ブレットボードに組み付けつ際、はんだ付けがめんどくさい。
・I2Cのアドレスがわからなかったこと。
→aitendoに添付しているデータシートに記載がない?。
・動作シーケンスを理解するに、データシートを2日読んでいた。
~これから~
・read Statusのチェック処理などをインプリする。
・ハードウェアより周波数を変更できるようにする。
・SNRやRSSIをモニターできるようにする。
・AMラジオが聞けるようにする。
~参考サイト~
シリコンラボのSi4730 のサイト
・si4730 pdf ハードウェアのデータシート
・AN332 pdf Si47xx Programming Guide
~作業中の写真~
~回路図~
RESETとI2Cの2本、電源3.3VとGNDをmbedから配線している。
I2Cには、プルアップ抵抗を入れている。
~美味しいソース~
ソースでわかると思うけど、I2Cマスターはmbed です。
とりあえず、動作する(音がなる)プログラムです。周波数変更は、ソース変更が必要です。
無駄があったりやコメントがおかしいことろがあるかと思いますが、ねじねじだよ。
=======================================
#include "mbed.h"
DigitalOut myled(LED1);
DigitalOut RST_L(p20);
I2C si4730_i2c(p9, p10);
const int addr = 0xc6; // define the I2C Address 0xc6
Serial pc(USBTX, USBRX); // tx, rx
int main() {
pc.printf("\n\nstart\n");
//RESET
RST_L = 1;
wait_ms(200);
RST_L = 0;
wait_ms(1);
RST_L = 1;
char cmd[6];
char buff[16];
//Powerup in Analog Mode
pc.printf("\npowerup in Analog Mode\n");
cmd[0] = 0x01;
cmd[1] = 0x10;//1xxx1xxxx
cmd[2] = 0x05;//00000101 = Analog audio outputs (LOUT/ROUT).
si4730_i2c.write(addr, cmd , 3);
wait_ms(100);//wait
si4730_i2c.read(addr, buff, 16);
pc.printf("ST R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 \n");
for(int i=0; i<=15 ;i++){
pc.printf("%02x ",buff[i]);
}
pc.printf("\n\n");
//GET_REV
pc.printf("GENT_REV\n");
cmd[0] = 0x10;
si4730_i2c.write(addr, cmd , 1);
si4730_i2c.read(addr, buff, 16);
pc.printf("ST R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 \n");
for(int i=0; i<=15 ;i++){
pc.printf("%02x ",buff[i]);
}
pc.printf("\n\n");
//FM_TUNE_FREQ
pc.printf("FM_TUNE_FREQ\n");
cmd[0] = 0x20;
cmd[1] = 0x00;
cmd[2] = 0x1E;//79.3MHz 0x1EFA
cmd[3] = 0x50;
cmd[4] = 0x00;
si4730_i2c.write(addr, cmd , 5);
si4730_i2c.read(addr, buff, 16);
wait(1);//wait???
pc.printf("ST R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 \n");
for(int i=0; i<=15 ;i++){
pc.printf("%02x ",buff[i]);
}
pc.printf("\n\n");
//read 確認
si4730_i2c.read(addr, buff, 16);
wait(5);//wait???
pc.printf("ST R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 \n");
for(int i=0; i<=15 ;i++){
pc.printf("%02x ",buff[i]);
}
pc.printf("\n\n");
//GET_INT_STATUS
pc.printf("GET_INT_STATUS\n");
cmd[0] = 0x14;
si4730_i2c.write(addr, cmd , 1);
si4730_i2c.read(addr, buff, 16);
pc.printf("ST R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 \n");
for(int i=0; i<=15 ;i++){
pc.printf("%02x ",buff[i]);
}
pc.printf("\n\n");
//FM_TUNE_STATUS
pc.printf("FM_TUNE_STATUS\n");
cmd[0] = 0x22;
cmd[1] = 0x01;
si4730_i2c.write(addr, cmd , 1);
si4730_i2c.read(addr, buff, 16);
pc.printf("ST R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 \n");
for(int i=0; i<=15 ;i++){
pc.printf("%02x ",buff[i]);
}
pc.printf("\n\n");
//SET_PROPERTY RX_VOLUME
pc.printf("SET_PROPERTY RX_VOLUME\n");
cmd[0] = 0x12;
cmd[1] = 0x00;
cmd[2] = 0x40;
cmd[3] = 0x00;
cmd[4] = 0x00;
cmd[5] = 0x30;//MAX:0x3F-MIN:0x00
si4730_i2c.write(addr, cmd , 6);
si4730_i2c.read(addr, buff, 16);
pc.printf("ST R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 \n");
for(int i=0; i<=15 ;i++){
pc.printf("%02x ",buff[i]);
}
pc.printf("\n\n");
/*
//SET_PROPERTY FM_DEEMPHASIS
pc.printf("SET_PROPERTY FM_DEEMPHASIS\n");
cmd[0] = 0x12;
cmd[1] = 0x00;
cmd[2] = 0x11;
cmd[3] = 0x00;
cmd[4] = 0x01;
si4730_i2c.write(addr, cmd , 5);
si4730_i2c.read(addr, buff, 16);
pc.printf("ST R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 \n");
for(int i=0; i<=15 ;i++){
pc.printf("%02x ",buff[i]);
}
pc.printf("\n\n");
*/
pc.printf("END\n\n");
}
The 10 Best Casinos Near Harrah's Cherokee Casino & Hotel
返信削除Casinos Near Harrah's Cherokee Casino 서산 출장안마 & Hotel · 화성 출장샵 Casino Hotel in Cherokee, NC · Harrah's Cherokee Casino 부천 출장안마 Resort · Cherokee 통영 출장마사지 Harrah's Cherokee Casino Resort 김해 출장안마 · Casinos Near