- 阅读权限
- 200
- UID
- 1
- 帖子
- 54
- 精华
- 0
- 注册时间
- 2013-2-20
- 在线时间
- 72 小时
- UID
- 1
- 帖子
- 54
- 精华
- 0
- 注册时间
- 2013-2-20
- 在线时间
- 72 小时
|
nRF905是单片射频收发芯片,工作于433MHz的ISM频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。芯片能耗非常低,以10dBm 的功率发射时,工作电流仅有 30mA,接收时工作电流只有 12.5mA,多种低功率工作模式,待机模式下电流仅为12.5μA,节能设计更方便。其 ShockBurst技术可在通讯时自动生成前导码和CRC校验位。nRF905适用于多种无线通信的场合,如无线数据传输系统、报警及安全系统、家庭自动化、遥感监测、无线门禁系统等。
从我的制作中截出操作nRF905程序模块,供参考。
'-------------------------------------------------------------------------------
'Name : nRF905.bas
'Copyright : http://www.avrbase.com
'Micro : AtMega8
'Author : slyt
'-------------------------------------------------------------------------------
Declare Sub Config905()
Declare Sub Set_rx_mode()
Declare Sub Set_tx_mode()
Declare Sub Rf905_send(byval Address As Byte , Byval Bytes As Byte)
Declare Sub Rf905_receieve(byval Bytes As Byte)
Declare Function Waterlevel() As Byte
Declare Sub Spiwrite(byval Spishuju As Byte)
Declare Function Spiread() As Byte
'Spiinit 初始化 SPI 状态和引脚.
Mosi Alias Portd.6 : Ddrd.6 = 1
Miso Alias Pind.7 : Ddrd.7 = 0 : Portd.7 = 1
Clk Alias Portc.5 : Ddrc.5 = 1 : Clk = 0
'定义RF905管脚
Dr Alias Pinb.0 : Ddrb.0 = 0 : Portb.0 = 1 '接收或发射数据完成
Trx_ce Alias Portb.1 : Ddrb.1 = 1 '使能发射或接收
Tx_en Alias Portb.2 : Ddrb.2 = 1 '选择发射或接收模式
Gsn Alias Portd.5 : Ddrd.5 = 1 : Gsn = 1 'SPI使能
'=====定义变量=====
Dim Spi_data(10) As Byte
Dim Dosend As Byte
'===========================程序开始===============================
Call Config905()
Call Set_rx_mode()
Do
If Dr = 1 Then '检查nRF905是否接收到数据
Rf905_receieve 2 '读取2个字节数据
End If
If Dosend = 2 Then
Dosend = 0
Rf905_send &HAA , 2 '发送2个字节数据
End If
Loop
End
'###############################################################
'===============SPI_WRITE===============
Sub Spiwrite(spishuju As Byte)
Local Sii As Byte
For Sii = 7 To 0 Step -1
Mosi = Spishuju.sii
Clk = 1
nop
Clk = 0
Next
End Sub
'===============SPI_READ===============
Function Spiread() As Byte
Local Sii As Byte
Local Ssrr As Byte
For Sii = 7 To 0 Step -1
Clk = 1
nop
Ssrr.sii = Miso
Clk = 0
Next
Spiread = Ssrr
End Function
'==============初始化RF905模块=============
Sub Config905()
Trx_ce = 0
Gsn = 0 'CSN 片选信号,SPI 使能
Waitms 1
Spiwrite &H00 '向905 芯片写配置命令
Restore Config905_data
For I = 1 To 10
Read Spi_data(i)
Spiwrite Spi_data(i) '写入配置信息
Next
Waitms 1
Gsn = 1 '结束SPI 数据传输
End Sub
'==============设置RF905为接收模式==========
Sub Set_rx_mode()
Tx_en = 0
Trx_ce = 1
Waitms 1
End Sub
'==============设置RF905为发送模式==========
Sub Set_tx_mode()
Tx_en = 1
Trx_ce = 0
Waitms 1
End Sub
'==============RF905发送数据==============
Sub Rf905_send(byval Address As Byte , Byval Bytes As Byte)
Local Rrss As Byte
Trx_ce = 0 'TRX_CE置低,进入待机和SPI操作模式
Tx_en = 1 'TX_EN置高 ,进入发送模式
Waitms 1
Gsn = 0 'CSN置低,进入SPI操作模式
Spiwrite &H22 '向nRF905写入"写TX地址"指令
Spiwrite Address '写入TX地址
Spiwrite Address '写入TX地址
Spiwrite Address '写入TX地址
Spiwrite Address '写入TX地址
Gsn = 1 'CSN置高,退出SPI操作模式
nop
Gsn = 0 'CSN置低,进入SPI操作模式
Spiwrite &H20 '向nRF905写入"写TX数据"指令
Nop : Nop
For Rrss = 1 To Bytes
Spiwrite Spi_data(rrss) '写入待发送数据
Next
Gsn = 1 'CSN置高,退出SPI操作模式
Trx_ce = 1 'TRX_CE置高,启动射频发送
While Dr = 0 : Wend '等待DR置高,发送完成
Tx_en = 0 'TX_EN置低 ,进入接收模式
Waitms 1
End Sub
'=============RF905接收数据=============
Sub Rf905_receieve(byval Bytes As Byte) As Byte
Local Rrr As Byte
Trx_ce = 0 'TRX_CE置低,进入待机和SPI操作模式
Waitms 1
Gsn = 0 'CSN置低,进入SPI操作模式
Spiwrite &H24 '向nRF905写入准备读取接收到的数据指令
Nop : Nop
For Rrr = 1 To Bytes
Spi_data(rrr) = Spiread() '读取接收到的数据
Next
While Dr = 1 : Wend '等待DR置低,读取数据完成
Gsn = 1 'CSN置高,退出SPI操作模式
Trx_ce = 1 'TRX_CE置高,进入工作模式
End Sub
'=============RF905配置数据=============
Config905_data:
Data &H4C , &H0C , &H44 , &H02 , &H02 , &HBB , &HBB , &HBB , &HBB , &H58
'(
字节0:&H4c -&B01001100 430.0m
字节1:&H0c -&B00001100 工作在430m频率段、输出功率10dm、正常接收模式、不重发。
字节2:&H11 -&B00010001 1字节rx地址宽度、1字节tx地址宽度。
字节3:&H01 -&B00000001 1字节rx接收有效数据宽度
字节4:&H01 -&B00000001 1字节tx发送有效数据宽度
字节5:&Hee -&B11101110 Rx地址0字节
字节6:&Hee -&B11101110 Rx地址1字节
字节7:&Hee -&B11101110 Rx地址2字节
字节8:&Hee -&B11101110 Rx地址3字节
字节9:&H58 -&B01011000 输出频率4mhz、没有外部时钟、外部晶体振荡频率16mhz、允许crc校验、8位crc校验模式
') |
参考电路:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
|