*********************************
' nRF24L01+ Test Code for 40x2 TRANSMIT
'***********************************
'GO TO "OPTIONS" > "EDITOR" AND check SERIAL TERMINAL
' TO "OPEN AFTER DOWNLOAD" and check "Use Colapsing Blocks"
'===================================================
'THIS IS CODE FOR THE TRANSMITTER
#picaxe 40x2
#no_data
#no_table
Symbols:
{
symbol status = 7
symbol data1 = W0
symbol nRF_Address = b2
#rem
CE C.0
CSN C.1
IRQ C.2 PICAXE 40x2
SCK C.3
SDI C.4 (MI)
SDO C.5 (MO)
#endrem
symbol CE = C.0 'Chip Enable
symbol CSN = C.1 'Chip Select Active low)
symbol IRQ = pinC.2 'hardware IRQ1
symbol Red1 = B.7
symbol Amber1 = B.6
symbol Green1 = B.5
symbol Red2 = B.4
symbol Amber2 = B.3
symbol Green2 = B.2
symbol Red3 = B.1
symbol Amber3 = B.0
symbol Green3 = D.7
symbol Red4 = D.6
symbol Amber4 = D.5
symbol Green4 = D.4
symbol GreenTimeA = 1000
symbol GreenTimeB = 1000
symbol GreenTimeC = 1000
symbol GreenTimeD = 1000
symbol AmberTime = 500
symbol ClearTime = 500
}
'=================== INIT ==============================
init:
{
input c.2 'interupt
output c.0 'CE
output c.1 'CSN
output B.7 'Red Lantern 1
output B.6 'Amber Lantern 1
output B.5 'Green Lantern 1
output B.4 'Red Lantern 2
output B.3 'Amber Lantern 2
output B.2 'Green Lantern 2
output B.1 'Red Lantern 3
output B.0 'Amber Lantern 3
output D.7 'Green Lantern 3
output D.6 'Red Lantern 4
output D.5 'Amber Lantern 4
output D.4 'Green Lantern 4
setfreq m16
hspisetup spimode00,spislow
high CSN 'active low
low CE
gosub clear_interrupts
}
'NOTE: Shockburst is not used. NO ACK
'Adddress 00
'enable PtX, power on, en_crc/2bytes, all interrputs on
low csn
hspiout (%00100000,%00001110)
high csn
low csn
hspiout (%00100110,%00000110) 'REG 6 Data Rate 1 mbps
high csn
setint %00000000,%00000100,c '(Pic40X2 PinC.2 LOW)
W0 = 0
let pinsB = %10010010 'All reds on, others off
let pinsD = %01001001 'All reds on, others off
MAIN:
'========================================================
do
setint %00000000,%00000100,c '(Pic40X2 PinC.2 LOW - IRQ)
Gosub Go1
Gosub Go2
Gosub Go3
Gosub Go4
loop
'=============== END MAIN =================================
Transmit:
low csn 'FLUSH TX FIFO redundant
hspiout (%11100001)
high csn
low CSN
hspiout (%10100000,w0) 'write 2 byte to tx fifo
high csn
low csn
hspiout (%00100000,%00001110) 'POWER UP
high csn
PAUSE 5
pulsout CE,220 'TRANSMIT DATA
pause 5
low csn 'FLUSH TX FIFO Redundant
hspiout (%11100001)
high csn
'debug
return
interrupt:
{
'the nRF has generated an interupt
;pause 500
;LOW CSN
;hspiin (b0)
;HSPIOUT (%11111111)
;HIGH CSN
'status data is now in b0 (data1) bits 4,5, & 6
'Bit 4 is Max_RT
'Bit 5 is TX_DS (Data Sent
;bit 6 is RX_DR (data received)
;if bit4 = 1 then
;sertxd ("Interrupt on MAX_RT",cr,lf)
;else
;if bit5 = 1 then
;sertxd ("Interrupt on TX_DS",cr,lf)
;else
;if bit6 = 1 then
;sertxd ("Interrupt on RX_DR",cr,lf)
;endif endif endif
gosub clear_interrupts
setint %00000000,%00000100,c '(Pic40X2 PinC.2 LOW)
return
}
Clear_interrupts:
{
nRF_address = status + 32
low csn
hspiout (nRF_address,%01110000)
high csn
return
}
Go1:
let b0 = %00110010 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
gosub Transmit
let pinsB = %00110010 'Green1 'on', red 'on' lanterns 2,3 on 'B' Bank
let pinsD = %01001001 'All reds 'on', others 'off' on 'D' Bank.
Pause GreenTimeA
let b0 = %01010010 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
Gosub Transmit
let pinsB = %01010010 'Green1 'off', Amber1 'on'on Bank B
let PinsD = %01001001 'All reds 'on', rest 'off' on 'D' Bank.
Pause AmberTime
let b0 = %10010010 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
Gosub Transmit
let PinsB = %10010010 'Amber1 'off', Red 'on' lanterns 1,2,3 on 'B'Bank
let PinsD = %01001001 'All reds 'on', rest 'off' on 'D' Bank.
pause ClearTime
Return
Go2:
let b0 = %10000110 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
gosub Transmit
let pinsB = %10000110 'Green2 'on', red2 'on' other lanterns Red
let pinsD = %01001001 'All reds 'on', rest 'off' on 'D' Bank.
Pause GreenTimeB
let b0 = %10001010 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
Gosub Transmit
let pinsB = %10001010 'Green2 'off', Amber2 'on' on Bank 'B'
let PinsD = %01001001 'All reds 'on', rest 'off' on 'D' Bank.
Pause AmberTime
let b0 = %10010010 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
Gosub Transmit
let PinsB = %10010010 'Amber2 'off', Red 'on' on Bank 'B'
let PinsD = %01001001 'All reds 'on', rest 'off' on 'D' Bank.
pause ClearTime
Return
'#rem
Go3:
let b0 = %10010000 'set Memory B0 ready to transmit
let b1 = %11001001 'set Memory B1 ready to transmit
gosub Transmit
let pinsB = %10010000 'Red3 'off' other lanterns Red
let pinsD = %11001001 'Green3 'on', other lanterns Red.
Pause GreenTimeA
let b0 = %10010001 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
Gosub Transmit
let pinsB = %10010001 'Green3 'off', Amber3 'on'. Other lanterns Red
let PinsD = %01001001 'All reds 'on', rest 'off' on 'D' Bank.
Pause AmberTime
let b0 = %10010010 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
Gosub Transmit
let PinsB = %10010010 'Amber2 'off', All reds 'on' on Bank 'B'
let PinsD = %01001001 'All reds 'on', rest 'off' on 'D' Bank.
pause ClearTime
Return
Go4:
let b0 = %10010010 'set Memory B0 ready to transmit
let b1 = %00011001 'set Memory B1 ready to transmit
gosub Transmit
let pinsB = %10010000 'Red3 'off' other lanterns Red
let pinsD = %00011001 'Green3 'on', other lanterns Red.
Pause GreenTimeA
let b0 = %10010010 'set Memory B0 ready to transmit
let b1 = %00101001 'set Memory B1 ready to transmit
Gosub Transmit
let pinsB = %10010010 'Green3 'off', Amber3 'on'. Other lanterns Red
let PinsD = %00101001 'All reds 'on', rest 'off' on 'D' Bank.
Pause AmberTime
let b0 = %10010010 'set Memory B0 ready to transmit
let b1 = %01001001 'set Memory B1 ready to transmit
Gosub Transmit
let PinsB = %10010010 'Amber3 'off', All reds 'on' on Bank 'B'
let PinsD = %01001001 'All reds 'on', rest 'off' on 'D' Bank.
pause ClearTime
Return