|
其实本人接触这个也不久,供应商正好给了个收音机芯片tef6607,所以我就开工尝试了下.
首先介绍下RDS这个东西.它叫radio data system,就是把数字信号调制到模拟信号上然后发射出来,接收端再根据编码原理解调出来,只用
在FM上.编码用的是10位的CRC循环校验码,原理我没什么说的,都是数学,我也没学好.下面稍微讲讲编码结构,详细的请参考相关资料.RDS每
次发送一个组,每个组分4个块A,B,C,D.每个块发送26位数据,是高位先传,高16位是实际数据,低10位为校验字和同步字,用于块组同步.RDS
一共规定了0-15个组.每个组里有一个版型码B0可以把该组分为A和B2个版型.B0码=0:节目识别号PI只插入块1,叫A版本,B0码=1:节目识别号
PI插入块1和块3,叫B版本.
RDS主要发送内容:
1.PI-节目识别号 0组里
2.PS-节目名称 0组里
3.PTY-节目类型 0组里
4.TP-交通节目 0组里
5.TA-交通公告 0组里
6.AF-替换频率 0组里
7.RT-广播文本 2组里
8.CT-日期时间 4组里
9.EON-增强的其他网络信息
等等
下面讲讲我的实现.我用的是atmega128L+nxp的tef6607+tda7330B,tef6607把mpx信号发给tda7330B,tda7330B解出1个bit数据发送中断信号
给单片机,然后单片机读进来解码。首先需要把单片机的外部中断管脚连到tda7330B的SLK上,下降沿出发,然后随便找个管脚连的数据脚把
数据读进来。中断函数里需要处理的是组同步,一旦收到1个块的数据就根据16位数据的位值逐个把该数据的10位同步字和循环校验码阵的
奇偶校验阵H(标准的63页)去异或。异或完后如果结果等于某个块的同步字(64页),则该块的同步结束,得到该块的数据(高16位)。然后去同
步下一个块,4个块都同步后意味着该组同步结束,然后跳出去根据编码结构把数据解出。以上就是解码的基本过程.代码我参考了网上一个
老外写的,用的也是atmega,方便我移植了,能够串口输出,但广播文本只能一个字节一个字节的输出,要输出一句话需要自己改.还有这个芯
片无法每次都正确解出广播文本,有时候会漏字,我看过nxp自己的demo板子,用电脑控制,也无法做到.所以不能一变化马上就更新,否则会很
傻.
有想玩的朋友可以像那个老外一样直接从有mpx信号的收音机上直接取信号下来。
目前国内的RDS节目其实都只是摆摆样子,起码我收过的上海北京是这样,主要就是发发广播文本和时间,关键的AF,TA,TP,EON什么都没有。
上海就2个台发RDS信号,91.4和101.7。101.7连广播文本都省了,时间还快了将近1个小时。91.4晚上11点后就不发了。
(原文件名:P9290212.JPG)
(原文件名:P9290213.JPG)
atmega128L板子和屏用的是以前的。tef6607音质没话说,比tea5767好太多,就是产热太厉害,上面涂了导热胶。目前还没实现自动搜台,
读一些寄存器返回参数不对,不知道为什么。
(原文件名:1317272472309.jpg)
"高德欢迎您",北京也是这样.
(原文件名:1317272480090.jpg)
(原文件名:1317273929720.jpg)
点击此处下载 ourdev_680795PSIV4H.zip(文件大小:19K) (原文件名:atmega168_avr_rds_decoder_rs232_20060629-1.zip)
以上为个人理解,如有不对的地方还请高手纠正。
附件是老外的源码和RDS标准 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。
如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》
|