超再生无线模块就是上图的产品,在淘宝上很便宜,1块多就可以买一对。我买了2对,本以为很容易就可以搞定,
编程序对我来说并不是难事,谁知道搞了好几天都没搞定。
1.首先我是用面包板测试,在发送模块的数据输入端和vcc之间接一个按键模拟输入,接收模块的数据输出端接万用表正极,
每次按下按键,按键接通,万用表会跳动一下不超过2V,接着断开按键,万用表会跳到3.5V左右的位置,再慢慢回到零。
这说明发送模块和接收模块是能够通讯的。
2.接下来我换上单片机,接收模块和单片机相连,接收模块的VCC和GND都直接连到单片机开发板上的VCC和GND接口,万用表的正极还是接发送模块的数据输出口,负极接开发板的GND,发送模块还是用面包板,结果无论怎么按键,万用表指针总是在2V左右摆动。我以为是单片机开发板的电源问题,
把接收模块的VCC和GND和一个单独的5V电源连接,5V电源的GND和单片机的GND相连(是不是要这样共地?),发送模块按键后,可以测得万用表指针会跳到3.5V左右再回零。接下来我把接收模块的数据输出端连接到单片机的一个输入端口,写了一段代码测试端口电平是否变化,结果不管发送模块怎么发送,单片机输入端口都无法测得有电平变化(除刚开始复位后运行代码输入端口会有变化)。
因为本人以前是做软件的,刚学习单片机几个月,对模电数电知识懂得不多,不知道上面的接线法是否正确,正确的方法应该怎样做才能接收到信号?请各位不吝指教,多谢了!
代码是用ATMEGA128汇编写的,很简单:
.EQU SRG_R_DDR=DDRE
.EQU SRG_R_DDR_DA=DDE2
.EQU SRG_R_PORT = PORTE
.EQU SRG_R_PORT_DA = PORTE2
.EQU SRG_R_PIN = PINE
.EQU SRG_R_PIN_DA = PINE2
.CSEG
.ORG $0000
JMP __RESET__
__RESET__:
;设置堆栈
LDI R16, LOW(RAMEND)
OUT SPL, R16
LDI R16, HIGH(RAMEND)
OUT SPH, R16
;初始化数据输入端口
CALL SRG_INIT
__RESET__01:
;测试数据输入端口电平变化
CALL SRG_TESTLEVEL
JMP __RESET__01
SRG_INIT:
;设置接收端口为输入 缺省高阻
CBI SRG_R_DDR, SRG_R_DDR_DA
CBI SRG_R_PORT, SRG_R_PORT_DA;高阻
;SBI SRG_R_PORT, SRG_R_PORT_DA;上拉高电平
RET
;测试数据输入口电平变化
SRG_TESTLEVEL:
SBIS SRG_R_PIN, SRG_R_PIN_DA;如果高电平跳出循环
RJMP SRG_SRG_TESTLEVEL
RET
|