avclanme/d72042.ino
2019-07-21 07:14:08 +09:00

124 lines
2.5 KiB
C++

#include <SPI.h>
#define MODE 8
#define CONTROL 9
#define READ 0x08
#define RESET 7
byte inline bitchange(byte b)
{
byte z=0;
if(b&0x8)
{
z|=0x10;
}
if(b&0x4)
{
z|=0x20;
}
if(b&0x2)
{
z|=0x40;
}
if(b&0x1)
{
z|=0x80;
}
z=b<<4;
return z;
}
#define REG_WRITE_CTR bitchange(0x0)
#define REG_WRITE_CMR bitchange(0x1)
#define REG_WRITE_UAR1 bitchange(0x2)
#define REG_WRITE_UAR2 bitchange(0x3)
#define REG_WRITE_SAR1 bitchange(0x4)
#define REG_WRITE_SAR2 bitchange(0x5)
#define REG_WRITE_MCR bitchange(0x6)
#define REG_WRITE_TBF bitchange(0xe)
#define REG_READ_STR (bitchange(0x0)|READ)
#define REG_READ_FLG (bitchange(0x1)|READ)
#define REG_READ_RDR1 (bitchange(0x2)|READ)
#define REG_READ_RDR2 (bitchange(0x3)|READ)
#define REG_READ_LDR1 (bitchange(0x4)|READ)
#define REG_READ_LDR2 (bitchange(0x5)|READ)
#define REG_READ_DAR1 (bitchange(0x6)|READ)
#define REG_READ_DAR2 (bitchange(0x7)|READ)
#define REG_READ_RCR (bitchange(0x8)|READ)
#define REG_READ_RBF (bitchange(0xe)|READ)
void setup (void) {
Serial.begin(9600); //set baud rate to 115200 for usart
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV128);//divide the clock by 8
pinMode(MODE,OUTPUT);
pinMode(CONTROL,OUTPUT);
pinMode(RESET, OUTPUT);
digitalWrite(MODE, HIGH);
digitalWrite(CONTROL, HIGH);
digitalWrite(RESET, HIGH);
digitalWrite(SS, LOW);
}
void loop (void) {
byte addr = 0x0;
byte data;
SPI.beginTransaction(SPISettings(1000, MSBFIRST, SPI_MODE0));
// set speed bit format and clock/data polarity while starting SPI transaction
digitalWrite(CONTROL, HIGH);
delay(5);
SPI.transfer(REG_WRITE_CTR); // Register Select
digitalWrite(CONTROL, LOW);
delay(5);
SPI.transfer(0x10); // read second 8 bits
delay(5);
// write the LTC CS pin low to initiate ADC sample and data transmit
digitalWrite(CONTROL, HIGH);
delay(5);
SPI.transfer(REG_READ_FLG); // Register Select
digitalWrite(CONTROL, LOW);
delay(5);
data = SPI.transfer(0x0); // read second 8 bits
Serial.println(data); //0x2
// wite LTC CS pin high to stop LTC from transmitting zeros.
SPI.endTransaction();
// close SPI transaction
delay(250);
// Delay that is fast but easy to read.
// delayMicroseconds(83);
// Delay that matches 12 khz delay time.
}