Code:
RF_Init_Values[0] = $28 'Standby mode, 915-928 MHz, VTune by inductors, ENABLE R1/P1/S1
RF_Init_Values[1] = $8C 'FSK, max IF gain, Packet Mode
RF_Init_Values[2] = $0B 'Change from 200KHz Freq Dev to 33KHz Dev
RF_Init_Values[3] = $63 '2KBps
RF_Init_Values[4] = $0C 'for OOK mode, not apliable
RF_Init_Values[5] = $03 '16Bytes FIFO, 3 Bytes threshold FIFO transmit interrupt
RF_Init_Values[6] = $77 '915MHz R1 Reg
RF_Init_Values[7] = $64 '915MHz P1 Reg
RF_Init_Values[8] = $32 '915MHz S1 Reg
RF_Init_Values[9] = $74 '920MHz R2 Reg
RF_Init_Values[10] = $62 '920MHz P2 Reg
RF_Init_Values[11] = $32 '920MHz S2 Reg
RF_Init_Values[12] = $38 'config mode for OOK, not apliable
RF_Init_Values[13] = $08 'PLREADY, CRCOK, TXDONE, FIFO Not Full, FIFO Empty, No FIFO Overrun
'TX: mostly normal
RF_Init_Values[14] = $0B '00111001
RF_Init_Values[15] = $00 '
RF_Init_Values[16] = $41 'default filters config
RF_Init_Values[17] = $38 'default filters config
RF_Init_Values[18] = $30 'sync word ON, 24bits, 0 errors tolerance
RF_Init_Values[19] = $07 'reserved reg
RF_Init_Values[20] = $00 'RSII status read register, 0.5dB / bit
RF_Init_Values[21] = $00 'OOK config reg
RF_Init_Values[22] = $53 '"S" 1st byte of sync word
RF_Init_Values[23] = $43 '"C" 2nd byte of sync word
RF_Init_Values[24] = $53 '"S" 3rd byte of sync word - my initials!
RF_Init_Values[25] = $00 '
RF_Init_Values[26] = $F0 'utoff fcy = 200KHz, output power = 13dBm 0b000
RF_Init_Values[27] = $80 'clk out by default 427KHz
RF_Init_Values[28] = $03 '3 bytes payload
RF_Init_Values[29] = $01 'initial MAC ADDRESS, only for test
RF_Init_Values[30] = $4E 'Fix Packet Lenght, 3 bytes preamble, whitening ON, CRC ON, Node ADDR|0x00|0xFF filtering
RF_Init_Values[31] = $00 'FIFO autocreal enable if CRC fails, Write to FIFO in stby mode for (i = 0; i < 32; i++)
RF_STANDBY con $20 'Standby RF Mode
RF_SYNTHESIZER con $40 'Synthesizer Mode (Test if RF Module is on and PLL Locked and working)
RF_RECEIVER con $60 'Receive Mode
RF_TRANSMITTER con $80 'Transmit Mode
TxPacket var byte[16] 'Packet Buffer
bRF_Mode var byte 'Used to set RF Mode
RF_Mode var byte
wr_FIFO_Val var byte 'byte to load into RF FIFO
bReg_Address var byte 'byte for which register to set/read
bReg_Value var byte 'Value of register to set/read
TxPacketLen var byte 'Number of bytes to send
i var byte
PLL_LOCK var bit 'Bit to read PLL Lock Flag
TestMe:
gosub MRFInint
TxPacket[0] = $A1
TxPacket[1] = $B1
TxPacket[2] = $C1
TxPacketLen = 3
gosub Send_Packet
bRF_Mode = RF_STANDBY
gosub SetRFMode
goto RCV 'This is a jump to your receive routine
MRFInit:
'Initialize the MRF Module
'Intial setup
for i = 0 to 31
bReg_Address = i
bReg_Value = RF_Init_Values(i)
gosub RegisterSet
next i
'Test the module setup
'Clear the PLL Lock flag by setting LSTLPLL to 1
bReg_Address = $0E 'FTPRIREG
gosub RegisterRead
bReg_Value = bReg_Value | $02 'Set LSTLPLL to 1
gosub RegisterSet 'Clear the flag
'Enable Synthesizer mode and test LSTSPLL stays at 1 (PLL Locked)
bRF_Mode = RF_SYNTHESIZER
gosub SetRFMode
'Verify PLL Lock Flag
bReg_Address = $0E 'FTPRIREG
gosub RegisterRead
PLL_LOCK = 0
PLL_LOCK = bReg_Value.1
'You can test this bit to see if PLL Is Locked
'Change to Standby
bRF_Mode = RF_STANDBY
gosub SetRFMode
return
Send_Packet:
'Set Standby mode
bRF_Mode = RF_STANDBY
gosub SetRFMode
'Enable FIFO access in Standby mode
bReg_Address = $1F 'Register 31
bReg_Value = (RF_Init_Values(bReg_Address) & $BF) | $00
gosub RegisterSet
'Clear FIFO Overrun
bReg_Address = $0D 'Register 13
bReg_Value = (RF_Init_Values(bReg_Address) | $01)
gosub RegisterSet
'Set PLL Locked
bReg_Address = $0E 'Register 13
bReg_Value = (RF_Init_Values(bReg_Address) | $02)
gosub RegisterSet
For i = 0 to (TxPacketLen-1)
'Wite the Packets to the FIFO
wr_FIFO_Val = TxPacket[i]
gosub WriteFIFO
Next i
'Set RFMode to Transmit
bRF_Mode = RF_TRANSMITTER
gosub SetRFMode
pause 5 'Pause 5ms
return
WriteFIFO:
'Inputs: wr_FIFO_Val
MRFDataSel=0
SHIFTOUT SDO, SCLK, 1,[wr_FIFO_Val]
MRFDataSel=1
return
SetRFMode:
' Inputs bRF_Mode
'SetRFMode(RF_STANDBY); (mcparam0_read & 0x1F) | RF_STANDBY) = (6E & 1F) | 20 = 2E
bReg_Address = $00 'MCPARAM0
gosub RegisterRead
mcparam0_read = bReg_Value
bReg_Value = (bReg_Value & $1F) | bRF_Mode
bReg_Address = $00
gosub RegisterSet
RF_Mode = bRF_Mode
return
RegisterSet:
'Inputs: bReg_Address, bReg_Value
MRFaddr=(bReg_Address<<1) 'Gets register address format
MRFConfigSel=0 'Select the chip
SHIFTOUT SDO, SCLK, 1,[MRFaddr,bReg_Value] 'Set the register
MRFConfigSel=1 'Deselect the chip
return
RegisterRead:
'Inputs: bReg_Address
'Outputs: bReg_Value
MRFaddr = ((bReg_Address << 1) | $40) 'Shifts left 1 bit, sets $40 bit, automatically gets start, READ, and stop bits
MRFConfigSel = 0 'Select the chip
SHIFTOUT SDO, SCLK, 1,[MRFaddr] 'Address to read
SHIFTIN SDI, SCLK, 0,[bReg_Value] 'Get data from reg
MRFConfigSel = 1 'DeSelect the chip
return
Bookmarks