diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b82bb7a..3d24ff7 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: 1.${{ github.run_number }}.0 + + - name: platform IO publish + uses: bojit/platformio-publish@main + with: + token: ${{ secrets.PLATFORMIO_TOKEN }} + diff --git a/AD7606.cpp b/AD7606.cpp index d1a2bb8..6e4e831 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 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 + #define spiClk 0x2000 //20Mhz +#else + #define spiClk SPI_CLOCK_DIV2 //8Mhz +#endif + + +SPIClass * vspi = NULL; // Resets the AD7606 void AD7606::reset() @@ -56,7 +70,116 @@ void AD7606::setRange(bool range){ digitalWrite(_RANGE,range); } -// Constructor for serial comunicatio +// Constructor for emulated SPI comunication +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); + _CS = CS; + pinMode(_CS,OUTPUT); + _CONVSTA = CONVSTA; + pinMode(_CONVSTA,OUTPUT); + _CONVSTB = CONVSTB; + pinMode(_CONVSTB,OUTPUT); + _DB7 = DB7; + _DB8 = DB8; + _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(); +}; +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); + _CS = CS; + pinMode(_CS,OUTPUT); + _CONVSTA = CONVSTA; + pinMode(_CONVSTA,OUTPUT); + _CONVSTB = CONVSTB; + pinMode(_CONVSTB,OUTPUT); + _DB7 = DB7; + _DB8 = DB8; + _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(); +}; +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); + _CS = CS; + pinMode(_CS,OUTPUT); + _CONVSTA = CONVSTA; + pinMode(_CONVSTA,OUTPUT); + _CONVSTB = CONVSTB; + pinMode(_CONVSTB,OUTPUT); + _DB7 = DB7; + _DB8 = DB8; + _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(); +}; +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); + _CS = CS; + pinMode(_CS,OUTPUT); + _CONVSTA = CONVSTA; + pinMode(_CONVSTA,OUTPUT); + _CONVSTB = CONVSTB; + pinMode(_CONVSTB,OUTPUT); + _DB7 = DB7; + _DB8 = DB8; + _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(); +}; +[[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; @@ -79,8 +202,10 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int 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; @@ -105,8 +230,10 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int 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; @@ -135,8 +262,10 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int 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; @@ -167,11 +296,98 @@ AD7606_Serial::AD7606_Serial(int DB7, int DB8, int RD, int CS, int CONVSTA, int digitalWrite(_CONVSTA, 0); digitalWrite(_CONVSTB, 0); digitalWrite(_RESET, 0); + digitalWrite(_RD, 1); reset(); }; // Read raw values from all 8 channels // rawDataBuffer is a pointer to an array of 8 16-bit integers +void AD7606_ESPI::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 + + + 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_ESPI::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 + + 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); +} +int16_t * AD7606_ESPI::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 + + 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); + return rawDataBuffer; +} + void AD7606_Serial::read(int16_t *rawDataBuffer) { uint16_t value1 = 0; @@ -190,7 +406,7 @@ void AD7606_Serial::read(int16_t *rawDataBuffer) { for (int8_t i = 15; i >= 0; i--) { - pulse(_RD); + ipulse(_RD); value1 += digitalRead(_DB7) << i; value2 += digitalRead(_DB8) << i; } @@ -218,7 +434,7 @@ void AD7606_Serial::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; } @@ -275,7 +491,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); @@ -306,7 +521,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); @@ -341,7 +555,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); @@ -367,11 +580,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) @@ -400,10 +613,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) @@ -427,6 +640,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; + + digitalWrite(_CS, 0); // Enable DOUTA/DOUTB lines and shift-out the conversion results + + 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++) + { + 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) @@ -446,7 +692,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); @@ -475,7 +720,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); @@ -506,7 +750,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); @@ -541,7 +784,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); @@ -567,11 +809,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) @@ -595,11 +837,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) @@ -619,6 +861,114 @@ void AD7606_16::read(int16_t *rawDataBuffer,uint8_t times) } digitalWrite(_CS, 1); } +int16_t * AD7606_16::readAndReturn() +{ + int16_t rawDataBuffer[8]; + uint16_t value1 = 0; + + 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++) + { + 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; +} + + +AD7606_SPI::AD7606_SPI(int MISO, int SCK, 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); + SPI.begin(SCK,MISO,MOSI,CS); + SPI.setBitOrder(SPI_MSBFIRST); + SPI.setClockDivider(0x2000); + SPI.setDataMode(SPI_MODE3); + 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::readAndReturn() +{ + 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; +} diff --git a/AD7606.h b/AD7606.h index 26a4114..98ee58c 100644 --- a/AD7606.h +++ b/AD7606.h @@ -36,6 +36,18 @@ class AD7606 void setRange(bool); }; +class AD7606_ESPI : public AD7606 +{ +public: + 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 +}; + class AD7606_Serial : public AD7606 { public: @@ -56,6 +68,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 +80,15 @@ 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 +}; + +class AD7606_SPI : public AD7606 +{ +public: + 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 }; -#endif \ No newline at end of file +#endif diff --git a/README.md b/README.md index 93ec8b1..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. @@ -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. @@ -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). 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() { 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..6263874 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,12 +13,12 @@ "repository": { "type": "git", - "url": "https://github.com/leollo98/AD7606" + "url": "https://github.com/leollo98/AD7606/tree/Dev" }, - "version": "0.3.1", + "version": "0.5.0", "license": "MIT", "frameworks": "Arduino", "platforms": "*", "headers": "AD7606.h" } - \ No newline at end of file + diff --git a/library.properties b/library.properties index 1cb707a..4a41356 100644 --- a/library.properties +++ b/library.properties @@ -1,11 +1,11 @@ -name=AD7606 -version=0.3.1 +name=AD7606 - Dev +version=0.5.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 architectures=* includes=AD7606.h -depends= \ No newline at end of file +depends=