Skip to content
Snippets Groups Projects
Commit 6cd6c75a authored by Pascal Engeler's avatar Pascal Engeler
Browse files

Communication works, turn on reference, expose clk

parent f9e65d21
No related branches found
No related tags found
No related merge requests found
#include <SPI.h>
#define nCS 46
#define REG_ID 0x05
#define REG_READ 0b01000000
#define REG_WRITE 0b00000000
#define REG_ADC_CONTROL 0x01
#define POWER_MODE_FULLPOWER 0b0000000010000000
#define CLK_SEL_INTERNALANDPIN 0b0000000000000001
#define REF_EN 0b0000000100000000
void reset_comm(){
SPI.beginTransaction(SPISettings(84000000/128, MSBFIRST, SPI_MODE3));
for(unsigned i = 0; i < 8; ++i){
SPI.transfer(0xFF);
}
SPI.endTransaction();
}
//T must be either uint8_t, uint16_t or uint24_t
template <class T>
void SPIwrite(T data, uint8_t reg){
uint8_t wrbuf[] = {0, 0, 0, 0};
//set up write command
wrbuf[0] = reg | REG_WRITE;
uint8_t num_bytes = sizeof(data);
for(unsigned i = 0; i < num_bytes; ++i){
wrbuf[num_bytes-i] = data & 0xFF;
data >>= 8;
}
SPI.beginTransaction(SPISettings(84000000/128, MSBFIRST, SPI_MODE3));
SPI.transfer(wrbuf, num_bytes+1);
SPI.endTransaction();
}
//T must be either uint8_t, uint16_t or uint24_t
template <class T>
void SPIread(T& data, uint8_t reg){
uint8_t rdbuf[] = {0, 0, 0, 0};
//set up write command
rdbuf[0] = reg | REG_READ;
uint8_t num_bytes = sizeof(data);
SPI.beginTransaction(SPISettings(84000000/128, MSBFIRST, SPI_MODE3));
SPI.transfer(rdbuf, num_bytes+1);
SPI.endTransaction();
for(unsigned i = 1; i <= num_bytes; ++i){
data <<= 8;
data += rdbuf[i];
}
}
void setup() {
Serial.begin(9600);
digitalWrite(nCS, HIGH);
pinMode(nCS, OUTPUT);
SPI.begin();
delay(1000);
digitalWrite(nCS, LOW);
uint16_t data;
SPIread(data, REG_ADC_CONTROL);
Serial.print("ADC_CONTROL: ");
Serial.print(data, BIN);
Serial.print("\n");
//Turn on internal reference, expose MCLK
data |= CLK_SEL_INTERNALANDPIN | REF_EN;
Serial.print("Setting to ");
Serial.print(data, BIN);
Serial.print("\n");
SPIwrite(data, REG_ADC_CONTROL);
//Read ADC_CONTROL
SPIread(data, REG_ADC_CONTROL);
Serial.print("ADC_CONTROL: ");
Serial.print(data, BIN);
Serial.print("\n");
digitalWrite(nCS, HIGH);
}
void loop() {
SPI.beginTransaction(SPISettings(84000000/128, MSBFIRST, SPI_MODE3));
digitalWrite(nCS, LOW);
SPI.transfer(REG_ID | REG_READ);
uint8_t id = SPI.transfer(0x00);
uint8_t id;
SPIread(id, REG_ID);
digitalWrite(nCS, HIGH);
SPI.endTransaction();
Serial.print(id, HEX);
Serial.print(id, BIN);
Serial.print("\n");
delay(1000);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment