[求助]RX5808接收模块
劳驾用过RX5808接收模块的坛友介绍一下,RX5808接收模块的频率步长能不能设为1MHz,或者说,参考频率能不能工作在500KHz 本帖最后由 mov99 于 2022-10-22 22:02 编辑鼓捣的差不多了
RX5808模块,接收频率:5725~5865MHz;PLL参考频率:1MHz,中频(IF):480MHz(或479MHz)
PLL部份:固定除2分频器
双模除P(32/32)预分频器
除B计数器;除A计数器
P=32,A≤B,0≤A≤P
Lo(本振)=(P*B+A)*2
收接频率=[(P*B+A)*2]+IF RX5808模块主控芯片是RTC6715,芯片含无溢出25位移位寄存器,方便使用单片机硬件SPI串行口写入控制字
控制字格式:DDDDDDDDDDDDDDDDDDDD S AAAA;"D"控制字,"S"读/写位,S=0读操作,S=1写操作,"A"寄存器地址
数据输入:低字节在前,低位在前,SPI串口输出8位/字节,25位控制字分4次传输,实际发送32位
SPI输出数据:xxxxxxxD DDDDDDDD DDDDDDDD DDDSAAAA;"x"为任意值;在SPILE上升沿,控制字送入相应寄存器 有闲工夫再整点
RX5808频率字格式[参考频率缺少值(或默认值)1MHz,Fosc=8MHz,除R=8]
预接收频率5865MHz,先减去中频频率,5865-479=5386,因有前置固定÷2分频器,5386÷2=2693
2693=0xA85=b1010100 00101,验算:高位(除B)b1010100,低位(除A)b00101;b1010100=84,b00101=5
32*84+5=2693,2693*2=5386,5386+479=5865MHz
频率字格式:因双模预分频器P是除 32/33,A<P,所以,A≤31
而芯片内除A计数器是7位,既低5位有效,必需保证5、6bit为0
处理前:b1010100 00101=0xA85,处理后:b1010100 0000101=0x2A05
补充内容 (2022-11-5 15:28):
缺省值(或默认值) 本帖最后由 mov99 于 2022-11-4 15:22 编辑
; MCS-51单片机汇编代码
RTC_REG0equ 0x30 ; 频率字最高位
RTC_REG1equ 0x31
RTC_REG2equ 0x32 ; 最低位
RTC_REG3equ 0x33 ; 预写地址
TEMP_REGequ 0x34 ; 临时
;--------------------------------------------------------------------
org 0x0
sjmp McsJust ; 到初始化
org 0x36 ; 存放起地址
McsJust:mov SP,#0x7F ; 堆栈指针
;---------------------------------
; 接收频率:5795MHz,中频:479MHz
; 5795-479=5316/2=2658=0xA62
mov RTC_REG0,#0x0
mov RTC_REG1,#0xA ; 频率字
mov RTC_REG2,#0x62
mov RTC_REG3,#0x1 ; 预写寄存器地址
mov B,RTC_REG3 ; RTC_REG3的内容->B
setb B.4 ; 4bit=1,写操作
mov RTC_REG3,B ; B->RTC_REG3
;---------------------------------
call NORM_D32 ; 调用格式化
ajmp $
;---------------------------------
; 频率字格式化代码
; 双模预分频器P除32/33;P=32,A≤B,0≤A≤P
; 除A计数器是7位,必需保证5、6bit为0
NORM_D32: mov TEMP_REG,RTC_REG2 ; 备份,待用
clr C
mov A,RTC_REG2
rlc A ; 移出7bit
mov RTC_REG2,A
mov A,RTC_REG1
rlc A
mov RTC_REG1,A
clr C
mov A,RTC_REG2
rlc A ; 移出6bit
mov RTC_REG2,A
mov A,RTC_REG1
rlc A
mov RTC_REG1,A
mov A,RTC_REG2
anl A,#0x80 ; 屏蔽其它位
mov RTC_REG2,A
mov A,TEMP_REG
anl A,#0x1F
orl RTC_REG2,A ; 完成频率字格式化
; 预写数据格式化(发送:低字节在前,低位在前)
mov A,RTC_REG3 ; RTC_REG3内容->A
rl A ; 逻辑左移
rl A
rl A ; 无效高3位移至低3位,待用
mov RTC_REG3,A ; 累加器->RTC_REG3
mov R7,#3 ; 整体右移3次
TO_LOOP:mov A,RTC_REG0
rrc A ; 带进位位右移
mov RTC_REG0,A
mov A,RTC_REG1
rrc A
mov RTC_REG1,A
mov A,RTC_REG2
rrc A
mov RTC_REG2,A
mov A,RTC_REG3
rrc A
mov RTC_REG3,A ; 移出无效低3位
djnz R7,TO_LOOP ; 完成格式化?
ret
;--------------------------------------------------------------------
end
补充内容 (2022-11-5 21:58):
mov SP,#0x6F 本帖最后由 mov99 于 2022-11-5 12:59 编辑
; PIC18Fxxxx汇编代码
RTC_REG0equ 0x20 ; 频率字最高位
RTC_REG1equ 0x21
RTC_REG2equ 0x22 ; 最低位
RTC_REG3equ 0x23 ; 地址、读/写
CARGB2 equ 0x24 ; 临时
;---------------------------------
org 0x0000
bra PICJUST ; 到主代码
org 0x0030 ; 存放起地址
;---------------------------------
; 接收频率:5795MHz,中频:479MHz
; 5795-479=5316/2=2658=0xA62
PICJUST clrf RTC_REG0
movlw 0xA ; 频率字
movwf RTC_REG1
movlw 0x62
movwf RTC_REG2
movlw 0x1 ; 预写寄存器地址
movwf RTC_REG3
call NORM_D32 ; 调用格式化
bra $
;---------------------------------
; 频率字格式化代码
; 双模预分频器P除32/33;P=32,A≤B,0≤A≤P
; 除A计数器是7位,必需保证5、6bit为0
NORM_D32movlw 0x1 ; 预写地址->WREG
movwf RTC_REG3
bsf RTC_REG3,4 ; 4bit=1,写操作
movff RTC_REG2,CARGB2 ; 备份,待用
bcf STATUS,C ; C=0,清进/借位标志
rlcf RTC_REG2,F ; 移出7bit
rlcf RTC_REG1,F
rlcf RTC_REG2,F ; 移出6bit
rlcf RTC_REG1,F
movlw 0x80
andwf RTC_REG2,F ; 屏蔽其它位
movlw 0x1F ; 5、6bit=0,A≤31)
andwf CARGB2,W ; (已备份)->WREG
iorwf RTC_REG2,F ; 合成("或"),完成频率字格式化
; 预写数据格式化(发送:低字节在前,低位在前)
clrf RTC_REG0 ; 清零(高8位在此无效)
rlncf RTC_REG3,F ; 地址及读/写,逻辑左移3位,无效高3位移至低3位
rlncf RTC_REG3,F
rlncf RTC_REG3,F
rrcf RTC_REG0,F ; 整合,带进位位右移3位
rrcf RTC_REG1,F
rrcf RTC_REG2,F
rrcf RTC_REG3,F
rrcf RTC_REG0,F
rrcf RTC_REG1,F
rrcf RTC_REG2,F
rrcf RTC_REG3,F
rrcf RTC_REG0,F
rrcf RTC_REG1,F
rrcf RTC_REG2,F
rrcf RTC_REG3,F ; 移出无效低3位,完成预写数据格式化
return
;---------------------------------
end 来看看最近老师在干啥:lol ITOUR 发表于 2022-11-22 10:38
来看看最近老师在干啥
您客气!老师不敢当,:lol :handshake 我们是同学
RX5808是个5.8G图传接收模块,搞个全段搜索,规避同频干扰 我去搜了下 是个5g图传,不过没玩过无人机啥的,不懂,哈哈 老哥玩的挺广啊。 ITOUR 发表于 2022-11-22 12:09
我去搜了下 是个5g图传,不过没玩过无人机啥的,不懂,哈哈 老哥玩的挺广啊。
玩过一小段时间的航模,能飞起来的都掉没了,这航模玩儿的,只剩下遥控器了:lol 本帖最后由 mov99 于 2022-11-26 19:37 编辑
接收模块试过了,再聊聊数据传输模块
数据传输模块核心芯片是 RTC6705,载波频率5725~5865MHz,由寄存器A、B控制载波频率;芯片含除R计数器、除2固定分频器;双模预分频器P除64/65;除B计数器;除A计数器(或余数吞除)
寄存器A为RF合成器的除R计数器,既参考频率(REF),设:参考时钟(晶振)=8MHz,参考频率=20KHz,则,除R计数器值=8MHz/20KHz=400=0x190;有了参考频率,下一步就是载波频率(了解PLL更详细内容请自行“百度”) 本帖最后由 mov99 于 2022-11-27 15:24 编辑
根据已知载波频率、参考频率(REF=20KHz),求除B、除A计数器的值
载波频率=[(PxB+A)x2]xREF
载波频率控制字(N)=载波频率/参考频率x固定分频;除B=N÷P(取整数);除A=N-(PxB)
设:数据传输载波频率=5865.000MHz(方便整数计数);N=5865000/20*2=146625,B=146625/64=2291(取整数),A=146625-2291*64=1
验算:数据传输载波频率=[(64*2291+1)*2]*20=5865.000MHz
整合,B=2291=0x8F3=b100011110011,A=1=0x01=b0000001,寄存器B控制字=b1000111100110000001=0x47981
5865000÷2÷146625=20(KHz)=REF
本帖最后由 mov99 于 2022-11-29 20:16 编辑
计算要用到的MSC-51汇编子代码
; 24X8位二进制无符号除法
; 除数在R7;被除数及商存放在BARGB0.BARGB1.BARGB2,最高位BARGB0
DIV24X8:mov A,BARGB0
mov B,R7 ; 除数->B
div AB
push ACC
mov BARGB0,B
mov B,#16 ; 循环16次
LOOP16: clr C
mov A,BARGB2
rlc A
mov BARGB2,A
mov A,BARGB1
rlc A
mov BARGB1,A
mov A,BARGB0
rlc A
mov BARGB0,A
mov F0,C
clr C
subb A,R7
jb F0,GO1
jc GO2
GO1: mov BARGB0,A
inc BARGB2
GO2: djnz B,LOOP16
pop ACC
GO3: xch A,BARGB0
ret ; 24X8位二进制无符号乘法
; 乘数在R7,被乘数BARGB0.BARGB1.BARGB2
; 积在BARGB0.BARGB1.BARGB2.BARGB3,最高位BARGB0
MUL24X8:mov A,BARGB2
mov B,R7
mul AB
mov BARGB3,A
mov BARGB2,B
mov A,BARGB1
mov B,R7
mul AB
add A,BARGB2
mov BARGB2,A
clr A
addc A,B
mov BARGB1,A
mov A,BARGB0
mov B,R7
mul AB
add A,BARGB1
mov BARGB1,A
clr A
addc A,B
mov BARGB0,A
ret ; 二进制数转BCD码
; 待转换数在BARGB1.BARGB2.BARGB3,最高位在BARGB1
; 压缩BCD码在R3.R4.R5.R6,最高位在R3
HEX4BCD:mov R7,#24 ; 循环24次
mov R3,#0x0 ; 清零,待用
mov R4,#0x0
mov R5,#0x0
mov R6,#0x0
TO_4BCD:mov A,BARGB3 ; 低8位内容->A
rlc A ; 带C左移
mov BARGB3,A
mov A,BARGB2
rlc A
mov BARGB2,A
mov A,BARGB1
rlc A
mov BARGB1,A
mov A,R6 ; 低位开始,R6的内容->A
addc A,R6 ; BCD码带进位自身相加(相当于乘2)
da A ; 十进制调整
mov R6,A
mov A,R5
addc A,R5
da A
mov R5,A
mov A,R4
addc A,R4
da A
mov R4,A
mov A,R3
addc A,R3
da A
mov R3,A
djnz R7,TO_4BCD ; 已处理完24bit?否,继续
ret
页:
[1]
2