2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
[![Arduino CI](https://github.com/RobTillaart/AD524X/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
2021-10-16 15:39:45 -04:00
|
|
|
[![Arduino-lint](https://github.com/RobTillaart/AD524X/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/AD524X/actions/workflows/arduino-lint.yml)
|
|
|
|
[![JSON check](https://github.com/RobTillaart/AD524X/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/AD524X/actions/workflows/jsoncheck.yml)
|
2021-01-29 06:31:58 -05:00
|
|
|
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/AD524X/blob/master/LICENSE)
|
|
|
|
[![GitHub release](https://img.shields.io/github/release/RobTillaart/AD524X.svg?maxAge=3600)](https://github.com/RobTillaart/AD524X/releases)
|
|
|
|
|
|
|
|
|
2020-04-16 06:59:37 -04:00
|
|
|
# AD524X
|
|
|
|
|
2021-12-10 08:52:27 -05:00
|
|
|
Arduino class for I2C digital potentiometer AD5241 AD5242.
|
2020-04-16 06:59:37 -04:00
|
|
|
|
2021-10-16 15:39:45 -04:00
|
|
|
|
2020-04-16 06:59:37 -04:00
|
|
|
## Description
|
|
|
|
|
2022-10-25 11:57:23 -04:00
|
|
|
The AD5241 and AD5242 are digital potentiometers.
|
2020-04-16 06:59:37 -04:00
|
|
|
The AD5241 has one, the AD5242 has two potentiometers.
|
2021-10-16 15:39:45 -04:00
|
|
|
Both types have two output lines O1 and O2.
|
2020-04-16 06:59:37 -04:00
|
|
|
|
|
|
|
These digital potentiometers come in 10K, 100K and 1M
|
|
|
|
and can be set in 256 steps.
|
|
|
|
|
|
|
|
An important property of the devices is that they defaults
|
|
|
|
to their mid position at startup.
|
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
The library also defines AD524X_MIDPOINT == 127.
|
|
|
|
To be used to set to defined mid point.
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2022-08-13 13:31:52 -04:00
|
|
|
#### Related libraries
|
|
|
|
|
2023-02-03 02:41:34 -05:00
|
|
|
This library is related to
|
2023-01-11 10:35:57 -05:00
|
|
|
- https://github.com/RobTillaart/AD5245 single port digital potentiometer.
|
|
|
|
- https://github.com/RobTillaart/AD520X multi port digital potentiometer.
|
2022-08-13 13:31:52 -04:00
|
|
|
|
|
|
|
|
2020-04-16 06:59:37 -04:00
|
|
|
## I2C address
|
|
|
|
|
2023-02-03 02:41:34 -05:00
|
|
|
The AD524X has two address lines to configure the I2C address. 0x2C - 0x2F
|
2020-04-16 06:59:37 -04:00
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
| Addr(dec)| Addr(Hex) | AD0 | AD1 |
|
|
|
|
|:--------:|:---------:|:-----:|:-----:|
|
|
|
|
| 44 | 0x2C | GND | GND |
|
|
|
|
| 45 | 0x2D | GND | +5V |
|
|
|
|
| 46 | 0x2E | +5V | GND |
|
|
|
|
| 47 | 0x2F | +5V | +5V |
|
2020-04-16 06:59:37 -04:00
|
|
|
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
## Interface
|
2020-04-16 06:59:37 -04:00
|
|
|
|
2023-02-26 11:03:39 -05:00
|
|
|
```cpp
|
|
|
|
#include "AD524X.h"
|
|
|
|
```
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
The library has a number of functions which are all quite straightforward.
|
2023-01-11 10:35:57 -05:00
|
|
|
One can get / set the value of (both) the potentiometer(s), and the O1 and O2 output lines.
|
2020-04-16 06:59:37 -04:00
|
|
|
|
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
#### Constructors
|
2020-04-16 06:59:37 -04:00
|
|
|
|
2023-02-03 02:41:34 -05:00
|
|
|
- **AD524X(uint8_t address, TwoWire \*wire = &Wire)** constructor base class,
|
2021-01-29 06:31:58 -05:00
|
|
|
creates an instance with 2 potentiometer.
|
2023-02-03 02:41:34 -05:00
|
|
|
This class does not distinguish between AD5241 and AD5242.
|
2020-04-16 06:59:37 -04:00
|
|
|
The developer is responsible for handling this correctly.
|
2021-12-10 08:52:27 -05:00
|
|
|
- **AD5241(uint8_t address, TwoWire \*wire = &Wire)** create an instance with 1 potentiometer.
|
|
|
|
- **AD5242(uint8_t address, TwoWire \*wire = &Wire)** create an instance with 2 potentiometer.
|
2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
#### Wire initialization
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2021-12-10 08:52:27 -05:00
|
|
|
- **bool begin(uint8_t sda, uint8_t scl)** ESP32 a.o initializing of Wire.
|
|
|
|
- **bool begin()** for UNO.
|
2021-01-29 06:31:58 -05:00
|
|
|
- **bool isConnected()** See if address set in constructor is on the bus.
|
|
|
|
|
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
#### Basic IO
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2021-12-10 08:52:27 -05:00
|
|
|
- **uint8_t write(uint8_t rdac, uint8_t value)** set channel rdac 0/1 to value 0..255.
|
|
|
|
- **uint8_t write(uint8_t rdac, uint8_t value, uint8_t O1, uint8_t O2)** idem + set output lines O1 and O2 too.
|
|
|
|
- **uint8_t read(uint8_t rdac)** read back set value.
|
|
|
|
- **uint8_t setO1(uint8_t value = HIGH)** value = HIGH (default) or LOW.
|
|
|
|
- **uint8_t setO2(uint8_t value = HIGH)** value = HIGH (default) or LOW.
|
|
|
|
- **uint8_t getO1()** read back O1 line.
|
|
|
|
- **uint8_t getO2()** read back O2 line.
|
2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
#### Misc
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2021-10-16 15:39:45 -04:00
|
|
|
- **uint8_t zeroAll()** sets potentiometer's to 0 and I/O to LOW.
|
2023-01-11 10:35:57 -05:00
|
|
|
- **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.
|
2021-01-29 06:31:58 -05:00
|
|
|
- **uint8_t readBackRegister()** read register back, for debugging.
|
|
|
|
|
|
|
|
|
2023-02-26 11:03:39 -05:00
|
|
|
#### Experimental
|
2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
- **uint8_t shutDown()** check datasheet, not tested yet, use at own risk.
|
|
|
|
|
|
|
|
|
2023-02-26 11:03:39 -05:00
|
|
|
## Interface AD5421 specific
|
|
|
|
|
|
|
|
Since 0.4.1 the library supports writing explicit to port 0
|
|
|
|
as that is the only port.
|
|
|
|
|
|
|
|
- **uint8_t write(const uint8_t value)** set rdac 0 to value 0..255.
|
|
|
|
- **uint8_t write(const uint8_t value, const uint8_t O1, const uint8_t O2)**
|
|
|
|
idem + set output lines O1 and O2 too.
|
|
|
|
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
## Operation
|
2020-04-16 06:59:37 -04:00
|
|
|
|
|
|
|
The examples show the basic working of the functions.
|
2021-10-16 15:39:45 -04:00
|
|
|
|
|
|
|
|
2022-10-25 11:57:23 -04:00
|
|
|
## Error codes
|
|
|
|
|
|
|
|
| define | value |
|
|
|
|
|:---------------|:-------:|
|
|
|
|
| AD524X_OK | 0 |
|
|
|
|
| AD524X_ERROR | 100 |
|
|
|
|
|
|
|
|
|
2021-10-16 15:39:45 -04:00
|
|
|
## Future
|
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
#### Must
|
|
|
|
|
|
|
|
|
|
|
|
#### Should
|
|
|
|
|
2021-12-10 08:52:27 -05:00
|
|
|
- improve error handling.
|
2022-08-13 13:31:52 -04:00
|
|
|
- sync with AD520X library
|
2021-10-16 15:39:45 -04:00
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
#### Could
|
|
|
|
|
2022-10-25 11:57:23 -04:00
|
|
|
|
2023-01-11 10:35:57 -05:00
|
|
|
#### Wont
|
2023-02-03 02:41:34 -05:00
|
|
|
|
2022-10-25 11:57:23 -04:00
|
|
|
- make midpoint 128
|
2023-02-03 02:41:34 -05:00
|
|
|
|