硬件连接
核心操作流程 c
复制
下载
启动I2C → 发送设备地址(写) → 发送寄存器地址 → 发送数据 → 停止I2C
关键寄存器配置 电源控制:REG 0x00 (需开启音频输出、锁相环等) 频点设置:REG 0x02~0x03 (计算参考下方公式) 音量控制:REG 0x05 (通常0x00~0x0F) 搜索模式:REG 0x04 (设置SEEK位)
频率计算公式(FM频段)c
复制
下载
// 示例:设置FM 101.1 MHzfloat freq = 101.1;uint16_t f_reg = (freq - 70.0) * 20 + 0.4; // 70-108MHz范围uint8_t reg_high = f_reg >> 8;uint8_t reg_low = f_reg & 0xFF;
Arduino驱动示例代码cpp
复制
下载
#include <Wire.h>#define C9650_ADDR 0x40 // 根据实际地址修改// 向寄存器写数据void writeReg(uint8_t reg, uint8_t val) { Wire.beginTransmission(C9650_ADDR); Wire.write(reg); // 寄存器地址 Wire.write(val); // 数据 Wire.endTransmission();}// 初始化芯片void radioInit() { // 电源开启配置 (参考数据手册) writeReg(0x00, 0b10000001); // 开启PLL和音频输出 // 设置FM模式 writeReg(0x01, 0b00000010); // FM频段选择 // 设置音量 (最大) writeReg(0x05, 0x0F);}// 设置FM频率void setFMFrequency(float freq) { if (freq < 70.0) freq = 70.0; if (freq > 108.0) freq = 108.0; uint16_t f_reg = (uint16_t)((freq - 70.0) * 20 + 0.4); writeReg(0x02, f_reg >> 8); // 高8位 writeReg(0x03, f_reg & 0xFF); // 低8位 // 触发调谐 writeReg(0x04, 0b00010000); // SEEK=1开始搜索 delay(100); writeReg(0x04, 0); // 清除SEEK}void setup() { Wire.begin(); radioInit(); setFMFrequency(101.1); // 设置初始频率}void loop() { // 可添加按键扫描/频率切换逻辑}
|