FM收音机模块单片机实现

摘要:
FM收音机模块例行程序解释了设计思想和方法:TEA5767集成电路芯片是飞利浦推出的用于低压应用的数字调谐FM立体声收音机芯片。它采用创新的无线电架构和小型封装。其外围电路简单而强大。它可以通过I2C总线或带微控制器的3线总线控制芯片的内部寄存器。程序总体框图的设计流程如下:电路原理图:整个收音机包括音量调节模块实现电路:收音机模块:如图所示,给出了B-102BC模块图和FM收音机模块的一个微芯片组件的引脚功能表。B-102BC应用模块使用与微控制器的I2C通信。

FM收音机模块例程说明

设计思路和方法:

TEA5767集成电路芯片是Philips公司推出的针对低电压应用的数字调谐FM立体声收音机芯片。它采用创新的收音机架构和小尺寸封装,外围电路简单,功能强大,可用单片机通过I2C总线或3-Wire总线对芯片内部寄存器进行控制。

本实验采用I2C总线对芯片内部寄存器进行控制,结合功能键、数码管、按键1、按键2等模块,完成收音机自动搜台、手动搜台、调节音量,并控制相关频率、音量在数码管上显示。

程序总框图设计流程如下所示:

FM收音机模块单片机实现第1张

电路原理图:

整个收音机包括音量调节模块实现电路:

收音机模块:

如图给出FM收音模块的一种微型贴片元件B-102BC模块图以及引脚功能表。

引脚

功能

引脚

功能

1

GND

6

DATA

2

L-OUT

7

CLK

3

R-OUT

8

BUSMODE

4

MPX

9

W/R

5

ANT

10

VCC

引脚(2)和引脚(3)分别是左右声道输出,引脚(4MPXFM解调器MPX信号输出,引脚(5)接天线,便携式产品中通常将耳机线作为天线。引脚(8)是通信总线类型选择输入端,使用I2C总线时,该引脚接地,引脚(9)不用,只使用引脚(6)和引脚(7)进行通信。采用3-Wire总线时,引脚(8)接高电平,使用引脚(6)、(7)和(9)。B-102BC应用模块与单片机采用I2C通信。

音量调节模块:

采用的是M62429芯片,内部集成调音电路,采用串行数据控制的方法,可以将音量控制在083dB1dB/step)之间,同时也以独立对每个声道音量进行控制。芯片内部电路截图如下:

按键电路模块:

按键12工作:

按键1按键2按下去,引脚KEY1KEY2输出低电平0。在按键12触发进行操作前要对其进行消抖的工作,延时一段时间判断按键12的输出电平,仍为0证明按键已经按下,完成消抖,对于按键1,按下期间显示音量(两位数码管),松开音量加1db;对于按键2,按下期间显示音量(两位数码管),松开音量减1db

功能键工作:

通过A/D获取键值并进行判断,以区别“上”、“下”、“左”、“右”、“确认”五键。监听到监听到“上”键:手动设置频率(增),同时显示当前的频率;监听到“下”键:手动设置频率(减),同时显示当前的频率;监听到“左”键:自动搜索电台(增),同时显示当前的频率;监听到“右”键:自动搜索电台(减),同时显示当前的频率;监听到“确认”键:保存当前电台至存储器供下次上电时读取(增),同时关闭显示;

显示模块:(详见前面已经提供的8位数码管动态显示例程

I/O引脚及相关寄存器配置

IO

  1. 数码管使能引脚:

sbitled_sel=P2^3;

  1. 按键引脚:

sbitKey1=P3^2; //Key1对应触发外部中断0

sbitKey2=P3^3; //Key2对应触发外部中断1

sbitKey3=P1^7; //Key3

  1. EEPROMIIC总线相关引脚:

sbitIIC_SDA=P4^0; //EEPROM中的SDA

sbitIIC_SCL=P5^5; //EEPROM中的SCL

  1. 收音机中IIC总线相关引脚:

sbitFM_CLK=P4^5;

sbitFM_DATA=P2^7;

  1. 音量调节相关引脚:

sbitVal_CLK=P2^5;

sbitVal_DATA=P2^6;

FM读写相关寄存器:

TEA5767内部有一个5字节的控制寄存器,通过对控制寄存器的操作可以设定或改变芯片的工作状态。TEA5767上电复位时默认为静音,控制寄存器所有位为低。当TEA5767HN通过I2C总线与外界交换数据时,TEA5767是从器件,当向TEA5767HN写入数据时,I2C总线地址是C0H,向TEA5767HN读出数据时,读地址是C1H

1)写控制寄存器

当向TEA5767HN写控制字时,按地址和写第15字节顺序进行。先写一个字节的最高位,在时钟下降沿写入的数据有效。下面简单介绍写模式字节的格式:

字节1格式:

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

MUTE

SM

PLL13

PLL12

PLL11

PLL10

PLL9

PLL8

在自动搜台时SM置位1,表示搜索模式,手动的时候设置为0表示不在搜索模式。PLL13PLL8:预置或搜索电台的频率数值的高6位。

字节2格式:

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

PLL7

PLL6

PLL5

PLL4

PLL3

PLL2

PLL1

PLL0

PLL7PLL0:预置或搜索电台的频率数值的低8位。

字节3格式

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

SUD

SSL1

SSL0

HLSI

MS

ML

MR

SWP1

SUD:搜索方向设置。1向上搜索,0向下搜索。

字节4格式:

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

SWP2

STBY

BL

XTAL

SMUTE

HCC

SNC

SI

STBY:待机设置。1待机模式,待机时可减小工作电流。0非待机模式。

设置BL0,表示中国FM波段与美欧接近波段设置。

设置XTAL1对应晶振频率为32.768kHz

字节5格式:

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

PLLREF

DTC

-

-

-

-

-

-

2)读控制寄存器

当向TEA5767读控制字时,同样先读地址,再按顺序读第15字节。读数据时的5个数据字节格式及含义如下。

字节1格式:

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

RF

BLF

PLL13

PLL12

PLL11

PLL10

PLL9

PLL8

RFReady标志位。1表明发现一个电台或搜索到头,0表明未找到电台。在自动获取电台时,以该位为while循环的条件判断,直到搜到台停止对FM五个字节的读取。PLL13PLL8:搜索或预置的电台频率值的高6位(需换算)。

字节2格式:

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

PLL7

PLL6

PLL5

PLL4

PLL3

PLL2

PLL1

PLL0

PLL7PLL0:搜索或预置的电台频率值的低8位(需换算)。

字节3格式:

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

STEREO

IF6

IF5

IF4

IF3

IF2

IF1

IF0

STEREO:立体声标志。1表示立体声,0表示单声道。IF6IF0:中频(IF)计数器结果。

字节4格式:

B7(MSB)

B6

B5

B4

B3

B2

B1

B0(LSB)

LEV3

LEV2

LEV1

LEV0

CI3

CI2

CI1

0

LEV3LEV0:ADC输出电平。CI3CI0:芯片识别,这些位必须置0

A/D获取键值相关寄存器:

P1ASF寄存器:

初始化时,设置P1ASF=P1_7_ADC0x80),即P1.7口为模拟功能A/D使用;

ADC_RES寄存器:

初始化时,设置ADC_RES=0x00;

ADC_CONTR寄存器:

初始化时,设置ADC_CONTR=ADC_POWER|ADC_FLAG|ADC_START|ADC_SPEED_90|ADC_CHS1_7,即对应位都值1,其中ADC_SPEED_90对应SPEED1SPEED0均为1ADC_CHS1_7对应CHS2CHS1CHS0均为1;

代码部分具体实现详见对应的工程文档。

FM读写五字节数据(IIC总线方式)

根据IIC总线协议:首先,总线在空闲的时候,数据线SDA因为有上拉电阻而为高电平;数据线只有在SCL为低时才能变化;SCL为高电平的时候,数据线变化只能是一次传输的起始或停止条件;关于应答信号,主机给从机写时(数据、地址)要应答(SDA为低电平);主机读从机时不需要应答(SDA为高电平)。

1)起始条件:SCL为高电平,SDA由高电平变为低电平;

2)停止条件:SCL为高电平,SDA由低电平变为高电平;

3)一字节写:SCL为低电平,改变SDA的值,延时一小段时间,SCL为高电平,延时一小段时间,SCL为低电平,这完成1bit数据的写;在SCL为低的时候,重复上面的变化,完成一个字节的写;

4)一字节读:SCL为低电平,延时一小段时间,SCL为高电平,延时一小段时间,保存SDA上电平高低,SCL为低电平,这完成1bit数据的读;重复上面的变化,完成一个字节的读;

5)应答信号:在第9个时钟周期,检测SDA(从机占用)的电平,高电平表示非应答(只是延迟一时钟周期);低电平表示应答。

6)五字节按序连续写:启动总线,开始发送从器件写地址(FM收音机模块地址0xc0),从器件应答,再连续按序发送五个字节数据(不同于写存储器),这里只须负责送入数据即可,模块内部决定数据送往哪儿,每个字节发完以后在第九个时钟周期要应答。停止总线。

7)五字节按序连续读:启动总线,开始发送从器件读地址(FM收音机模块地址0xc1),从器件应答,再连续按序读取五个字节数据(不同于写存储器),每个字节发完以后不要应答在第九个时钟周期以延时替代。停止总线。

FM电台频率、PLL值计算

1)由电台频率计算PLL控制字

若已知电台频率为fR,本振频率为fLTEA5767HN的中频频率fI为固定的225kHz。当写模式字节3B4HLSI=1时,采用高本振,fL=fR+fIHLSI=0时,采用低本振,fL=fR-fIPLL控制字由下式计算:

式中,频率单位采用kHzNDEC计算出的是PLL的十进制控制字,编程时须换算成二进制或十六进制写入写模式字节1的低6位和写模式字节2,即可收听到目标电台信号。采用高本振时,取fRfL相加,采用低本振时,取fRfL相减。fREF为参考频率,与芯片使用的晶振频率,XTAL位,PLLREF位设置有关,具体参见下表:

XTAL

PLLREF

参考频率

振荡频率

0

0

5kHz

13MHz

0

1

5kHz

6.5MHz

1

0

32.768kHz

32.768kHz

1

1

32.768kHz

32.768kHz

表中,13MHz32.768kHz为芯片通过控制寄存器XTAL位设置的晶体振荡器频率,6.5MHz为可选择的外部时钟参考频率。

(2)读取电台频率控制字,换算成十进制后显示电台频率

搜索到一个电台后,可以读出控制寄存器的5个字节数值,获得电台的所有信息。其中第12字节包含电台频率的PLL控制字二进制值。将其转化成十进制值,然后再利用下面的公式即可计算出电台实际频率。

式中,频率单位采用kHz。高本振时,括号中用减号,低本振时,括号中用加号。fRfLfIfREF分别为电台频率、本振频率、中频频率、参考频率。将得出的fR送到LED数码管或LCD液晶即可显示出电台实际频率。

免责声明:文章转载自《FM收音机模块单片机实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android双系统实现CentOS 6.0升级firefox浏览器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

自己用C语言写单片机PIC18 serial bootloader

了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。 HyperBootloader_PIC18_J 和 HyperBootloader_PIC18_None_J 完成PIC16 bootloader (详细情况请阅读我的上一篇随笔《...

【单片机】【710】定时器

现在开始看710,我觉得看一个单片机还是先从定时器、振荡器、中断和器件配置这些基础的部分入手。 首先最应该知道的内容就是定时器如果选择了系统时钟,且分频比为1,则F = 1/40Mhz,每0.025us定时器的累加器加一 710的定时器分了3类,大概是有点多才分了类吧,它有9个定时模块 A类:Timer1 B类:Timer2、4、6、8 C类:Timer3...

SmartTimer——一种基于STM32的轻量级时钟调度器

一直以来,都渴望为开源世界贡献自己的作品,但总是心有顾虑。首先是之前一直忙碌于公司的项目,没有时间做自己的东西,公司利益为先,确实也没法开源;二是总觉得自己的代码丑陋,不够优雅、简洁。怕贴出来后贻笑大方。 最近一段时间没有那么忙了,于是有时间把以前的积累沉淀一下。对之前做过的项目会有更多的反思。比如, 怎么做才能把业务逻辑和工具组件分开,使工具组件可以...

单片机用定时器分配任务的程序结构总结

转载请注明本文地址:http://blog.sina.cn/dpool/blog/s/blog_6f2b6ba80101bwka.html?vt=4 http://blog.sina.cn/dpool/blog/s/blog_6f2b6ba80101bwka.html?vt=4本文是2013年写的,后来整理成了系统文章,请访问 http://nicekwe...

STM32通过ULN2003对步进电机进行控制

1 前言 本实验是基于STM32103芯片和ULN2003进行对步进电机的控制。 2 ULN2003的基本介绍 2.1 ULN2003的概述 ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。一般采用DIP—16 或SOP—16 塑料封装。 ULN2003的主要特点: ULN2003 的每一对达林顿都串联一个2.7K 的基极电...

单片机中断的IE和IP寄存器(摘抄)

收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 一、中断允许寄存器IE    CPU对中断源的开放或中断屏蔽的控制是通过中断允许寄存器IE设置的,IE既可按字节地址寻址(其字节地址为A8H),又可按位寻址。AT89S52单片机中的6个中断矢量都是可屏蔽中断,通过对IE的某些位置位和清0,允许或禁止某个中断,当对IE的EA位清0时...