diff --git a/libraries/AD5263/AD5263.cpp b/libraries/AD5263/AD5263.cpp index 2a30edfa..f8666853 100644 --- a/libraries/AD5263/AD5263.cpp +++ b/libraries/AD5263/AD5263.cpp @@ -1,7 +1,7 @@ // // FILE: AD5263.cpp // AUTHOR: Rob Tillaart -// VERSION: 0.1.1 +// VERSION: 0.1.2 // PURPOSE: Arduino library for I2C digital potentiometer AD5263 and compatibles. // DATE: 2023-10-09 // URL: https://github.com/RobTillaart/AD5263 @@ -52,21 +52,23 @@ bool AD5263::isConnected() uint8_t AD5263::reset() { - for (int i = 1; i < _pmCount; i++) - { - write(i, AD5263_MIDPOINT); - } - return write(0, AD5263_MIDPOINT, LOW, LOW); + return setAll(AD5263_MIDPOINT); } uint8_t AD5263::zeroAll() +{ + return setAll(0); +} + + +uint8_t AD5263::setAll(const uint8_t value) { for (int i = 1; i < _pmCount; i++) { - write(i, 0); + write(i, value); } - return write(0, 0, LOW, LOW); + return write(0, value, LOW, LOW); } @@ -151,13 +153,14 @@ uint8_t AD5263::readBackRegister() uint8_t AD5263::midScaleReset(const uint8_t rdac) { - if (rdac >= _pmCount) return AD5263_ERROR; + if (rdac >= _pmCount) return AD5263_ERROR; - uint8_t cmd = AD5263_RESET; - if (rdac == 0) cmd |= AD5263_RDAC0; - if (rdac == 1) cmd |= AD5263_RDAC1; - if (rdac == 2) cmd |= AD5263_RDAC2; - if (rdac == 3) cmd |= AD5263_RDAC3; + uint8_t cmd = AD5263_RDAC0; + if (rdac == 1) cmd = AD5263_RDAC1; + if (rdac == 2) cmd = AD5263_RDAC2; + if (rdac == 3) cmd = AD5263_RDAC3; + + cmd |= AD5263_RESET; // apply the output lines cmd = cmd | _O1 | _O2; diff --git a/libraries/AD5263/AD5263.h b/libraries/AD5263/AD5263.h index 0a5447d2..2d140950 100644 --- a/libraries/AD5263/AD5263.h +++ b/libraries/AD5263/AD5263.h @@ -2,7 +2,7 @@ // // FILE: AD5263.h // AUTHOR: Rob Tillaart -// VERSION: 0.1.1 +// VERSION: 0.1.2 // PURPOSE: Arduino library for I2C digital potentiometer AD5263 and compatibles. // DATE: 2023-10-09 // URL: https://github.com/RobTillaart/AD5263 @@ -13,7 +13,7 @@ #include "Wire.h" -#define AD5263_LIB_VERSION (F("0.1.1")) +#define AD5263_LIB_VERSION (F("0.1.2")) #define AD5263_OK 0 @@ -34,6 +34,8 @@ public: // RESET uint8_t reset(); // reset all channels to AD5263_MIDPOINT and O1/O2 to LOW uint8_t zeroAll(); // set all channels to 0 and O1/O2 to LOW + uint8_t setAll(const uint8_t value); // set all channels to value and O1/O2 to LOW + // READ WRITE uint8_t read(const uint8_t rdac); diff --git a/libraries/AD5263/CHANGELOG.md b/libraries/AD5263/CHANGELOG.md index d6ec5369..7c97c7d7 100644 --- a/libraries/AD5263/CHANGELOG.md +++ b/libraries/AD5263/CHANGELOG.md @@ -6,13 +6,18 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [0.1.2] - 2023-11-13 +- update readme.md +- add **setAll(value)** +- minor edits + + ## [0.1.1] - 2023-10-11 - update readme.md - investigated compatibility AD5280/82 (not) => clean up code - fix library.json - add AD5263_I2C_performance.ino - ## [0.1.0] - 2023-10-09 - initial version (based upon AD524X library) diff --git a/libraries/AD5263/README.md b/libraries/AD5263/README.md index 43d629ba..8806c7a8 100644 --- a/libraries/AD5263/README.md +++ b/libraries/AD5263/README.md @@ -16,8 +16,6 @@ Arduino library for I2C digital potentiometer AD5263 and compatibles. ## Description -**Experimental** needs testing with hardware. - The AD5263 is a digital potentiometer with 4 channels. This digital potentiometers come in 20, 50 and 200 kΩ and can be set in 256 steps. @@ -43,43 +41,44 @@ This library is related to #### Compatibles -None known so far. +None known so far. ## Hardware connection AD5263 Please read datasheet for all details! -| Pin | Name | Description (short) | -|:----:|:----------|:---------------------------------------| -| 1 | B1 | Resistor Terminal B1. | -| 2 | A1 | Resistor Terminal A1 (ADDR = 00). | -| 3 | W1 | Wiper Terminal W1. | -| 4 | B3 | Resistor Terminal B3. | -| 5 | A3 | Resistor Terminal A3. | -| 6 | W3 | Wiper Terminal W3 (ADDR = 10). | -| 7 | VDD | Positive Power Supply | -| 8 | GND | Ground. | -| 9 | DIS | SPI/I2C Select. SPI = 0, I2C = 1 | -| 10 | VLOGIC | 2.7 - 5.5V Logic Supply Voltage. | -| 11 | SDI/SDA | (SPI data in) I2C SDA | -| 12 | CLK/SCL | Serial Clock I2C SCL | -| 13 | CS/AD0 | (SPI Chip Select). I2C address bit 0 | -| 14 | RES/AD1 | (SPI RESET) I2C Address bit 1 | -| 15 | SHDN | Shutdown. Tie to +5 V if not used. | -| 16 | SDO/O1 | (SPI data out) I2C Output O1 | -| 17 | NC/O2 | (SPI No Connect) I2C Output O2 | -| 18 | VSS | Negative Power Supply. | -| 19 | W4 | Wiper Terminal W4 (ADDR = 11). | -| 20 | A4 | Resistor Terminal A4. | -| 21 | B4 | Resistor Terminal B4. | -| 22 | W2 | Wiper Terminal W2 (ADDR = 01). | -| 23 | A2 | Resistor Terminal A2. | -| 24 | B2 | Resistor Terminal B2. | +| Pin | Name | Description (short) | notes | +|:-----:|:----------|:---------------------------------------|:--------| +| 1 | B1 | Resistor Terminal B1. | +| 2 | A1 | Resistor Terminal A1 (ADDR = 00) | +| 3 | W1 | Wiper Terminal W1. | +| 4 | B3 | Resistor Terminal B3. | +| 5 | A3 | Resistor Terminal A3. | +| 6 | W3 | Wiper Terminal W3 (ADDR = 10) | +| 7 | VDD | Positive Power Supply | +| 8 | GND | Ground. | +| 9 | DIS | SPI/I2C Select. SPI = 0, I2C = 1 | connect to VDD | +| 10 | VLOGIC | 2.7 - 5.5V Logic Supply Voltage. | connect to VDD | +| 11 | SDI/SDA | (SPI data in) I2C SDA | +| 12 | CLK/SCL | Serial Clock I2C SCL | +| 13 | CS/AD0 | (SPI Chip Select). I2C address bit 0 | see Address below | +| 14 | RES/AD1 | (SPI RESET) I2C Address bit 1 | see Address below | +| 15 | SHDN | Shutdown. Tie to +5 V if not used. | +| 16 | SDO/O1 | (SPI data out) I2C Output O1 | +| 17 | NC/O2 | (SPI No Connect) I2C Output O2 | +| 18 | VSS | Negative Power Supply. | +| 19 | W4 | Wiper Terminal W4 (ADDR = 11) | +| 20 | A4 | Resistor Terminal A4. | +| 21 | B4 | Resistor Terminal B4. | +| 22 | W2 | Wiper Terminal W2 (ADDR = 01) | +| 23 | A2 | Resistor Terminal A2. | +| 24 | B2 | Resistor Terminal B2. | -VLOGIC: -The logic supply voltage should always be less than or equal to VDD. +#### VLOGIC + +The logic supply voltage should always be less than or equal to VDD. In addition, logic levels must be limited to the logic supply voltage regardless of VDD. @@ -101,16 +100,25 @@ Note the AD5263 uses the same range as the AD524X devices. #### Performance -- TODO: Test with UNO / ESP32 / RP2040 / ... +Timing in microseconds, writing a new value to device. -| Speed | UNO (us) | ESP32 (us) | -|:--------:|:----------:|:------------:| -| 100000 | | | -| 200000 | | | -| 400000 | | | -| 600000 | | | -| 800000 | | | -| 1000000 | | | +| Speed | UNO | ESP32 | RP2040 | notes | +|:--------:|:-----:|:-------:|:--------:|:--------| +| 100000 | 340 | | | +| 150000 | 240 | | | +| 200000 | 196 | | | +| 250000 | 168 | | | +| 300000 | 148 | | | +| 350000 | 140 | | | +| 400000 | 136 | | | max advised speed | +| 450000 | 128 | | | +| 500000 | 124 | | | max working speed | + + +The Arduino UNO failed to communicate above 500K, therefor +the max speed advised is 400K + +**TODO** Test with ESP32 / RP2040 / ... to fill ## Interface @@ -147,8 +155,9 @@ rdac should be 0..3. #### Misc - **uint8_t zeroAll()** sets potentiometer's to 0 and I/O to LOW. -- **uint8_t reset()** sets potentiometer's to midpoint == 127 and I/O to LOW. (startup default) -- **uint8_t midScaleReset(uint8_t rdac)** resets one potentiometer to midpoint == 127. +- **uint8_t reset()** sets potentiometer's to midpoint == 128 and O1 and O2 to LOW. (startup default) +- **uint8_t setAll(uint8_t value)** sets potentiometer's to value and O1 and O2 to LOW. +- **uint8_t midScaleReset(uint8_t rdac)** resets one potentiometer to midpoint == 128. - **uint8_t readBackRegister()** read register back, for debugging. @@ -170,9 +179,6 @@ rdac should be 0..3. #### Must - update documentation. -- get hardware (breakout). -- test with hardware. - #### Should @@ -181,7 +187,9 @@ rdac should be 0..3. - improve error handling. - sync with AD520X / AD524X library -- optimize footprint **write()** and **midScaleReset()** +- optimize footprint **write()** versions. +- optimize **midScaleReset()** = ```return write(rdac, AD5263_MIDPOINT);``` + - is this the same? - investigate SPI interface (performance better) diff --git a/libraries/AD5263/examples/AD5263_I2C_performance/AD5263_I2C_performance.ino b/libraries/AD5263/examples/AD5263_I2C_performance/AD5263_I2C_performance.ino index 289ec320..770ae635 100644 --- a/libraries/AD5263/examples/AD5263_I2C_performance/AD5263_I2C_performance.ino +++ b/libraries/AD5263/examples/AD5263_I2C_performance/AD5263_I2C_performance.ino @@ -18,14 +18,15 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Serial.println("\nWRITE"); delay(10); - for (uint32_t speed = 100000; speed <= 800000; speed += 100000) + for (uint32_t speed = 100000; speed <= 600000; speed += 50000) { Wire.setClock(speed); bool b = AD01.begin(); @@ -45,7 +46,7 @@ void setup() Serial.println("\nREAD"); delay(10); - for (uint32_t speed = 100000; speed <= 800000; speed += 100000) + for (uint32_t speed = 100000; speed <= 600000; speed += 50000) { Wire.setClock(speed); bool b = AD01.begin(); @@ -70,4 +71,3 @@ void loop() // -- END OF FILE -- - diff --git a/libraries/AD5263/examples/AD5263_followA0/AD5263_followA0.ino b/libraries/AD5263/examples/AD5263_followA0/AD5263_followA0.ino index 7fbccb7a..e8e13769 100644 --- a/libraries/AD5263/examples/AD5263_followA0/AD5263_followA0.ino +++ b/libraries/AD5263/examples/AD5263_followA0/AD5263_followA0.ino @@ -15,8 +15,9 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Wire.setClock(400000); diff --git a/libraries/AD5263/examples/AD5263_isConnected/AD5263_isConnected.ino b/libraries/AD5263/examples/AD5263_isConnected/AD5263_isConnected.ino index 8e68d35d..a0f7c7b4 100644 --- a/libraries/AD5263/examples/AD5263_isConnected/AD5263_isConnected.ino +++ b/libraries/AD5263/examples/AD5263_isConnected/AD5263_isConnected.ino @@ -15,8 +15,9 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Wire.setClock(400000); diff --git a/libraries/AD5263/examples/AD5263_midScaleReset/AD5263_midScaleReset.ino b/libraries/AD5263/examples/AD5263_midScaleReset/AD5263_midScaleReset.ino index d6d383b0..0ca142d8 100644 --- a/libraries/AD5263/examples/AD5263_midScaleReset/AD5263_midScaleReset.ino +++ b/libraries/AD5263/examples/AD5263_midScaleReset/AD5263_midScaleReset.ino @@ -15,8 +15,9 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Wire.setClock(400000); diff --git a/libraries/AD5263/examples/AD5263_read/AD5263_read.ino b/libraries/AD5263/examples/AD5263_read/AD5263_read.ino index dbf18a04..18fb1736 100644 --- a/libraries/AD5263/examples/AD5263_read/AD5263_read.ino +++ b/libraries/AD5263/examples/AD5263_read/AD5263_read.ino @@ -15,8 +15,9 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Wire.setClock(400000); diff --git a/libraries/AD5263/examples/AD5263_readBackRegister/AD5263_readBackRegister.ino b/libraries/AD5263/examples/AD5263_readBackRegister/AD5263_readBackRegister.ino index 08fe6f7a..aeaef896 100644 --- a/libraries/AD5263/examples/AD5263_readBackRegister/AD5263_readBackRegister.ino +++ b/libraries/AD5263/examples/AD5263_readBackRegister/AD5263_readBackRegister.ino @@ -15,8 +15,9 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Wire.setClock(400000); diff --git a/libraries/AD5263/examples/AD5263_sawtooth/AD5263_sawtooth.ino b/libraries/AD5263/examples/AD5263_sawtooth/AD5263_sawtooth.ino index 98b3a943..f30e0e66 100644 --- a/libraries/AD5263/examples/AD5263_sawtooth/AD5263_sawtooth.ino +++ b/libraries/AD5263/examples/AD5263_sawtooth/AD5263_sawtooth.ino @@ -15,8 +15,9 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Wire.setClock(400000); diff --git a/libraries/AD5263/examples/AD5263_setO/AD5263_setO.ino b/libraries/AD5263/examples/AD5263_setO/AD5263_setO.ino index 459d74b7..0454bd60 100644 --- a/libraries/AD5263/examples/AD5263_setO/AD5263_setO.ino +++ b/libraries/AD5263/examples/AD5263_setO/AD5263_setO.ino @@ -15,12 +15,13 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Wire.setClock(400000); - + bool b = AD01.begin(); Serial.println(b ? "true" : "false"); Serial.println(AD01.isConnected()); @@ -48,4 +49,3 @@ void loop() // -- END OF FILE -- - diff --git a/libraries/AD5263/examples/AD5263_write/AD5263_write.ino b/libraries/AD5263/examples/AD5263_write/AD5263_write.ino index 24025178..c171855d 100644 --- a/libraries/AD5263/examples/AD5263_write/AD5263_write.ino +++ b/libraries/AD5263/examples/AD5263_write/AD5263_write.ino @@ -7,7 +7,10 @@ #include "AD5263.h" -AD5263 AD01(0x2C); // AD0 & AD1 == GND +// AD0 == GND +// AD1 == GND +// DIS == +5V +AD5263 AD01(0x2C); void setup() @@ -15,12 +18,13 @@ void setup() Serial.begin(115200); Serial.println(); Serial.println(__FILE__); - Serial.println(); + Serial.print("AD5263_LIB_VERSION: "); Serial.println(AD5263_LIB_VERSION); + Serial.println(); Wire.begin(); Wire.setClock(400000); - + bool b = AD01.begin(); Serial.println(b ? "true" : "false"); Serial.println(AD01.isConnected()); @@ -41,10 +45,9 @@ void loop() AD01.write(1, val, LOW, LOW); } Serial.println(val); - delay(20); + delay(1000); } } // -- END OF FILE -- - diff --git a/libraries/AD5263/keywords.txt b/libraries/AD5263/keywords.txt index cb0ba926..c0508e3a 100644 --- a/libraries/AD5263/keywords.txt +++ b/libraries/AD5263/keywords.txt @@ -5,8 +5,11 @@ AD5263 KEYWORD1 # Methods and Functions (KEYWORD2) begin KEYWORD2 +isConnected KEYWORD2 + reset KEYWORD2 zeroAll KEYWORD2 +setAll KEYWORD2 read KEYWORD2 write KEYWORD2 @@ -18,6 +21,8 @@ getO2 KEYWORD2 midScaleReset KEYWORD2 pmCount KEYWORD2 + +readBackRegister KEYWORD2 shutDown KEYWORD2 diff --git a/libraries/AD5263/library.json b/libraries/AD5263/library.json index 0d9ddb14..745af9c1 100644 --- a/libraries/AD5263/library.json +++ b/libraries/AD5263/library.json @@ -15,7 +15,7 @@ "type": "git", "url": "https://github.com/RobTillaart/AD5263" }, - "version": "0.1.1", + "version": "0.1.2", "license": "MIT", "frameworks": "*", "platforms": "*", diff --git a/libraries/AD5263/library.properties b/libraries/AD5263/library.properties index fdd0644f..70dd3c86 100644 --- a/libraries/AD5263/library.properties +++ b/libraries/AD5263/library.properties @@ -1,5 +1,5 @@ name=AD5263 -version=0.1.1 +version=0.1.2 author=Rob Tillaart maintainer=Rob Tillaart sentence=Library to control digital potentiometer AD5263 and compatibles.