Skip to content

Commit

Permalink
add readNoPulse for multiple ADCs
Browse files Browse the repository at this point in the history
  • Loading branch information
leollo98 authored Jan 30, 2025
1 parent 1375268 commit 2881c95
Show file tree
Hide file tree
Showing 2 changed files with 179 additions and 1 deletion.
172 changes: 172 additions & 0 deletions AD7606.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,47 @@ void AD7606_ESPI::read(int16_t *rawDataBuffer,uint8_t times)
}
digitalWrite(_CS, 1);
}
void AD7606_ESPI::readNoPulse(int16_t *rawDataBuffer)
{
uint16_t value1 = 0;
uint16_t value2 = 0;

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

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_ESPI::readNoPulse(int16_t *rawDataBuffer,uint8_t times)
{
times > 4 ? times = 4 : times;
uint16_t value1 = 0;
uint16_t value2 = 0;

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

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);
}
int16_t * AD7606_ESPI::readAndReturn()
{
int16_t rawDataBuffer[8];
Expand Down Expand Up @@ -439,6 +480,47 @@ void AD7606_Serial::read(int16_t *rawDataBuffer,uint8_t times)
}
digitalWrite(_CS, 1);
}
void AD7606_Serial::readNoPulse(int16_t *rawDataBuffer)
{
uint16_t value1 = 0;
uint16_t value2 = 0;

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

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::readNoPulse(int16_t *rawDataBuffer,uint8_t times)
{
times > 4 ? times = 4 : times;
uint16_t value1 = 0;
uint16_t value2 = 0;

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

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 @@ -616,6 +698,55 @@ void AD7606_8080::read(int16_t *rawDataBuffer,uint8_t times)
}
digitalWrite(_CS, 1);
}
void AD7606_8080::readNoPulse(int16_t *rawDataBuffer)
{
uint16_t value1 = 0;

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

for (uint8_t k = 0; k < 8; k++)
{
for (uint8_t i = 0; i < 2; i++)
{
ipulse(_RD);
for (uint8_t j = 15; j >= 8; j++)
{
value1 += digitalRead(_D0_D7[j - 8]) << j;
}
for (uint8_t j = 7; j >= 0; j++)
{
value1 += digitalRead(_D0_D7[j]) << j;
}
}
*(rawDataBuffer + k) = value1;
}
digitalWrite(_CS, 1);
}
void AD7606_8080::readNoPulse(int16_t *rawDataBuffer,uint8_t times)
{
times > 8 ? times = 8 : times;
uint16_t value1 = 0;

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

for (uint8_t k = 0; k < times; k++)
{
for (uint8_t i = 0; i < 2; i++)
{
ipulse(_RD);
for (uint8_t j = 15; j >= 8; j++)
{
value1 += digitalRead(_D0_D7[j - 8]) << j;
}
for (uint8_t j = 7; j >= 0; j++)
{
value1 += digitalRead(_D0_D7[j]) << j;
}
}
*(rawDataBuffer + k) = value1;
}
digitalWrite(_CS, 1);
}
int16_t * AD7606_8080::readAndReturn()
{
int16_t rawDataBuffer[8];
Expand Down Expand Up @@ -817,6 +948,47 @@ void AD7606_16::read(int16_t *rawDataBuffer,uint8_t times)
}
digitalWrite(_CS, 1);
}
void AD7606_16::readNoPulse(int16_t *rawDataBuffer)
{
uint16_t value1 = 0;

digitalWrite(_CS, 0);

for (uint8_t k = 0; k < 8; k++)
{
for (uint8_t i = 0; i < 2; i++)
{
ipulse(_RD);
for (uint8_t j = 15; j >= 0; j++)
{
value1 += digitalRead(_D0_D7[j]) << j;
}
}
*(rawDataBuffer + k) = value1;
}
digitalWrite(_CS, 1);
}
void AD7606_16::readNoPulse(int16_t *rawDataBuffer,uint8_t times)
{
times > 8 ? times = 8 : times;
uint16_t value1 = 0;

digitalWrite(_CS, 0);

for (uint8_t k = 0; k < times; k++)
{
for (uint8_t i = 0; i < 2; i++)
{
ipulse(_RD);
for (uint8_t j = 15; j >= 0; j++)
{
value1 += digitalRead(_D0_D7[j]) << j;
}
}
*(rawDataBuffer + k) = value1;
}
digitalWrite(_CS, 1);
}
int16_t * AD7606_16::readAndReturn()
{
int16_t rawDataBuffer[8];
Expand Down
8 changes: 7 additions & 1 deletion AD7606.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ class AD7606
void pulse(uint8_t, uint8_t);
void ipulse(uint8_t);
void ipulse(uint8_t, uint8_t);
void reset();
public:
void setOversampling(uint8_t);
void setRange(bool);
void extendedRange(bool);
void reset();
};

class AD7606_ESPI : public AD7606
Expand All @@ -46,6 +46,8 @@ class AD7606_ESPI : public AD7606
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); // Constructor for Emulated SPI communication
void read(int16_t *); // Read raw values from ADC
void read(int16_t *,uint8_t ); // Read raw values from ADC
void readNoPulse(int16_t *); // Read raw values from ADC
void readNoPulse(int16_t *,uint8_t ); // Read raw values from ADC
int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer
};

Expand All @@ -69,6 +71,8 @@ class AD7606_8080 : public AD7606
AD7606_8080(int D0_D7[8], int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2,int RANGE); // Constructor for parallel byte communication
void read(int16_t *); // Read raw values from ADC
void read(int16_t *,uint8_t ); // Read raw values from ADC
void readNoPulse(int16_t *); // Read raw values from ADC
void readNoPulse(int16_t *,uint8_t ); // Read raw values from ADC
int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer
};

Expand All @@ -81,6 +85,8 @@ class AD7606_16 : public AD7606
AD7606_16(int D0_D15[16], int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2,int RANGE); // Constructor for parallel communication
void read(int16_t *); // Read raw values from ADC
void read(int16_t *,uint8_t ); // Read raw values from ADC
void readNoPulse(int16_t *); // Read raw values from ADC
void readNoPulse(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 2881c95

Please sign in to comment.