RDA5807M收音机调试教程 您所在的位置:网站首页 收音机开发板收音调试教程 RDA5807M收音机调试教程

RDA5807M收音机调试教程

2024-06-28 23:00| 来源: 网络整理| 查看: 265

本博文通过解析RDA FM原厂驱动RDA_FM5807P_drv_V3.3代码来进行讲解,实现RDA5807N系列收音机,可以通过读ID的方式兼容RDA5807P、RDA5807SP、RDA5807SS、RDA5807H系列、RDA5807N系列。

以RDA5807M为例,使用I2C通讯方式

RDA5807M调试教程 一、RDA5807M1、RDA5807M简介2、RDA5807M通讯时序图3、RDA5807M寄存器①、00H寄存器②、02H寄存器③、03H寄存器④、04H寄存器⑥、05H寄存器⑦、0AH寄存器⑧、0BH寄存器 二、程序编写1、软件模拟I2C代码2、RDA5807M功能代码①、相关宏定义②、全局变量,初始化寄存器的值③、I2C连续读/写代码④、RDA5807M初始化代码⑤、设置当前FM频道的音量⑥、返回当前FM频道的信号强度⑦、判断当前频率是否是一个电台⑧、设置频率⑨、把信道值转换成频率值⑩、把频率值转换成信道值⑪、设置静音模式⑫、关机功能⑬、从0AH寄存器中读取当前频率 3、主函数

一、RDA5807M 1、RDA5807M简介

功能特点: A、 采用通用的102BC模块的封装,用户可直接替换使用,无需更改电路设计。 B、 灵敏度高、噪声小、抗干扰能力强、外接元件极少、体积小(11*11.2MM Max)、使用极其简单。 C、 76-108MHz全球FM频段兼容(包括日本76-91MHz和欧美87.5-108.5MHz)。 D、 I2C串行数据总线接口通讯,支持外部基准时钟输入方式。 E、 完全整合的COMS工艺单晶片集成电路,功耗极小。 F、 内置高精度A/D(模数转换器)及数字频率合成器。 G、 内置LDO调整、低功耗、超宽电压使用范围(2.7-3.6VDC)。 H、 内置噪声消除、软静音、低音增强电路设计。 I、 高功率32Ω负载音频输出,直接耳机驳接,无需外接音频驱动放大。 J、 应用简便、成本低,性价比高。

本次实验所用到的RDA5807M模块,如下图: 在这里插入图片描述 模块引脚图,如下图: 在这里插入图片描述

2、RDA5807M通讯时序图

RDA5807M通讯,datasheet给出的是I2C连续读写的方式。 RDA5807M 的 I2C 接口中寄存器的地址是不可见的。RDA5807M 的 I2C 接口有一个固定的起始寄存器地址(写操作时为 02H,读操作时为 0AH),并有一个内部递增计数器。

在这里插入图片描述

3、RDA5807M寄存器

RDA5807M每个寄存器都是16位的寄存器,高位在前,低位在后。 这里只介绍需要用到的几个寄存器。

RDA5807M 的 I2C 接口中寄存器的地址是不可见的。RDA5807M 的 I2C 接口有一个固定的起始寄存器地址(写操作时为 02H,读操作时为 0AH),并有一个内部递增计数器。

①、00H寄存器

在这里插入图片描述

②、02H寄存器

在这里插入图片描述

③、03H寄存器

在这里插入图片描述

④、04H寄存器

在这里插入图片描述

⑥、05H寄存器

在这里插入图片描述

⑦、0AH寄存器

在这里插入图片描述

⑧、0BH寄存器

在这里插入图片描述

二、程序编写 1、软件模拟I2C代码

相关宏定义,数据类型重定义

#define ACK 0 #define NACK 1 sbit SDA = P3^2; sbit SCL = P3^3; typedef unsigned char uint8; typedef unsigned short int uint16; typedef short int int16; typedef unsigned int uint32; typedef int int32; typedef int bool;

软件模拟I2C

//产生START信号 void IIC_Start(void) { SDA = 1; //需在SCL之前设定 SCL = 1; //硬件进入SDA检测状态 delay_5us(); //延时至少4.7us SDA = 0; //SDA由1->0,产生开始信号 delay_5us(); //延时至少4us SCL = 0; //SCL变为无效 } //产生STOP信号 void IIC_Stop(void) { SDA = 0; //在SCL之前拉低 SCL = 1; //硬件进入SDA检测状态 delay_5us(); //至少延时4us SDA = 1; //SDA由0->1,产生结束信号 delay_5us(); //延时至少4.7us } //由主向从发送应答码 //0-ACK,1-NAK void IIC_Send_ACK(bit ack) { SDA = ack; //产生应答电平 delay_5us(); SCL = 1; //发送应答信号 delay_5us(); //延时至少4us SCL = 0; //整个期间保持应答信号 } //取得由从到主的应答码 bit IIC_Get_ACK(void) { bit ret; //用来接收返回值 SDA = 1; //电阻上拉,进入读 delay_5us(); SCL = 1; //进入应答检测 delay_5us(); //至少延时4us ret = SDA; //保存应答信号 SCL = 0; return ret; } //写IIC总线写1个字节 bit IIC_Write_Byte(uint8 dat) { bit ack; uint8 loop = 8; //必须为一个字节 while(loop--){ // 高在前低在后 if (dat & 0x80) SDA = 1; else SDA = 0; delay_5us(); SCL = 1; delay_5us(); //延时至少4us SCL = 0; dat


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有