问答

汇集网友智慧,解决技术难题

21ic问答首页 - 有人用过C96xx收音芯片么

收音芯片 xx AC demo ic iic

有人用过C96xx收音芯片么

xzyyyy2025-06-24
本帖最后由 tyw 于 2025-6-24 15:30 编辑

我想知道C9650收音芯片用IIC该怎么驱动啊,如果有Demo的话就更好了,希望各路大神能帮忙解答一下




C9650 收音芯片佰泰盛世.pdf (635.64 KB)



                       tyw 注

回答 +关注 1
305人浏览 6人回答问题 分享 举报
6 个回答
  • 这个不能收ssb啊?
  • hjl2832 发表于 2025-6-24 17:23
    我曾在GITHUB上下载到过市面常见的FM芯片的底层驱动,打包在一起了的,链接忘了。回家去电脑找找看,找到了 ...

    麻烦大师也给我一份
  • 这个手册少了很多东西。估计是遥遥领先的保密
  • 我曾在GITHUB上下载到过市面常见的FM芯片的底层驱动,打包在一起了的,链接忘了。回家去电脑找找看,找到了放到这里来。
  • hbzjt2011 发表于 2025-6-24 13:15
  • 硬件连接
  • SCL → MCU的I2C时钟线

  • 你这个代码五颜六色的,看得人肝儿颤啊,可以用代码模块回复么
    • [size=16.002px]硬件连接

      • [size=16.002px]SCL → MCU的I2C时钟线
      • [size=16.002px]SDA → MCU的I2C数据线
      • [size=16.002px]I2C地址:需查数据手册(常见为 0x40 或 0xC0,7位地址)

    • [size=16.002px]核心操作流程
      [size=12.573px][size=12.573px]c


      复制



      下载






      启动I2C → 发送设备地址() → 发送寄存器地址 → 发送数据 → 停止I2C
    • [size=16.002px]关键寄存器配置
      • [size=16.002px]电源控制:REG 0x00 (需开启音频输出、锁相环等)
      • [size=16.002px]频点设置:REG 0x02~0x03 (计算参考下方公式)
      • [size=16.002px]音量控制:REG 0x05 (通常0x00~0x0F)
      • [size=16.002px]搜索模式:REG 0x04 (设置SEEK位)



    频率计算公式(FM频段)[size=12.573px][size=12.573px]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驱动示例代码[size=12.573px][size=12.573px]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() {  // 可添加按键扫描/频率切换逻辑}


您需要登录后才可以回复 登录 | 注册