From d41d812c78796e6da3d31def890ad5a073b155bc Mon Sep 17 00:00:00 2001 From: Leonardo Sartorello Date: Mon, 11 Jul 2022 19:10:47 -0300 Subject: [PATCH 01/18] new readAndReturn function --- AD7606.cpp | 91 +++++++++++++++++++ AD7606.h | 3 + README.md | 4 +- .../Parallel_8080_Complete_with_return.ino | 38 ++++++++ library.json | 2 +- library.properties | 2 +- 6 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 examples/Parallel_8080_Complete_with_return.ino diff --git a/AD7606.cpp b/AD7606.cpp index d1a2bb8..2295e86 100644 --- a/AD7606.cpp +++ b/AD7606.cpp @@ -227,6 +227,35 @@ void AD7606_Serial::read(int16_t *rawDataBuffer,uint8_t times) } digitalWrite(_CS, 1); } +int16_t * AD7606_Serial::readAndReturn() +{ + int16_t rawDataBuffer[8]; + 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--) + { + pulse(_RD); + value1 += digitalRead(_DB7) << i; + value2 += digitalRead(_DB8) << i; + } + rawDataBuffer[k] = value1; + rawDataBuffer[4+k] = value2; + } + digitalWrite(_CS, 1); + return rawDataBuffer; +} // 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) @@ -427,6 +456,39 @@ void AD7606_8080::read(int16_t *rawDataBuffer,uint8_t times) } digitalWrite(_CS, 1); } +int16_t * AD7606_8080::readAndReturn() +{ + int16_t rawDataBuffer[8]; + uint16_t value1 = 0; + + pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion + + digitalWrite(_CS, 0); + + while (digitalRead(_BUSY)) + { + // wait for conversions to be completed (low level on BUSY) + } + + 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); + return rawDataBuffer; +} // Constructor for parallel comunication AD7606_16::AD7606_16(int D0_D15[16], int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) @@ -619,6 +681,35 @@ void AD7606_16::read(int16_t *rawDataBuffer,uint8_t times) } digitalWrite(_CS, 1); } +int16_t * AD7606_16::read() +{ + int16_t rawDataBuffer[8]; + uint16_t value1 = 0; + + pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion + + digitalWrite(_CS, 0); + + while (digitalRead(_BUSY)) + { + // wait for conversions to be completed (low level on BUSY) + } + + 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); + return rawDataBuffer; +} diff --git a/AD7606.h b/AD7606.h index 26a4114..7616b86 100644 --- a/AD7606.h +++ b/AD7606.h @@ -45,6 +45,7 @@ class AD7606_Serial : public AD7606 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 + int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer }; class AD7606_8080 : public AD7606 @@ -56,6 +57,7 @@ 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 + int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer }; class AD7606_16 : public AD7606 @@ -67,5 +69,6 @@ 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 + int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer }; #endif \ No newline at end of file diff --git a/README.md b/README.md index 93ec8b1..4345b3a 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,8 @@ The total time is based on this LHL with the folowing requirementes to read all Reading the ADC is very straightforward, the **read()** function handles all in one call. But if you want to read less channels, like in the case of AD7606-6 or AD7606-4, or just 2 channels in serial or 1 on 8080 or 16 modes, you can use the **read()** function with 2 arguments, one for the data vector and 1 for the number o channels. -In serial mode 1 channel give back channels 1 and 5, because they are read simultaneously. -In 8080 or 16 modes, the channels are retrive in order, so if you want to read the 6 channel, is necessary to read all previous channels. +In serial mode each data retrival give back 2 channels, 1 and 5, 2 and 6 ... because they are read simultaneously. +In 8080 or 16 modes, the channels are retrive in order, so if you want to read the 6º channel, is necessary to read all previous channels. diff --git a/examples/Parallel_8080_Complete_with_return.ino b/examples/Parallel_8080_Complete_with_return.ino new file mode 100644 index 0000000..6961148 --- /dev/null +++ b/examples/Parallel_8080_Complete_with_return.ino @@ -0,0 +1,38 @@ +#include "AD7606.cpp" + +#define DB0 16 +#define DB1 17 +#define DB2 25 +#define DB3 26 +#define DB4 27 +#define DB5 32 +#define DB6 33 +#define DB7 34 +#define CVA_CVB 18 +#define CS 19 +#define RD 21 +#define RESET 22 +#define BUSY 23 +#define OS0 2 +#define OS1 4 +#define OS2 5 +#define RANGE 13 + +int DB0_DB7[] = {DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7}; + +AD7606_8080 AD(DB0_DB7, RD, CS, CVA_CVB, CVA_CVB, BUSY, RESET, OS0, OS1, OS2, RANGE); + +void setup() +{ + Serial.begin(115200); +} + +void loop() +{ + int16_t *Data; + Data = AD.read(); + for (uint8_t i = 0; i < 8; i++) + { + Serial.println(Data[i]); + } +} diff --git a/library.json b/library.json index ae75c41..6ada8d7 100644 --- a/library.json +++ b/library.json @@ -15,7 +15,7 @@ "type": "git", "url": "https://github.com/leollo98/AD7606" }, - "version": "0.3.1", + "version": "0.4.0", "license": "MIT", "frameworks": "Arduino", "platforms": "*", diff --git a/library.properties b/library.properties index 1cb707a..fe44542 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=AD7606 -version=0.3.1 +version=0.4.0 author=Leonardo de Macedo Sartorello maintainer=Leonardo de Macedo Sartorello sentence=Arduino library for AD7606 - Parallel/Serial 16 bit ADC From 399fd0ef168254a4c53a7d4b03cdbadc8085d6fd Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Thu, 20 Oct 2022 20:40:29 -0300 Subject: [PATCH 02/18] Update AD7606.cpp --- AD7606.cpp | 176 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 138 insertions(+), 38 deletions(-) diff --git a/AD7606.cpp b/AD7606.cpp index 2295e86..6f4f8fd 100644 --- a/AD7606.cpp +++ b/AD7606.cpp @@ -1,4 +1,18 @@ #include "AD7606.h" +#include + +#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 + #define VSPI FSPI +#endif + +#if CONFIG_IDF_TARGET_ESP32* + #define spiClk = 40000000; //40Mhz +#else + #define spiClk = 20000000; //20Mhz +#endif + + +SPIClass * vspi = NULL; // Resets the AD7606 void AD7606::reset() @@ -53,11 +67,11 @@ void AD7606::setOversampling(uint8_t times){ void AD7606::setRange(bool range){ pinMode(_RANGE,OUTPUT); - digitalWrite(_RANGE,range); + digitalWrite(_RANGE,range);yml } -// Constructor for serial comunicatio -AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) +// Constructor for emulated SPI comunication +AD7606_Serial::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) { _RESET = RESET; pinMode(_RESET,OUTPUT); @@ -68,9 +82,7 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int _CONVSTB = CONVSTB; pinMode(_CONVSTB,OUTPUT); _DB7 = DB7; - pinMode(_DB7,OUTPUT); _DB8 = DB8; - pinMode(_DB8,OUTPUT); _RD = RD; pinMode(_RD,OUTPUT); _BUSY = BUSY; @@ -81,7 +93,29 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int digitalWrite(_RESET, 0); reset(); }; -AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE) + +AD7606_Serial::AD7606_ESPI(int DB7, 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; + _RD = RD; + pinMode(_RD,OUTPUT); + _BUSY = BUSY; + pinMode(_BUSY,OUTPUT); + digitalWrite(_CS, 0); + digitalWrite(_CONVSTA, 0); + digitalWrite(_CONVSTB, 0); + digitalWrite(_RESET, 0); + reset(); +}; +AD7606_Serial::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE) { _RESET = RESET; pinMode(_RESET,OUTPUT); @@ -92,9 +126,7 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int _CONVSTB = CONVSTB; pinMode(_CONVSTB,OUTPUT); _DB7 = DB7; - pinMode(_DB7,OUTPUT); _DB8 = DB8; - pinMode(_DB8,OUTPUT); _RD = RD; pinMode(_RD,OUTPUT); _BUSY = BUSY; @@ -107,7 +139,7 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int digitalWrite(_RESET, 0); reset(); }; -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) +AD7606_Serial::AD7606_ESPI(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); @@ -118,9 +150,7 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int _CONVSTB = CONVSTB; pinMode(_CONVSTB,OUTPUT); _DB7 = DB7; - pinMode(_DB7,OUTPUT); _DB8 = DB8; - pinMode(_DB8,OUTPUT); _RD = RD; pinMode(_RD,OUTPUT); _BUSY = BUSY; @@ -137,7 +167,7 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int digitalWrite(_RESET, 0); reset(); }; -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) +AD7606_Serial::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) { _RESET = RESET; pinMode(_RESET,OUTPUT); @@ -148,9 +178,7 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int _CONVSTB = CONVSTB; pinMode(_CONVSTB,OUTPUT); _DB7 = DB7; - pinMode(_DB7,OUTPUT); _DB8 = DB8; - pinMode(_DB8,OUTPUT); _RD = RD; pinMode(_RD,OUTPUT); _BUSY = BUSY; @@ -176,10 +204,11 @@ void AD7606_Serial::read(int16_t *rawDataBuffer) { uint16_t value1 = 0; uint16_t value2 = 0; + + digitalWrite(_CS, 0); // Enable DOUTA/DOUTB lines and shift-out the conversion results 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)) { @@ -204,11 +233,11 @@ void AD7606_Serial::read(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 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) @@ -232,11 +261,11 @@ int16_t * AD7606_Serial::readAndReturn() int16_t rawDataBuffer[8]; uint16_t value1 = 0; uint16_t value2 = 0; + + digitalWrite(_CS, 0); // Enable DOUTA/DOUTB lines and shift-out the conversion results 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) @@ -304,7 +333,6 @@ AD7606_8080::AD7606_8080(int D0_D7[8], int RD, int CS, int CONVSTA, int CONVSTB, for (uint8_t i = 0; i < 8; i++) { _D0_D7[i] = D0_D7[i]; - pinMode(_D0_D7[i],OUTPUT); } _RD = RD; pinMode(_RD,OUTPUT); @@ -335,7 +363,6 @@ AD7606_8080::AD7606_8080(int D0_D7[8], int RD, int CS, int CONVSTA, int CONVSTB, for (uint8_t i = 0; i < 8; i++) { _D0_D7[i] = D0_D7[i]; - pinMode(_D0_D7[i],OUTPUT); } _RD = RD; pinMode(_RD,OUTPUT); @@ -370,7 +397,6 @@ AD7606_8080::AD7606_8080(int D0_D7[8], int RD, int CS, int CONVSTA, int CONVSTB, for (uint8_t i = 0; i < 8; i++) { _D0_D7[i] = D0_D7[i]; - pinMode(_D0_D7[i],OUTPUT); } _RD = RD; pinMode(_RD,OUTPUT); @@ -396,11 +422,11 @@ AD7606_8080::AD7606_8080(int D0_D7[8], int RD, int CS, int CONVSTA, int CONVSTB, void AD7606_8080::read(int16_t *rawDataBuffer) { uint16_t value1 = 0; + + digitalWrite(_CS, 0); // Enable DOUTA/DOUTB lines and shift-out the conversion results pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion - digitalWrite(_CS, 0); - while (digitalRead(_BUSY)) { // wait for conversions to be completed (low level on BUSY) @@ -429,10 +455,10 @@ void AD7606_8080::read(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 + pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion - digitalWrite(_CS, 0); - while (digitalRead(_BUSY)) { // wait for conversions to be completed (low level on BUSY) @@ -460,11 +486,11 @@ int16_t * AD7606_8080::readAndReturn() { int16_t rawDataBuffer[8]; uint16_t value1 = 0; + + digitalWrite(_CS, 0); // Enable DOUTA/DOUTB lines and shift-out the conversion results pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion - digitalWrite(_CS, 0); - while (digitalRead(_BUSY)) { // wait for conversions to be completed (low level on BUSY) @@ -508,7 +534,6 @@ AD7606_16::AD7606_16(int D0_D15[16], int RD, int CS, int CONVSTA, int CONVSTB, i for (uint8_t i = 0; i < 8; i++) { _D0_D15[i] = D0_D15[i]; - pinMode(_D0_D15[i],OUTPUT); } _RD = RD; pinMode(_RD,OUTPUT); @@ -537,7 +562,6 @@ AD7606_16::AD7606_16(int D0_D15[16], int RD, int CS, int CONVSTA, int CONVSTB, i for (uint8_t i = 0; i < 8; i++) { _D0_D15[i] = D0_D15[i]; - pinMode(_D0_D15[i],OUTPUT); } _RD = RD; pinMode(_RD,OUTPUT); @@ -568,7 +592,6 @@ AD7606_16::AD7606_16(int D0_D15[16], int RD, int CS, int CONVSTA, int CONVSTB, i for (uint8_t i = 0; i < 8; i++) { _D0_D15[i] = D0_D15[i]; - pinMode(_D0_D15[i],OUTPUT); } _RD = RD; pinMode(_RD,OUTPUT); @@ -603,7 +626,6 @@ AD7606_16::AD7606_16(int D0_D15[16], int RD, int CS, int CONVSTA, int CONVSTB, i for (uint8_t i = 0; i < 8; i++) { _D0_D15[i] = D0_D15[i]; - pinMode(_D0_D15[i],OUTPUT); } _RD = RD; pinMode(_RD,OUTPUT); @@ -629,11 +651,11 @@ AD7606_16::AD7606_16(int D0_D15[16], int RD, int CS, int CONVSTA, int CONVSTB, i void AD7606_16::read(int16_t *rawDataBuffer) { uint16_t value1 = 0; + + digitalWrite(_CS, 0); pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion - digitalWrite(_CS, 0); - while (digitalRead(_BUSY)) { // wait for conversions to be completed (low level on BUSY) @@ -657,11 +679,11 @@ void AD7606_16::read(int16_t *rawDataBuffer,uint8_t times) { times > 8 ? times = 8 : times; uint16_t value1 = 0; + + digitalWrite(_CS, 0); pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion - digitalWrite(_CS, 0); - while (digitalRead(_BUSY)) { // wait for conversions to be completed (low level on BUSY) @@ -685,11 +707,11 @@ int16_t * AD7606_16::read() { int16_t rawDataBuffer[8]; uint16_t value1 = 0; + + digitalWrite(_CS, 0); pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion - digitalWrite(_CS, 0); - while (digitalRead(_BUSY)) { // wait for conversions to be completed (low level on BUSY) @@ -712,4 +734,82 @@ int16_t * AD7606_16::read() } +AD7606_Serial::AD7606_SPI(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); + _BUSY = BUSY; + digitalWrite(_CS, 0); + digitalWrite(_CONVSTA, 0); + digitalWrite(_CONVSTB, 0); + digitalWrite(_RESET, 0); + vspi = new SPIClass(VSPI); + vspi->begin(); + vspi.beginTransaction(SPISettings(spiClk, MSBFIRST, SPI_MODE0))) + reset(); +}; + +void AD7606_SPI::read(int16_t *rawDataBuffer) +{ + digitalWrite(_CS, 0); + + pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion + + while (digitalRead(_BUSY)) + { + // wait for conversions to be completed (low level on BUSY) + } + + for (uint8_t k = 0; k < 8; k++) + { + rawDataBuffer[k] = SPI.transfer16(0x0000); + } + digitalWrite(_CS, 1); +} +void AD7606_SPI::read(int16_t *rawDataBuffer,uint8_t times) +{ + digitalWrite(_CS, 0); + + pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion + + times > 8 ? times = 8 : times; // save some uSecunds + + while (digitalRead(_BUSY)) + { + // wait for conversions to be completed (low level on BUSY) + } + for (uint8_t k = 0; k < times; k++) + { + rawDataBuffer[k] = SPI.transfer16(0x0000); + } + digitalWrite(_CS, 1); +} + + +int16_t * AD7606_SPI::read() +{ + int16_t rawDataBuffer[8]; + + digitalWrite(_CS, 0); + + pulse(_CONVSTA, _CONVSTB); // Pulse CONVSTA/CONVSTB to start conversion + + while (digitalRead(_BUSY)) + { + // wait for conversions to be completed (low level on BUSY) + } + + for (uint8_t k = 0; k < 8; k++) + { + rawDataBuffer[k] = SPI.transfer16(0x0000); + } + digitalWrite(_CS, 1); + return rawDataBuffer; +} From 29d772ea0002988716abc5b1f24d8a2626b08a54 Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Thu, 20 Oct 2022 20:43:31 -0300 Subject: [PATCH 03/18] Update AD7606.h --- AD7606.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/AD7606.h b/AD7606.h index 7616b86..45a8418 100644 --- a/AD7606.h +++ b/AD7606.h @@ -36,13 +36,13 @@ class AD7606 void setRange(bool); }; -class AD7606_Serial : public AD7606 +class AD7606_ESPI : 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 + AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET); // Constructor for Emulated SPI communication + AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE); // Constructor for Emulated SPI communication + AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2); // Constructor for Emulated SPI communication + 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 int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer @@ -71,4 +71,13 @@ class AD7606_16 : public AD7606 void read(int16_t *,uint8_t ); // Read raw values from ADC int16_t * readAndReturn(); // Read raw values from ADC and return a array pointer }; -#endif \ No newline at end of file + +class AD7606_SPI : public AD7606 +{ +public: + AD7606_Serial::AD7606_SPI(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 +}; +#endif From 2137348be20b0b0c472b962cf08faedf6deff70b Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Thu, 20 Oct 2022 20:47:21 -0300 Subject: [PATCH 04/18] changed incorect protocol name --- examples/{Serial.ino => Emulated_SPI.ino} | 2 +- examples/{Serial_Complete.ino => Emulated_SPI_Complete.ino} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename examples/{Serial.ino => Emulated_SPI.ino} (81%) rename examples/{Serial_Complete.ino => Emulated_SPI_Complete.ino} (84%) diff --git a/examples/Serial.ino b/examples/Emulated_SPI.ino similarity index 81% rename from examples/Serial.ino rename to examples/Emulated_SPI.ino index 932fda0..a556aa4 100644 --- a/examples/Serial.ino +++ b/examples/Emulated_SPI.ino @@ -8,7 +8,7 @@ #define RESET 22 #define BUSY 23 -AD7606_Serial AD(DB7, DB8, RD, CS, CVA_CVB, CVA_CVB, BUSY, RESET); +AD7606_ESPI AD(DB7, DB8, RD, CS, CVA_CVB, CVA_CVB, BUSY, RESET); void setup() { diff --git a/examples/Serial_Complete.ino b/examples/Emulated_SPI_Complete.ino similarity index 84% rename from examples/Serial_Complete.ino rename to examples/Emulated_SPI_Complete.ino index b02b0ca..62f07b7 100644 --- a/examples/Serial_Complete.ino +++ b/examples/Emulated_SPI_Complete.ino @@ -12,7 +12,7 @@ #define OS2 32 #define RANGE 33 -AD7606_Serial AD(DB7, DB8, RD, CS, CVA_CVB, CVA_CVB, BUSY, RESET, OS0, OS1, OS2, RANGE); +AD7606_ESPI AD(DB7, DB8, RD, CS, CVA_CVB, CVA_CVB, BUSY, RESET, OS0, OS1, OS2, RANGE); void setup() { From d82ca7f80f2e73e44e571a5cdb68c87aad511800 Mon Sep 17 00:00:00 2001 From: leollo98 Date: Thu, 27 Oct 2022 15:48:05 -0300 Subject: [PATCH 05/18] change spiClk --- AD7606.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AD7606.cpp b/AD7606.cpp index 6f4f8fd..9a382d1 100644 --- a/AD7606.cpp +++ b/AD7606.cpp @@ -8,7 +8,7 @@ #if CONFIG_IDF_TARGET_ESP32* #define spiClk = 40000000; //40Mhz #else - #define spiClk = 20000000; //20Mhz + #define spiClk = SPI_CLOCK_DIV2; //8Mhz #endif From 62394bf8ed9a4db93f28520d8548adcba901166f Mon Sep 17 00:00:00 2001 From: leollo98 Date: Thu, 27 Oct 2022 16:02:48 -0300 Subject: [PATCH 06/18] Dev lib --- library.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library.json b/library.json index 6ada8d7..2ff021f 100644 --- a/library.json +++ b/library.json @@ -1,7 +1,7 @@ { - "name": "AD7606", + "name": "AD7606 - Dev", "keywords": "AD7606, AD7606-6, AD7606-4, ADC, Serial, Parallel", - "description": "Arduino library for AD7606 - Parallel/Serial 16 bit ADC", + "description": "Arduino library for AD7606 - Parallel/Serial 16 bit ADC - Dev branch", "authors": [ { @@ -13,7 +13,7 @@ "repository": { "type": "git", - "url": "https://github.com/leollo98/AD7606" + "url": "https://github.com/leollo98/AD7606/tree/Dev" }, "version": "0.4.0", "license": "MIT", From be9121ef76151e66acb03f5af6737279e41bfa2a Mon Sep 17 00:00:00 2001 From: leollo98 Date: Thu, 27 Oct 2022 16:03:57 -0300 Subject: [PATCH 07/18] Dev lib --- library.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library.properties b/library.properties index fe44542..4b6b856 100644 --- a/library.properties +++ b/library.properties @@ -1,8 +1,8 @@ -name=AD7606 +name=AD7606 - Dev version=0.4.0 author=Leonardo de Macedo Sartorello maintainer=Leonardo de Macedo Sartorello -sentence=Arduino library for AD7606 - Parallel/Serial 16 bit ADC +sentence=Arduino library for AD7606 - Parallel/Serial 16 bit ADC - Dev branch paragraph=Only for AD7606 category=Sensors url=https://github.com/leollo98/AD7606 From 8fa13ce9a086fb5cd81242ceac77a49f01106f67 Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Thu, 27 Oct 2022 16:04:31 -0300 Subject: [PATCH 08/18] Update main.yml --- .github/workflows/main.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b82bb7a..619d50b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [ main ] + branches: [ '*' ] pull_request: - branches: [ main ] + branches: [ '*' ] jobs: CI: @@ -12,8 +12,21 @@ jobs: steps: - uses: actions/checkout@v3 - - name: arduino/arduino-lint-action + - name: arduino lint action uses: arduino/arduino-lint-action@v1.0.1 with: verbose: true + + - name: Update my-file.json description + uses: jossef/action-set-json-field@v2 + with: + file: library.json + field: version + value: ${{ github.run_number }} + + - name: platform IO publish + uses: bojit/platformio-publish@main + with: + token: ${{ secrets.PLATFORMIO_TOKEN }} + From a8d90e505d70e49cdf9bffed89c9193ee15d3499 Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Thu, 27 Oct 2022 16:09:51 -0300 Subject: [PATCH 09/18] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 619d50b..3d24ff7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: with: file: library.json field: version - value: ${{ github.run_number }} + value: 1.${{ github.run_number }}.0 - name: platform IO publish uses: bojit/platformio-publish@main From 6090604eb60a3c18afd134042b89c2900cb61fdb Mon Sep 17 00:00:00 2001 From: leollo98 Date: Thu, 27 Oct 2022 16:12:45 -0300 Subject: [PATCH 10/18] Dev lib --- AD7606.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AD7606.cpp b/AD7606.cpp index 9a382d1..b6d2194 100644 --- a/AD7606.cpp +++ b/AD7606.cpp @@ -5,7 +5,7 @@ #define VSPI FSPI #endif -#if CONFIG_IDF_TARGET_ESP32* +#if CONFIG_IDF_TARGET_ESP32 #define spiClk = 40000000; //40Mhz #else #define spiClk = SPI_CLOCK_DIV2; //8Mhz From fe6bf2e6808068633df57f27e478b594d872be45 Mon Sep 17 00:00:00 2001 From: leollo98 Date: Thu, 27 Oct 2022 16:35:49 -0300 Subject: [PATCH 11/18] Dev lib --- AD7606.cpp | 12 ++++++------ AD7606.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/AD7606.cpp b/AD7606.cpp index b6d2194..aa12f8b 100644 --- a/AD7606.cpp +++ b/AD7606.cpp @@ -71,7 +71,7 @@ void AD7606::setRange(bool range){ } // Constructor for emulated SPI comunication -AD7606_Serial::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) +AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) { _RESET = RESET; pinMode(_RESET,OUTPUT); @@ -94,7 +94,7 @@ AD7606_Serial::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CO reset(); }; -AD7606_Serial::AD7606_ESPI(int DB7, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) +AD7606_ESPI::AD7606_ESPI(int DB7, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) { _RESET = RESET; pinMode(_RESET,OUTPUT); @@ -115,7 +115,7 @@ AD7606_Serial::AD7606_ESPI(int DB7, int RD, int CS, int CONVSTA, int CONVSTB, in digitalWrite(_RESET, 0); reset(); }; -AD7606_Serial::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE) +AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE) { _RESET = RESET; pinMode(_RESET,OUTPUT); @@ -139,7 +139,7 @@ AD7606_Serial::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CO digitalWrite(_RESET, 0); reset(); }; -AD7606_Serial::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int OS0,int OS1,int OS2) +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) { _RESET = RESET; pinMode(_RESET,OUTPUT); @@ -167,7 +167,7 @@ AD7606_Serial::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CO digitalWrite(_RESET, 0); reset(); }; -AD7606_Serial::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) +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) { _RESET = RESET; pinMode(_RESET,OUTPUT); @@ -734,7 +734,7 @@ int16_t * AD7606_16::read() } -AD7606_Serial::AD7606_SPI(int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) +AD7606_SPI::AD7606_SPI(int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) { _RESET = RESET; pinMode(_RESET,OUTPUT); diff --git a/AD7606.h b/AD7606.h index 45a8418..1813d4a 100644 --- a/AD7606.h +++ b/AD7606.h @@ -75,7 +75,7 @@ class AD7606_16 : public AD7606 class AD7606_SPI : public AD7606 { public: - AD7606_Serial::AD7606_SPI(int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) // Constructor for SPI communication + AD7606_SPI::AD7606_SPI(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 From 6b6d30b35b8c1d68b445f45afec763ed702febf6 Mon Sep 17 00:00:00 2001 From: leollo98 Date: Thu, 27 Oct 2022 16:37:53 -0300 Subject: [PATCH 12/18] Dev lib --- AD7606.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AD7606.cpp b/AD7606.cpp index aa12f8b..f1ebd2b 100644 --- a/AD7606.cpp +++ b/AD7606.cpp @@ -200,7 +200,7 @@ AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONV // Read raw values from all 8 channels // rawDataBuffer is a pointer to an array of 8 16-bit integers -void AD7606_Serial::read(int16_t *rawDataBuffer) +void AD7606_ESPI::read(int16_t *rawDataBuffer) { uint16_t value1 = 0; uint16_t value2 = 0; @@ -228,7 +228,7 @@ void AD7606_Serial::read(int16_t *rawDataBuffer) } digitalWrite(_CS, 1); } -void AD7606_Serial::read(int16_t *rawDataBuffer,uint8_t times) +void AD7606_ESPI::read(int16_t *rawDataBuffer,uint8_t times) { times > 4 ? times = 4 : times; uint16_t value1 = 0; @@ -256,7 +256,7 @@ void AD7606_Serial::read(int16_t *rawDataBuffer,uint8_t times) } digitalWrite(_CS, 1); } -int16_t * AD7606_Serial::readAndReturn() +int16_t * AD7606_ESPI::readAndReturn() { int16_t rawDataBuffer[8]; uint16_t value1 = 0; From ccdfeb3808a51eaf054aba89b4946e44371cd9ff Mon Sep 17 00:00:00 2001 From: leollo98 Date: Thu, 27 Oct 2022 23:55:49 -0300 Subject: [PATCH 13/18] bug Fix --- AD7606.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AD7606.h b/AD7606.h index 1813d4a..6604137 100644 --- a/AD7606.h +++ b/AD7606.h @@ -75,7 +75,7 @@ class AD7606_16 : public AD7606 class AD7606_SPI : public AD7606 { public: - AD7606_SPI::AD7606_SPI(int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) // Constructor for SPI communication + AD7606_SPI(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 From 7db6313ca6cb873de248cc766c8063352048ce5b Mon Sep 17 00:00:00 2001 From: leollo98 Date: Fri, 28 Oct 2022 00:10:54 -0300 Subject: [PATCH 14/18] bug Fix --- AD7606.cpp | 41 ++++++++++------------------------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/AD7606.cpp b/AD7606.cpp index f1ebd2b..d030d36 100644 --- a/AD7606.cpp +++ b/AD7606.cpp @@ -5,10 +5,10 @@ #define VSPI FSPI #endif -#if CONFIG_IDF_TARGET_ESP32 - #define spiClk = 40000000; //40Mhz +#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 + #define spiClk 0x2000 //20Mhz #else - #define spiClk = SPI_CLOCK_DIV2; //8Mhz + #define spiClk SPI_CLOCK_DIV2 //8Mhz #endif @@ -67,7 +67,7 @@ void AD7606::setOversampling(uint8_t times){ void AD7606::setRange(bool range){ pinMode(_RANGE,OUTPUT); - digitalWrite(_RANGE,range);yml + digitalWrite(_RANGE,range); } // Constructor for emulated SPI comunication @@ -93,28 +93,6 @@ AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONV digitalWrite(_RESET, 0); reset(); }; - -AD7606_ESPI::AD7606_ESPI(int DB7, 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; - _RD = RD; - pinMode(_RD,OUTPUT); - _BUSY = BUSY; - pinMode(_BUSY,OUTPUT); - digitalWrite(_CS, 0); - digitalWrite(_CONVSTA, 0); - digitalWrite(_CONVSTB, 0); - digitalWrite(_RESET, 0); - reset(); -}; AD7606_ESPI::AD7606_ESPI(int DB7, int DB8, int RD, int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET,int RANGE) { _RESET = RESET; @@ -703,7 +681,7 @@ void AD7606_16::read(int16_t *rawDataBuffer,uint8_t times) } digitalWrite(_CS, 1); } -int16_t * AD7606_16::read() +int16_t * AD7606_16::readAndReturn() { int16_t rawDataBuffer[8]; uint16_t value1 = 0; @@ -749,9 +727,10 @@ AD7606_SPI::AD7606_SPI(int CS, int CONVSTA, int CONVSTB, int BUSY, int RESET) digitalWrite(_CONVSTA, 0); digitalWrite(_CONVSTB, 0); digitalWrite(_RESET, 0); - vspi = new SPIClass(VSPI); - vspi->begin(); - vspi.beginTransaction(SPISettings(spiClk, MSBFIRST, SPI_MODE0))) + SPI.begin(SCK,MISO,MOSI,CS); + SPI.setBitOrder(SPI_MSBFIRST); + SPI.setClockDivider(0x2000); + SPI.setDataMode(SPI_MODE0); reset(); }; @@ -793,7 +772,7 @@ void AD7606_SPI::read(int16_t *rawDataBuffer,uint8_t times) } -int16_t * AD7606_SPI::read() +int16_t * AD7606_SPI::readAndReturn() { int16_t rawDataBuffer[8]; From fdcf3d2aced64da351685b40a71cf08f4492bc5e Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Mon, 26 Feb 2024 23:13:50 -0300 Subject: [PATCH 15/18] Fix initialize 8080 and 16 bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4345b3a..99dbba2 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ This library should work for the devices mentioned below. To initialize the library you must call constructor as described below. - **AD7606_Serial( DB7, DB8, RD, CS, CONVSTA, CONVSTB, BUSY, RESET, OS0, OS1, OS2, RANGE)** Constructor for Serial comunication with all device ports, and optional Over Sampling and Range. -- **AD7606_8080( DB7, DB8, RD, CS, CONVSTA, CONVSTB, BUSY, RESET, OS0, OS1, OS2, RANGE)** Constructor for Parallel byte comunication with all device ports, and optional Over Sampling and Range. -- **AD7606_16( DB7, DB8, RD, CS, CONVSTA, CONVSTB, BUSY, RESET, OS0, OS1, OS2, RANGE)** Constructor for Parallel 2 bytes comunication with all device ports, and optional Over Sampling and Range. +- **AD7606_8080( DB0_DB7, RD, CS, CONVSTA, CONVSTB, BUSY, RESET, OS0, OS1, OS2, RANGE)** Constructor for Parallel byte comunication with all device ports, and optional Over Sampling and Range. +- **AD7606_16( DB0_DB15, RD, CS, CONVSTA, CONVSTB, BUSY, RESET, OS0, OS1, OS2, RANGE)** Constructor for Parallel 2 bytes comunication with all device ports, and optional Over Sampling and Range. After construction the **setOversampling(x)** can be called with the number of samples in 2^x form, with limit of 6, or 64 samples. The function **setRange(bool)** can be used to set the limits to 5V (+/- 2.5V) with false or 10V (+/- 5V) with true. @@ -83,4 +83,4 @@ The total time with Vdrive between 3.3V to 5.25V is 5µs, with Vdrive equal to 2 ## Examples -See [examples](https://github.com/leollo98/AD7606/tree/main/examples). \ No newline at end of file +See [examples](https://github.com/leollo98/AD7606/tree/main/examples). From b738254e4a4c17d7129450d8e1bae09b97cb1ca1 Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Mon, 26 Feb 2024 23:35:20 -0300 Subject: [PATCH 16/18] Fix SPI mode to 3, as per documentention --- AD7606.cpp | 190 +++++++++++++++++++++++++++++++++++++++++++++++++++-- AD7606.h | 13 +++- 2 files changed, 197 insertions(+), 6 deletions(-) diff --git a/AD7606.cpp b/AD7606.cpp index d030d36..6e4e831 100644 --- a/AD7606.cpp +++ b/AD7606.cpp @@ -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) @@ -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) @@ -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) @@ -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(); }; @@ -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; } @@ -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; } @@ -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; } @@ -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) { @@ -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); @@ -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(); }; diff --git a/AD7606.h b/AD7606.h index 6604137..98ee58c 100644 --- a/AD7606.h +++ b/AD7606.h @@ -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: @@ -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 From fa7d78da086565f6ad795c1998ed6382dc669c4d Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Mon, 26 Feb 2024 23:57:54 -0300 Subject: [PATCH 17/18] Update library.properties --- library.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library.properties b/library.properties index 4b6b856..4a41356 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=AD7606 - Dev -version=0.4.0 +version=0.5.0 author=Leonardo de Macedo Sartorello maintainer=Leonardo de Macedo Sartorello sentence=Arduino library for AD7606 - Parallel/Serial 16 bit ADC - Dev branch @@ -8,4 +8,4 @@ category=Sensors url=https://github.com/leollo98/AD7606 architectures=* includes=AD7606.h -depends= \ No newline at end of file +depends= From 8be950ad0ace20253ec365c76b8d5684f66fd0b7 Mon Sep 17 00:00:00 2001 From: Leonardo de Macedo Sartorello <45469728+leollo98@users.noreply.github.com> Date: Tue, 27 Feb 2024 00:02:32 -0300 Subject: [PATCH 18/18] Update library.json --- library.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library.json b/library.json index 2ff021f..6263874 100644 --- a/library.json +++ b/library.json @@ -15,10 +15,10 @@ "type": "git", "url": "https://github.com/leollo98/AD7606/tree/Dev" }, - "version": "0.4.0", + "version": "0.5.0", "license": "MIT", "frameworks": "Arduino", "platforms": "*", "headers": "AD7606.h" } - \ No newline at end of file +