Code: Select all
Device = 18F2620
Clock = 4
Include "spi.bas"
Include "usart.bas"
Include "convert.bas"
Include "math.bas"
//SCP1000 register addresses
Const REVIDA = $00,
DATAWRA = $01,
ADDPTRA = $02,
OPERATIONA = $03,
OPSTATUSA = $04,
RSTRA = $06,
STATUSA = 07,
DATARD8A = $1F,
DATARD16A = $20,
TEMPOUTA = $21,
CFGIA = $00,
TWIADDIA = $05,
CFG2IA = $09,
MODTEST2IA = $2D,
USERDATA1A = $29,
USERDATA2A = $2A,
USERDATA3A = $2B,
USERDATA4A = $2C,
scpHiRes = $0A,
scpHiSpeed = $09,
scpULoPower = $0B,
scpLoPower = $0C
Dim DRDY As PORTC.1
Dim CSB As PORTC.2
Dim TempF As Float
Dim TempC As Float
Dim PresRaw As LongWord
Dim TempRaw As Word
Dim InHg As Float
Dim StationFt As Float
Dim TempReg As Byte
Function Initialize(pSCPMode As Byte) As Boolean
Dim DATA8RD As Byte
Dim TestVar As Byte
TestVar = $0A
High(CSB)
Input(DRDY)
DelayMS(150) //per specs
//check to see if checksum is OK
Low(CSB)
SPI.WriteByte(DATARD8A<<2) //read DATARD8
DATA8RD = SPI.ReadByte
High(CSB)
If (DATA8RD.0 = 1) Then //if bit zero set, checksum is OK
Result = True
Else
Result = False
End If
//enter low noise configuration
Low(CSB)
SPI.WriteByte((ADDPTRA<<2)+2) //write to ADDPTR
SPI.WriteByte(MODTEST2IA) //MODTEST2($2D) address
High(CSB)
Low(CSB)
SPI.WriteByte((DATAWRA<<2)+2) //write to DATAWR
SPI.WriteByte($03) //command $03 - reduce noise level
High(CSB)
Low(CSB)
SPI.WriteByte((OPERATIONA<<2)+2) //write to OPERATION
SPI.WriteByte($02) //command $02 - write DATAWR contents to
//register pointed to by ADDPTR
High(CSB) //low noise configuration, SCP1000 is in standby mode
DelayMS(100) //delay per specs
Low(CSB)
SPI.WriteByte((OPERATIONA<<2)+2) //write mode to OPERATION
SPI.WriteByte($0A)
High(CSB)
End Function