圣龙扬特-AVR电子

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1402|回复: 1
打印 上一主题 下一主题

AVR操作nRF905例程

[复制链接]

17

主题

2

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
帖子
54
精华
0
注册时间
2013-2-20
在线时间
72 小时
跳转到指定楼层
楼主
发表于 2013-2-26 20:09:47 |只看该作者 |倒序浏览
  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校验模式
')

  参考电路:

  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

0

主题

1

好友

3101

积分

超级版主

Rank: 8Rank: 8

UID
31
帖子
36
精华
0
注册时间
2013-2-27
在线时间
5 小时
沙发
发表于 2013-2-28 14:16:18 |只看该作者
表四鄙人纯属随机路过。。。顺带帮顶。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|圣龙扬特-AVR电子 ( 鲁ICP备05022832号 )

GMT+8, 2024-12-22 16:50 , Processed in 0.216717 second(s), 19 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部