2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
[![Arduino CI](https://github.com/RobTillaart/DAC8551/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
2021-08-29 14:58:12 -04:00
|
|
|
[![Arduino-lint](https://github.com/RobTillaart/DAC8551/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/DAC8551/actions/workflows/arduino-lint.yml)
|
|
|
|
[![JSON check](https://github.com/RobTillaart/DAC8551/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/DAC8551/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/DAC8551/blob/master/LICENSE)
|
|
|
|
[![GitHub release](https://img.shields.io/github/release/RobTillaart/DAC8551.svg?maxAge=3600)](https://github.com/RobTillaart/DAC8551/releases)
|
|
|
|
|
2021-08-29 14:58:12 -04:00
|
|
|
|
2020-11-27 05:10:47 -05:00
|
|
|
# DAC8551
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2021-12-15 06:34:24 -05:00
|
|
|
Arduino library for DAC8501 DAC8531, DAC8550, DAC8551 SPI Digital Analog Convertor.
|
2020-11-27 05:10:47 -05:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2020-11-27 05:10:47 -05:00
|
|
|
## Description
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
The DAC8551 is a SPI based 16 bit DAC with one channel.
|
|
|
|
|
2021-02-06 09:52:51 -05:00
|
|
|
The DAC8501, DAC8531 and DAC8550 are drop in compatible
|
|
|
|
They all have classed derived 1 to 1 from DAC8551.
|
|
|
|
|
2021-12-15 06:34:24 -05:00
|
|
|
**Warning** this library is not tested extensively.
|
2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
|
|
|
|
## Interface
|
|
|
|
|
|
|
|
### Core
|
|
|
|
|
2021-02-06 09:52:51 -05:00
|
|
|
- **DAC8501(uint8_t slaveSelect)** Constructor for DAC8501 with hardware SPI,
|
|
|
|
- **DAC8531(uint8_t slaveSelect)** Constructor for DAC8531 with hardware SPI,
|
|
|
|
- **DAC8550(uint8_t slaveSelect)** Constructor for DAC8550 with hardware SPI,
|
|
|
|
- **DAC8551(uint8_t slaveSelect)** Constructor for DAC8551 with hardware SPI,
|
2021-01-29 06:31:58 -05:00
|
|
|
since 0.2.0 the slaveSelect pin needs to be defined.
|
2021-02-06 09:52:51 -05:00
|
|
|
- **DAC8501(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)** Constructor for the software SPI
|
|
|
|
- **DAC8531(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)** Constructor for the software SPI
|
|
|
|
- **DAC8550(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)** Constructor for the software SPI
|
2021-01-29 06:31:58 -05:00
|
|
|
- **DAC8551(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)** Constructor for the software SPI
|
|
|
|
- **void begin()** initializes all pins to default state
|
|
|
|
- **void setValue(uint16_t value)** set the value of the channel to 0 - 65535
|
|
|
|
- **uint16_t getValue()** returns the last value written.
|
|
|
|
|
2021-02-06 09:52:51 -05:00
|
|
|
|
2021-08-29 14:58:12 -04:00
|
|
|
### Hardware SPI
|
|
|
|
|
|
|
|
To be used only if one needs a specific speed.
|
|
|
|
|
|
|
|
- **void setSPIspeed(uint32_t speed)** set SPI transfer rate.
|
|
|
|
- **uint32_t getSPIspeed()** returns SPI transfer rate.
|
|
|
|
- **bool usesHWSPI()** returns true if HW SPI is used.
|
|
|
|
|
|
|
|
|
|
|
|
### ESP32 specific
|
|
|
|
|
|
|
|
- **void selectHSPI()** in case hardware SPI, the ESP32 has two options HSPI and VSPI.
|
|
|
|
- **void selectVSPI()** see above.
|
|
|
|
- **bool usesHSPI()** returns true if HSPI is used.
|
|
|
|
- **bool usesVSPI()** returns true if VSPI is used.
|
|
|
|
|
|
|
|
The **selectVSPI()** or the **selectHSPI()** needs to be called
|
|
|
|
BEFORE the **begin()** function.
|
|
|
|
|
|
|
|
|
|
|
|
#### experimental
|
|
|
|
|
2021-12-15 06:34:24 -05:00
|
|
|
- **void setGPIOpins(uint8_t clk, uint8_t miso, uint8_t mosi, uint8_t select)**
|
|
|
|
overrule GPIO pins of ESP32 for hardware SPI.
|
|
|
|
Needs to be called AFTER the **begin()** function.
|
2021-08-29 14:58:12 -04:00
|
|
|
|
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
### Power down
|
|
|
|
|
|
|
|
check datasheet for details.
|
|
|
|
|
|
|
|
- **void setPowerDown(uint8_t powerDownMode)** sets power down mode. 0 - 3.
|
|
|
|
- **uint8_t getPowerDownMode()** returns last written mode.
|
|
|
|
|
2021-08-29 14:58:12 -04:00
|
|
|
| Power down mode | Value |
|
|
|
|
|:---------------------------|:-----:|
|
|
|
|
| DAC8551_POWERDOWN_NORMAL | 0 |
|
|
|
|
| DAC8551_POWERDOWN_1K | 1 |
|
|
|
|
| DAC8551_POWERDOWN_100K | 2 |
|
|
|
|
| DAC8551_POWERDOWN_HIGH_IMP | 3 |
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2020-11-27 05:10:47 -05:00
|
|
|
|
2021-12-15 06:34:24 -05:00
|
|
|
Note: DAC8501, DAC8531 and DAC8550 uses the same constants.
|
2021-02-06 09:52:51 -05:00
|
|
|
|
|
|
|
|
2020-11-27 05:10:47 -05:00
|
|
|
## Operation
|
|
|
|
|
|
|
|
See examples
|
|
|
|
|
|
|
|
**demo_hw_spi.ino**
|
2021-01-29 06:31:58 -05:00
|
|
|
- write a sawtooth to channel A followed by a sinus
|
|
|
|
- uses HW SPI
|
2020-11-27 05:10:47 -05:00
|
|
|
|
|
|
|
**demo_sw_spi.ino**
|
2021-01-29 06:31:58 -05:00
|
|
|
- write a sawtooth to channel A followed by a sinus
|
|
|
|
- uses SW SPI
|
2020-11-27 05:10:47 -05:00
|
|
|
|
|
|
|
**demo_powerdown.ino**
|
2021-01-29 06:31:58 -05:00
|
|
|
- idem
|
2020-11-27 05:10:47 -05:00
|
|
|
|
2021-12-15 06:34:24 -05:00
|
|
|
|
|
|
|
## Future
|
|
|
|
|
|
|
|
- testing
|
|
|
|
- verify replacement chips
|
|
|
|
|
|
|
|
|