mov99 发表于 2022-10-20 20:39:51

[求助]RX5808接收模块

劳驾用过RX5808接收模块的坛友介绍一下,RX5808接收模块的频率步长能不能设为1MHz,或者说,参考频率能不能工作在500KHz

mov99 发表于 2022-10-22 22:00:41

本帖最后由 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

mov99 发表于 2022-10-30 12:11:08

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上升沿,控制字送入相应寄存器

mov99 发表于 2022-10-31 11:05:34

有闲工夫再整点

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 13:28:40

本帖最后由 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:00:02

本帖最后由 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

ITOUR 发表于 2022-11-22 10:38:45

来看看最近老师在干啥:lol

mov99 发表于 2022-11-22 12:05:19

ITOUR 发表于 2022-11-22 10:38
来看看最近老师在干啥

您客气!老师不敢当,:lol :handshake 我们是同学

RX5808是个5.8G图传接收模块,搞个全段搜索,规避同频干扰

ITOUR 发表于 2022-11-22 12:09:19

我去搜了下 是个5g图传,不过没玩过无人机啥的,不懂,哈哈 老哥玩的挺广啊。

mov99 发表于 2022-11-22 12:21:47

ITOUR 发表于 2022-11-22 12:09
我去搜了下 是个5g图传,不过没玩过无人机啥的,不懂,哈哈 老哥玩的挺广啊。

玩过一小段时间的航模,能飞起来的都掉没了,这航模玩儿的,只剩下遥控器了:lol

mov99 发表于 2022-11-26 19:16:46

本帖最后由 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 14:01:21

本帖最后由 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:14:49

本帖最后由 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

mov99 发表于 2022-11-29 23:43:28

; 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

mov99 发表于 2022-12-1 18:32:51

; 二进制数转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
查看完整版本: [求助]RX5808接收模块