Sub Process_Globals
'These global variables will be declared once when the application starts.
'Public variables can be accessed from all modules.
Public Serial1 As Serial
Private D1 As D1Pins
Private SCK As Pin
Private SS As Pin
Private MISO As Pin
'
End Sub
Private Sub AppStart
Serial1.Initialize(115200)
Log("AppStart")
'
SCK.Initialize(D1.D5, SCK.MODE_OUTPUT)
SS.Initialize(D1.D8, SS.MODE_OUTPUT)
MISO.Initialize(D1.D6, MISO.MODE_INPUT)
AddLooper("Looper1")
End Sub
Sub looper1
SPI.adcSingleChannelRead(SS,??)
End Sub
/*
pins:
cs=8
sdo/rdy=12
sck=13
*/
#include <SPI.h>
unsigned char sspin=8; //cs pin
union{
int32_t value;
uint8_t aa[4];
} c ;
void setup(void){
pinMode(12,INPUT); //to check ready pin
pinMode(sspin,OUTPUT);
digitalWrite(sspin,HIGH);//for single conversion
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE3);
SPI.setClockDivider(SPI_CLOCK_DIV16);//max. speed of chip is 5 Mhz
Serial.begin(9600);
}
void loop(void){
digitalWrite(sspin,LOW);
while(digitalRead(12)){
digitalWrite(sspin,LOW);
}
c.aa[2]=SPI.transfer(0x00);
c.aa[1]=SPI.transfer(0x00);
c.aa[0]=SPI.transfer(0x00);
c.aa[3]=0x00;
digitalWrite(sspin,HIGH);
//check if overflow has occured
if((c.aa[2]&(1<<6))|(c.aa[2]&(1<<7))){
c.aa[2]&=~(1<<6);
Serial.println(c.value);
}
//check if sign bit is affected. if so, since it is two's compliment,
// substract it from 2^N
else if(c.aa[2]&(1<<5)){
c.value=0x400000-c.value;
Serial.println(c.value);
}
else{
Serial.println(c.value);
}
delay(10);
}
Public Sub MCP3551Read(clckSpeed As Int, chipSelectPin As Pin) As Long
chipSelectPin.DigitalWrite(True)
BeginTransaction(clckSpeed,MSBFIRST,SPI_MODE(3))
chipSelectPin.DigitalWrite(False)
Dim b(4) As Byte
b(2) = Transfer(0x00)
b(1) = Transfer(0x00)
b(0) = Transfer(0x00)
b(3) = 0x00
chipSelectPin.DigitalWrite(True)
Dim res As Long = 0
EndTransaction
Dim r As RandomAccessFile
If UintToBoolean( Bit.Or( Bit.And(b(2),Bit.ShiftLeft(1,6)), Bit.And(b(2),Bit.ShiftLeft(1,7)) )) Then
b(2) = Bit.And(b(2),Bit.Not(Bit.ShiftLeft(1,6)))
Dim r As RandomAccessFile
r.Initialize(b,True)
res = r.ReadLong32(0)
Else if UintToBoolean(Bit.And(b(2),Bit.ShiftLeft(1,5))) Then
r.Initialize(b,True)
res = r.ReadLong32(0)
res = 0x400000-res
End If
Return res
End Sub
Public Sub UintToBoolean(u As UInt) As Boolean
Return u<>0
End Sub