用RDA5807做个简单的收音机,求助寄存器设置问题
手里有几块数字收音块子RDA5807SP,一直没有用到的地方。近日,孩子想唱卡拉OK,想做一个近距离无线话筒。
忽然有一个想法,因为其外围电路极其简单,决定用它做个固定频率的收音机,做无线话筒的接收部分。
无线话筒的发射部分用晶体振荡倍频两级放大,距离在家中10米即可。
说做就做,动手画板子,先简单腐蚀了两块5807的接收板。
就是一个基本的5807接收电路,单片机用的是2051,5伏供电串两个二极管后,有3.6伏供给5807.
焊接好原件。电路图如下 单片机我是菜鸟,上网搜了5807的资料,多是英文的,看不太懂。
有搜了5807的一些控制程序,照虎画猫,竟然编译通过了。
本地有一调频台95MHZ,按照PDF文件上的公式,计算好数值,写入单片机。
上机通电试机,竟然响了,收到了电台。
但问题来了,电台的声音一会大一会小。
仔细检查后发现,带电拔掉单片机,收台声音正常。插上单片机,声音忽大忽小。
把5807的8脚SDA数据端对地短路,声音也正常。
分析可能是单片机一直在重复给5807送数据,造成声音忽大忽小的现象。 是的,我的也是5807FP的片子。
正在看11F02的PDF文件,
感觉学编程比我做电路画板子还难,
英文的编程方法老是感觉怪怪的,头疼中:Q 本帖最后由 w412321 于 2017-9-22 19:02 编辑
兄弟我的单片机水平实在是菜,只是刚刚入门。
恳请坛内高手指教。
同时,也请坛内高手仔细讲解一下5807的寄存器设置问题,
用5807做调频收音机,确实电路简单,灵敏度也高,音质也行。
我写了好几个附近的调频电台频率值,收台非常清晰,灵敏度确实不错。 请 yangcheng84坛友指教。
发上来我写的小程序,见笑了。 取消外循环,只运行一次? 我用的是汇编语言写的,没有外循环 MOV A,55h
LCALL I2C_SEND8BIT
LCALL I2C_ACK
LCALL I2C_STOP
RET
;-----------------------------------------------------
改为:
MOV A,55h
LCALL I2C_SEND8BIT
LCALL I2C_ACK
LCALL I2C_STOP
L1: SJMP L1
;----------------------------------------------------- 不如用的TDA7021A做接收,灵敏度高而且稳频,灵敏度达到3uV,外围元件简单,TDA7021A是锁频环的设计,频率温度度高,卡拉OK无线话筒就是要求接收机频率稳定度高,不然唱着唱着跑频了。:victory: 本帖最后由 w412321 于 2017-9-24 00:12 编辑
无声岁月 发表于 2017-9-22 23:01
MOV A,55h
LCALL I2C_SEND8BIT
LCALL I2C_ACK
感谢无声岁月坛友的回复。
刚才按照您修改的试了,效果不行,收不到台了。
按照我的程序,把单片机插到板子上,可以收到台,就是声音忽大忽小的。
这时候用表测量5807的第8脚,电压从1V到4.96V来回跳变。第7脚电压从4.96到4V左右有个小跳变。
8脚电压跳变的时候,声音一会儿大一会儿小。
把8脚对地短路,声音正常。
拔掉单片机,5807的8脚和7脚都是4.96V,收台声音正常。
下面,我把程序分段复制上来,高手给分析一下,毛病在哪儿。
SDA EQU P3.2 ;;
SCL EQU P3.3 ;;
ORG 0000H
START:
mov p3, #0ffh ;2051P3口P1口全置高
mov p1, #0ffh
setbSCL ;;5807 7脚
setb SDA ;;5807 8脚
lcall yanshi_350ms调用延时
MOV SP,#5fH 堆栈
mov 50h, #11000000b ;工作于5767模式
mov 51h, #2dh ;;;;;;95mhz
mov 52h, #68h ;;;;;;95mhz
mov 53h, #00011000b;;5807寄存器设置
mov 54h, #00010000b;; 5807寄存器设置
mov 55h, #00000000b;; 5807寄存器设置
lcall I2C_WRITE ;调用I2C写入程序
SETB SCL 时钟置高
SETBSDA 数据置高
第二段,是往5807的寄存器送数据,送完调用停止程序
I2C_WRITE: ;;;I2C写入数据
;;
LCALL I2C_START ;发送开始信号
MOV A,50h ;50H送数;
LCALL I2C_SEND8BIT ;;;调用送八位数据
LCALL I2C_ACK ;;;发送接收确认信号
MOV A,51h 51H送数
LCALL I2C_SEND8BIT 送八位数据
LCALL I2C_ACK 发送接收确认信号
MOV A,52h
LCALL I2C_SEND8BIT
LCALL I2C_ACK
MOV A,53h
LCALL I2C_SEND8BIT
LCALL I2C_ACK
MOV A,54h
LCALL I2C_SEND8BIT
LCALL I2C_ACK
MOV A,55h
LCALL I2C_SEND8BIT
LCALL I2C_ACK
LCALL I2C_STOP 调用停止子程序
RET
第三段,I2C送数据的开始信号、停止信号和确认信号
I2C_START: ;;;;;发送开始信号
SETB SCL ;首先确保SDASCL都是高电平
SETB SDA
LCALL yanshi_2
CLR SDA ;先拉低SDA
LCALL yanshi_2
CLR SCL ;在拉低SCL
LCALL yanshi_2
RET
;=======================================================
I2C_STOP: ;;;;发送结束信号
CLR SCL ;首先拉低SCL SDA
CLR SDA
LCALL yanshi_2
SETB SCL ;先拉高SCL
LCALL yanshi_2
SETB SDA ;在拉高SDA
LCALL yanshi_2
RET
;=======================================================
I2C_ACk: ;;;;;发送接收确认信号
SETB SDA
SETB SCL
LCALL yanshi_2
JB SDA,I2C_ACK0
CLR C
SJMP I2C_ACK_END
I2C_ACK0:
SETB C
I2C_ACK_END:
CLR SCL
RET 送8位数据的子程序和延时子程序。
I2C_SEND8BIT: ;;;;;送八位数据
MOV B,#08H
I2C_SEND8BIT_A:
RLC A
MOV SDA,C
SETB SCL
LCALL yanshi_2
CLR SCL
DJNZ B,I2C_SEND8BIT_A
RET
;=======================================================
;---------------------------------------------
yanshi_350ms:mov r7, #50
y350ms_1: mov r6, #255
djnz r6, $
djnz r7, y350ms_1
ret
yanshi_2:mov r7, #50
y150ms_2: mov r6, #50
djnz r6, $
djnz r7, y150ms_2
ret
end ylong777 发表于 2017-9-23 11:19
不如用的TDA7021A做接收,灵敏度高而且稳频,灵敏度达到3uV,外围元件简单,TDA7021A是锁频环的设计,频率 ...
感谢兄台的回复和指教。
之所以用5807这个片子,
一是5807确实 收台灵敏度不低(和CXA1191对比)
二是5807电路很简单,音质也不错。
三是用5807作为学单片机编程练手,
我学会后,把程序贡献给大家,
给不会玩单片机的坛友讲清楚76-108MHZ频点的计算和设置方法,
供大家搞小制作玩。
我刚才发的小程序,写入单片机后,5807就可以收到电台,就是声音抑扬顿挫的:lol
ylong777 发表于 2017-9-23 11:19
不如用的TDA7021A做接收,灵敏度高而且稳频,灵敏度达到3uV,外围元件简单,TDA7021A是锁频环的设计,频率 ...
5807的频率稳定度比TDA7021要好得多。
并且它的价格很便宜,频率范围宽,有的5807的频率范围68-108MHz。
学会单片机控制后,置频很方便。 所有数据传送完毕后,最后再发送一次置7、8脚低电平,如何??