Skip to content

Commit

Permalink
Fix SPI mode to 3, as per documentention
Browse files Browse the repository at this point in the history
  • Loading branch information
leollo98 authored Feb 27, 2024
1 parent fdcf3d2 commit b738254
Show file tree
Hide file tree
Showing 2 changed files with 197 additions and 6 deletions.
190 changes: 185 additions & 5 deletions AD7606.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONV
digitalWrite(_CONVSTA, 0);
digitalWrite(_CONVSTB, 0);
digitalWrite(_RESET, 0);
digitalWrite(_RD, 1);
reset();
};
AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE)
Expand All @@ -115,6 +116,7 @@ AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONV
digitalWrite(_CONVSTA, 0);
digitalWrite(_CONVSTB, 0);
digitalWrite(_RESET, 0);
digitalWrite(_RD, 1);
reset();
};
AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2)
Expand Down Expand Up @@ -143,6 +145,7 @@ AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONV
digitalWrite(_CONVSTA, 0);
digitalWrite(_CONVSTB, 0);
digitalWrite(_RESET, 0);
digitalWrite(_RD, 1);
reset();
};
AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2,int RANGE)
Expand Down Expand Up @@ -173,6 +176,127 @@ AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONV
digitalWrite(_CONVSTA, 0);
digitalWrite(_CONVSTB, 0);
digitalWrite(_RESET, 0);
digitalWrite(_RD, 1);
reset();
};
[[deprecated( Use AD7606_ESPI insted )]]
AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET)
{
_RESET = RESET;
pinMode(_RESET,OUTPUT);
_CS = CS;
pinMode(_CS,OUTPUT);
_CONVSTA = CONVSTA;
pinMode(_CONVSTA,OUTPUT);
_CONVSTB = CONVSTB;
pinMode(_CONVSTB,OUTPUT);
_DB7 = DB7;
pinMode(_DB7,OUTPUT);
_DB8 = DB8;
pinMode(_DB8,OUTPUT);
_RD = RD;
pinMode(_RD,OUTPUT);
_BUSY = BUSY;
pinMode(_BUSY,OUTPUT);
digitalWrite(_CS, 0);
digitalWrite(_CONVSTA, 0);
digitalWrite(_CONVSTB, 0);
digitalWrite(_RESET, 0);
digitalWrite(_RD, 1);
reset();
};
[[deprecated( Use AD7606_ESPI insted )]]
AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE)
{
_RESET = RESET;
pinMode(_RESET,OUTPUT);
_CS = CS;
pinMode(_CS,OUTPUT);
_CONVSTA = CONVSTA;
pinMode(_CONVSTA,OUTPUT);
_CONVSTB = CONVSTB;
pinMode(_CONVSTB,OUTPUT);
_DB7 = DB7;
pinMode(_DB7,OUTPUT);
_DB8 = DB8;
pinMode(_DB8,OUTPUT);
_RD = RD;
pinMode(_RD,OUTPUT);
_BUSY = BUSY;
pinMode(_BUSY,OUTPUT);
_RANGE = RANGE;
pinMode(_RANGE,OUTPUT);
digitalWrite(_CS, 0);
digitalWrite(_CONVSTA, 0);
digitalWrite(_CONVSTB, 0);
digitalWrite(_RESET, 0);
digitalWrite(_RD, 1);
reset();
};
[[deprecated( Use AD7606_ESPI insted )]]
AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2)
{
_RESET = RESET;
pinMode(_RESET,OUTPUT);
_CS = CS;
pinMode(_CS,OUTPUT);
_CONVSTA = CONVSTA;
pinMode(_CONVSTA,OUTPUT);
_CONVSTB = CONVSTB;
pinMode(_CONVSTB,OUTPUT);
_DB7 = DB7;
pinMode(_DB7,OUTPUT);
_DB8 = DB8;
pinMode(_DB8,OUTPUT);
_RD = RD;
pinMode(_RD,OUTPUT);
_BUSY = BUSY;
pinMode(_BUSY ,OUTPUT);
_OS0 = OS0;
pinMode(_OS0,OUTPUT);
_OS1 = OS1;
pinMode(_OS1,OUTPUT);
_OS2 = OS2;
pinMode(_OS2,OUTPUT);
digitalWrite(_CS, 0);
digitalWrite(_CONVSTA, 0);
digitalWrite(_CONVSTB, 0);
digitalWrite(_RESET, 0);
digitalWrite(_RD, 1);
reset();
};
[[deprecated( Use AD7606_ESPI insted )]]
AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2,int RANGE)
{
_RESET = RESET;
pinMode(_RESET,OUTPUT);
_CS = CS;
pinMode(_CS,OUTPUT);
_CONVSTA = CONVSTA;
pinMode(_CONVSTA,OUTPUT);
_CONVSTB = CONVSTB;
pinMode(_CONVSTB,OUTPUT);
_DB7 = DB7;
pinMode(_DB7,OUTPUT);
_DB8 = DB8;
pinMode(_DB8,OUTPUT);
_RD = RD;
pinMode(_RD,OUTPUT);
_BUSY = BUSY;
pinMode(_BUSY ,OUTPUT);
_OS0 = OS0;
pinMode(_OS0,OUTPUT);
_OS1 = OS1;
pinMode(_OS1,OUTPUT);
_OS2 = OS2;
pinMode(_OS2,OUTPUT);
_RANGE = RANGE;
pinMode(_RANGE,OUTPUT);
digitalWrite(_CS, 0);
digitalWrite(_CONVSTA, 0);
digitalWrite(_CONVSTB, 0);
digitalWrite(_RESET, 0);
digitalWrite(_RD, 1);
reset();
};

Expand All @@ -197,7 +321,7 @@ void AD7606_ESPI::read(int16_t *rawDataBuffer)
{
for (int8_t i = 15; i >= 0; i--)
{
pulse(_RD);
ipulse(_RD);
value1 += digitalRead(_DB7) << i;
value2 += digitalRead(_DB8) << i;
}
Expand Down Expand Up @@ -225,7 +349,7 @@ void AD7606_ESPI::read(int16_t *rawDataBuffer,uint8_t times)
{
for (int8_t i = 15; i >= 0; i--)
{
pulse(_RD);
ipulse(_RD);
value1 += digitalRead(_DB7) << i;
value2 += digitalRead(_DB8) << i;
}
Expand Down Expand Up @@ -253,7 +377,7 @@ int16_t * AD7606_ESPI::readAndReturn()
{
for (int8_t i = 15; i >= 0; i--)
{
pulse(_RD);
ipulse(_RD);
value1 += digitalRead(_DB7) << i;
value2 += digitalRead(_DB8) << i;
}
Expand All @@ -264,6 +388,62 @@ int16_t * AD7606_ESPI::readAndReturn()
return rawDataBuffer;
}

void AD7606_Serial::read(int16_t *rawDataBuffer)
{
uint16_t value1 = 0;
uint16_t value2 = 0;

pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion

digitalWrite(_CS, 0); // Enable DOUTA/DOUTB lines and shift-out the conversion results

while (digitalRead(_BUSY))
{
// wait for conversions to be completed (low level on BUSY)
}

for (uint8_t k = 0; k < 4; k++)
{
for (int8_t i = 15; i >= 0; i--)
{
ipulse(_RD);
value1 += digitalRead(_DB7) << i;
value2 += digitalRead(_DB8) << i;
}
*(rawDataBuffer + k) = value1;
*(rawDataBuffer + 4 + k) = value2;
}
digitalWrite(_CS, 1);
}
void AD7606_Serial::read(int16_t *rawDataBuffer,uint8_t times)
{
times > 4 ? times = 4 : times;
uint16_t value1 = 0;
uint16_t value2 = 0;

pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion

digitalWrite(_CS, 0); // Enable DOUTA/DOUTB lines and shift-out the conversion results

while (digitalRead(_BUSY))
{
// wait for conversions to be completed (low level on BUSY)
}

for (uint8_t k = 0; k < times; k++)
{
for (int8_t i = 15; i >= 0; i--)
{
ipulse(_RD);
value1 += digitalRead(_DB7) << i;
value2 += digitalRead(_DB8) << i;
}
*(rawDataBuffer + k) = value1;
*(rawDataBuffer + 4 + k) = value2;
}
digitalWrite(_CS, 1);
}

// Constructor for parallel byte comunication
AD7606_8080::AD7606_8080(int D0_D7[8], int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET)
{
Expand Down Expand Up @@ -712,7 +892,7 @@ int16_t * AD7606_16::readAndReturn()
}


AD7606_SPI::AD7606_SPI(int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET)
AD7606_SPI::AD7606_SPI(int MISO, int SCK, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET)
{
_RESET = RESET;
pinMode(_RESET,OUTPUT);
Expand All @@ -730,7 +910,7 @@ AD7606_SPI::AD7606_SPI(int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET)
SPI.begin(SCK,MISO,MOSI,CS);
SPI.setBitOrder(SPI_MSBFIRST);
SPI.setClockDivider(0x2000);
SPI.setDataMode(SPI_MODE0);
SPI.setDataMode(SPI_MODE3);
reset();
};

Expand Down
13 changes: 12 additions & 1 deletion AD7606.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,17 @@ class AD7606_ESPI : public AD7606
int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer
};

class AD7606_Serial : public AD7606
{
public:
AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET); // Constructor for serial communication
AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE); // Constructor for serial communication
AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2); // Constructor for serial communication
AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2,int RANGE); // Constructor for serial communication
void read(int16_t *); // Read raw values from ADC
void read(int16_t *,uint8_t ); // Read raw values from ADC
};

class AD7606_8080 : public AD7606
{
public:
Expand Down Expand Up @@ -75,7 +86,7 @@ class AD7606_16 : public AD7606
class AD7606_SPI : public AD7606
{
public:
AD7606_SPI(int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET); // Constructor for SPI communication
AD7606_SPI(int MISO, int SCK, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET); // Constructor for SPI communication
void read(int16_t *); // Read raw values from ADC
void read(int16_t *,uint8_t ); // Read raw values from ADC
int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer
Expand Down

0 comments on commit b738254

Please sign in to comment.