#picaxe 28x2
#terminal 38400
#SLOT 0
#no_data
#no_table
'================READ VALUES ===============
'SYMBOL StdFreq = EM16 'Has 4MHz Xtal installed
'setfreq StdFreq
#DEFINE RESONATOR_8MHZ
'#DEFINE RESONATOR_4MHZ
#IFDEF RESONATOR_8MHZ
#terminal 38400
SYMBOL StdFreq = EM32 'Has 4MHz Xtal installed
setfreq StdFreq
SYMBOL TXbaud= T9600_32
settimer t1s_16 'half seconds
SYMBOL FourSecond = 16000
SYMBOL TwoSecond = 8000
SYMBOL OneSecond = 4000
SYMBOL Point5Second = 2000
SYMBOL Point3Second = 1200
SYMBOL Point1Second = 400
#ENDIF
#IFDEF RESONATOR_4MHZ
#terminal 19200
SYMBOL StdFreq = EM16 'Has 4MHz Xtal installed
setfreq StdFreq
SYMBOL TXbaud= T9600_16
SYMBOL FourSecond = 8000
SYMBOL TwoSecond = 4000
SYMBOL OneSecond = 2000
SYMBOL Point5Second = 1000
SYMBOL Point3Second = 600
SYMBOL Point1Second = 200
#ENDIF
'===-[ VARIABLES ]-========================================
symbol maxreg = b8 ' register for MAX7219
symbol maxdata = b9 ' data to send to MAX7219
Symbol _Tmp_1 = b0
Symbol _Tmp_2 = b1
Symbol _Tmp_Data_Snd = b2
Symbol _Tmp_Data_Rcv = b3
Symbol _TMP_bit = b4 ' MISO Bit Value
Symbol _Register_Name = b5 ' Register Name
Symbol _Register_Value_W = W3 ' Register Value as WORD
Symbol _Register_Value_L = b6 ' Register Value LSB
Symbol _Register_Value_M = b7 ' Register Value MSB
SYMBOL CT = B10
SYMBOL BestCT = W11
SYMBOL BestDiff = W12
SYMBOL Diff = W13
'===-[ AS3835 Franklin Lightning Pins ]-========================================
symbol CS1 = B.4 ' to AS3835 chip select
SYMBOL MOSI = B.3 ' to MOSI on AS3835
SYMBOL MISO = pinB.2 ' to MISO on AS3835
SYMBOL MISO_= B.2 ' to MISO on AS3835
SYMBOL CLK = B.1 ' to SCK on AS3835
SYMBOL IRQ = B.0 ' to AS3835 IRQ
SYMBOL blueLED = B.7
setfreq EM32
'set CS pin HIGH to deactivate
HIGH CS1
pause 1000
sertxd("OK .",cr,lf)
pause 100
SerTxd("AS3935 ")
'
' RESET
SerTxd("reset ",cr,lf)
_Register_Name=0x3C
_Register_Value_L=0x96
gosub write_register
'
'
SerTxd("set Power ON ",cr,lf)
_Register_Name=0x00
_Register_Value_L=%00000000
gosub write_register
' Calibrates automatically the internal RC Oscillators
SerTxd("Calibrates RC",cr,lf)
_Register_Name=0x3D
_Register_Value_L=0x96
gosub write_register
'
'set freq div to 16 for tuning
SerTxd("freq div 16",cr,lf)
_Register_Name=0x03
_Register_Value_L=0x00
gosub write_register
'set LCO to out on INT
SerTxd("LCO to out on INT",cr,lf)
_Register_Name=0x08
_Register_Value_L=%10000000
gosub write_register
CT=0
BestCT=0
BestDiff =$FFFF
Captune:
_Register_Name=0x08
_Register_Value_L=%10000000 OR CT
gosub write_register
count IRQ , 2000 , w0
IF W0>7812 THEN
Diff = W0-7812
ELSE
Diff = 7812-W0
ENDIF
IF Diff<BestDiff THEN
BestDiff=Diff
BestCT=CT
ENDIF
' pulsin IRQ ,1 ,W0
sertxd("captune = ",#CT," f=",#w0,cr,lf)
' end
INC CT
IF CT<=$0F THEN Captune
sertxd("BestCT = ",#BestCT," f=",#w0,cr,lf)
_Register_Name=0x08
_Register_Value_L=%00000000 OR BestCT
gosub write_register
' Calibrates automatically the internal RC Oscillators
SerTxd("Calibrates RC",cr,lf)
_Register_Name=0x3D
_Register_Value_L=0x96
gosub write_register
'
'set INDOOR/OUTDOOR MODE
_Register_Name=0x00
_Register_Value_L=%00010010 'INDOOR
'_Register_Value_L=%00001110 'OUTDOOR
_Register_Value_L=_Register_Value_L <<1
gosub write_register
doit:
'SET WatchDog
_Register_Name=0x01
gosub read_register_8
_Register_Value_L = _Register_Value_L AND %11110000
gosub write_register
'SET Spike Rejection
_Register_Name=0x02
gosub read_register_8
_Register_Value_L = _Register_Value_L AND %11110000
gosub write_register
' Floor Noise level
_Register_Name=0x01
gosub read_register_8
_Register_Value_L = _Register_Value_L AND %01110000 >>4
sertxd("Noise Floor is: ",#_Register_Value_L,cr,lf)
' WatchDog Threshold
_Register_Name=0x01
gosub read_register_8
_Register_Value_L = _Register_Value_L AND %00001111
sertxd("WatchDog Threshold is: ",#_Register_Value_L,cr,lf)
' Spike rejection
_Register_Name=0x02
gosub read_register_8
_Register_Value_L = _Register_Value_L AND %00001111
sertxd("Spike rejection is: ",#_Register_Value_L,cr,lf)
#rem
pause OneSecond ' Wait a Time
'pause OneSecond
' Read Register 0X00 for get Revision Number
_Register_Name=0x00
gosub read_register_8
sertxd("The Reg 0 is : ",#_Register_Value_L,cr,lf)
' Read Register 0X00 for get Revision Number
_Register_Name=0x01
gosub read_register_8
sertxd("The Reg 1 is : ",#_Register_Value_L,cr,lf)
' Read Register 0X00 for get Revision Number
_Register_Name=0x02
gosub read_register_8
sertxd("The Reg 2 is : ",#_Register_Value_L,cr,lf)
' Read Register 0X00 for get Revision Number
_Register_Name=0x03
gosub read_register_8
sertxd("The Reg 3 is : ",#_Register_Value_L,cr,lf)
' Read Register 0X00 for get Revision Number
_Register_Name=0x04
gosub read_register_8
sertxd("The Reg 4 is : ",#_Register_Value_L,cr,lf)
' Read Register 0X07 DISTANCE
_Register_Name=0x07
gosub read_register_8
sertxd("The Reg 7 is : ",#_Register_Value_L,cr,lf)
' Read Register 0X08 for get Revision Number
_Register_Name=0x08
gosub read_register_8
sertxd("The Reg 8 is : ",#_Register_Value_L,cr,lf)
'maxreg = $07 'get distance
'GOSUB GetFrom_AS3935
'sertxd("The Reg 7 is : ",#maxdata,cr,lf)
'maxreg = $08 'get distance
'GOSUB GetFrom_AS3935
'sertxd("The Reg 8 is : ",#maxdata,cr,lf)
#endrem
'goto doit
hintsetup %00000001 ; enable all 1 pin
SETINTFLAGS %00000001 , %00000100
do
loop
END
'===-[ Subroutines ]-========================================================
INTERRUPT:
HIGH blueLED
timer= timer / 2
sertxd(cr,lf,#TIMER,":")
'IF hint0flag=1 THEN
DO
LOOP UNTIL PINB.0=1
'read IRQ source
' Read Register 0X00 for get Revision Number
_Register_Name=0x03
gosub read_register_8
_Register_Value_L = _Register_Value_L AND %00001111 'mask out other bits
sertxd(" int type : ",#_Register_Value_L," ")
IF _Register_Value_L=1 THEN
Sertxd(" Noisy much")
ENDIF
IF _Register_Value_L=4 THEN
Sertxd(" Disturber detected")
ENDIF
IF _Register_Value_L=8 THEN
' Read Register 0X07 DISTANCE
_Register_Name=0x07
gosub read_register_8
_Register_Value_L = _Register_Value_L AND %00111111 'mask out other bits
sertxd(" Distance ",#_Register_Value_L," km ")
ENDIF
sertxd(cr,lf)
'ENDIF
LOW blueLED
flags=0'hint0flag=0:hint1flag=0:hint2flag=0:hintflag=0
SETINTFLAGS OR %00000001 , %00000001
timer=0
RETURN
'===-[ Subroutines ]-========================================================
SendTo_AS3935:
LOW CS1
SHIFTOUT CLK,MOSI,MSBFirst_L,(maxreg,maxdata)
HIGH CS1
RETURN
GetFrom_AS3935:
LOW CS1
maxreg = maxreg OR %01000000
maxdata=0
SHIFTOUT CLK,MOSI ,MSBFirst_L,(maxreg)
SHIFTIN CLK,MISO_,MSBPost_L,(maxdata /9)
HIGH CS1
maxdata = INV maxdata
RETURN
'---------------------------------------------------------------------------------------------------------
Write_Register:
'
'
low CS1
_Tmp_Data_Snd=_Register_Name
gosub Snd_Rcv
_Tmp_Data_Snd=_Register_Value_L
gosub Snd_Rcv
high CS1
Return
'---------------------------------------------------------------------------------------------------------
Read_Register_8:
'
low CS1
_Tmp_Data_Snd=_Register_Name OR %01000000 ' set bit 14 for read mode
gosub Snd_Rcv
_Tmp_Data_Snd=0
gosub Snd_Rcv
_Register_Value_L=_TMP_Data_Rcv
high CS1
Return
'---------------------------------------------------------------------------------------------------------
Read_Register_16:
'
LOW CS1
_Tmp_Data_Snd=_Register_Name
gosub Snd_Rcv
_Tmp_Data_Snd=0
gosub Snd_Rcv
_Register_Value_M=_TMP_Data_Rcv
gosub Snd_Rcv
_Register_Value_L=_TMP_Data_Rcv
HIGH CS1
Return
'---------------------------------------------------------------------------------------------------------
Snd_Rcv:
' Send Receive Data With Spi Clock
For _Tmp_2=1 to 8 ' 8 bit Frame
HIGH CLK
'Send Data MOSI ------------------------------------
_Tmp_1=128
_TMP_bit=_Tmp_Data_Snd & _Tmp_1
_Tmp_Data_Snd=_Tmp_Data_Snd<<1
IF _TMP_bit = 128 then
' sertxd("1")
HIGH MOSI
Else
' sertxd("0")
LOW MOSI
Endif
'Receve Data MISO ------------------------------------
LOW CLK
_Tmp_Data_Rcv=_Tmp_Data_Rcv<<1
IF MISO = 1 then 'MISO
_Tmp_Data_Rcv=_Tmp_Data_Rcv+1
Endif
'-----------------------------------------------------------------------------------------------------------
Next _Tmp_2 ' Next Bit of Frame
'sertxd(cr,lf)
RETURN