w412321 发表于 2017-9-22 18:43:42

用RDA5807做个简单的收音机,求助寄存器设置问题

手里有几块数字收音块子RDA5807SP,一直没有用到的地方。
近日,孩子想唱卡拉OK,想做一个近距离无线话筒。
忽然有一个想法,因为其外围电路极其简单,决定用它做个固定频率的收音机,做无线话筒的接收部分。
无线话筒的发射部分用晶体振荡倍频两级放大,距离在家中10米即可。
说做就做,动手画板子,先简单腐蚀了两块5807的接收板。
就是一个基本的5807接收电路,单片机用的是2051,5伏供电串两个二极管后,有3.6伏供给5807.
焊接好原件。电路图如下

w412321 发表于 2017-9-22 18:55:17

单片机我是菜鸟,上网搜了5807的资料,多是英文的,看不太懂。
有搜了5807的一些控制程序,照虎画猫,竟然编译通过了。
本地有一调频台95MHZ,按照PDF文件上的公式,计算好数值,写入单片机。
上机通电试机,竟然响了,收到了电台。
但问题来了,电台的声音一会大一会小。
仔细检查后发现,带电拔掉单片机,收台声音正常。插上单片机,声音忽大忽小。
把5807的8脚SDA数据端对地短路,声音也正常。
分析可能是单片机一直在重复给5807送数据,造成声音忽大忽小的现象。

w412321 发表于 2018-10-9 23:33:09

是的,我的也是5807FP的片子。
正在看11F02的PDF文件,
感觉学编程比我做电路画板子还难,
英文的编程方法老是感觉怪怪的,头疼中:Q

w412321 发表于 2017-9-22 18:59:07

本帖最后由 w412321 于 2017-9-22 19:02 编辑

兄弟我的单片机水平实在是菜,只是刚刚入门。
恳请坛内高手指教。
同时,也请坛内高手仔细讲解一下5807的寄存器设置问题,
用5807做调频收音机,确实电路简单,灵敏度也高,音质也行。
我写了好几个附近的调频电台频率值,收台非常清晰,灵敏度确实不错。

w412321 发表于 2017-9-22 19:36:22

请 yangcheng84坛友指教。
发上来我写的小程序,见笑了。

乙猪 发表于 2017-9-22 19:37:59

取消外循环,只运行一次?

w412321 发表于 2017-9-22 22:16:20

我用的是汇编语言写的,没有外循环

无声岁月 发表于 2017-9-22 23:01:23

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
;-----------------------------------------------------

ylong777 发表于 2017-9-23 11:19:07

不如用的TDA7021A做接收,灵敏度高而且稳频,灵敏度达到3uV,外围元件简单,TDA7021A是锁频环的设计,频率温度度高,卡拉OK无线话筒就是要求接收机频率稳定度高,不然唱着唱着跑频了。:victory:

w412321 发表于 2017-9-23 23:52:58

本帖最后由 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      数据置高

w412321 发表于 2017-9-23 23:55:37


第二段,是往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

w412321 发表于 2017-9-23 23:58:00


第三段,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

w412321 发表于 2017-9-23 23:59:10

送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

w412321 发表于 2017-9-24 00:08:41

ylong777 发表于 2017-9-23 11:19
不如用的TDA7021A做接收,灵敏度高而且稳频,灵敏度达到3uV,外围元件简单,TDA7021A是锁频环的设计,频率 ...

感谢兄台的回复和指教。
之所以用5807这个片子,
一是5807确实 收台灵敏度不低(和CXA1191对比)
二是5807电路很简单,音质也不错。
三是用5807作为学单片机编程练手,
我学会后,把程序贡献给大家,
给不会玩单片机的坛友讲清楚76-108MHZ频点的计算和设置方法,
供大家搞小制作玩。

我刚才发的小程序,写入单片机后,5807就可以收到电台,就是声音抑扬顿挫的:lol

w412321 发表于 2017-9-24 00:17:32

ylong777 发表于 2017-9-23 11:19
不如用的TDA7021A做接收,灵敏度高而且稳频,灵敏度达到3uV,外围元件简单,TDA7021A是锁频环的设计,频率 ...

5807的频率稳定度比TDA7021要好得多。
并且它的价格很便宜,频率范围宽,有的5807的频率范围68-108MHz。
学会单片机控制后,置频很方便。

乙猪 发表于 2017-9-24 00:28:19

所有数据传送完毕后,最后再发送一次置7、8脚低电平,如何??
页: [1] 2 3 4 5 6
查看完整版本: 用RDA5807做个简单的收音机,求助寄存器设置问题