mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-09-19 16:46:11 -04:00
0.3.0 DAC8551
This commit is contained in:
parent
26de9a464e
commit
1f503b9d80
@ -6,12 +6,19 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
|
||||
## [0.3.0] - 2023-12-01
|
||||
- refactor constructor interface - breaking changes.
|
||||
- minimize conditional code. -- create SPI_CLASS macro to solve it.
|
||||
- update readme.md
|
||||
- update examples
|
||||
|
||||
----
|
||||
|
||||
## [0.2.7] - 2023-09-23
|
||||
- add example DAC8531_hw_spi.ino + screenshot
|
||||
- update readme.md
|
||||
- minor edits
|
||||
|
||||
|
||||
## [0.2.6] - 2022-10-31
|
||||
- add changelog.md
|
||||
- add rp2040 to build-CI
|
||||
|
@ -2,26 +2,30 @@
|
||||
// FILE: DAC8551.cpp
|
||||
// AUTHOR: Rob Tillaart
|
||||
// PURPOSE: Arduino library for DAC8551 SPI Digital Analog Convertor
|
||||
// VERSION: 0.2.7
|
||||
// VERSION: 0.3.0
|
||||
// URL: https://github.com/RobTillaart/DAC8551
|
||||
|
||||
|
||||
#include "DAC8551.h"
|
||||
|
||||
|
||||
DAC8551::DAC8551(uint8_t slaveSelect)
|
||||
DAC8551::DAC8551(uint8_t select, __SPI_CLASS__ * spi)
|
||||
{
|
||||
_select = select;
|
||||
_dataOut = 255;
|
||||
_clock = 255;
|
||||
_mySPI = spi;
|
||||
_hwSPI = true;
|
||||
_select = slaveSelect;
|
||||
}
|
||||
|
||||
|
||||
DAC8551::DAC8551(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)
|
||||
DAC8551::DAC8551(uint8_t select, uint8_t spiData, uint8_t spiClock)
|
||||
{
|
||||
_hwSPI = false;
|
||||
_select = select;
|
||||
_dataOut = spiData;
|
||||
_clock = spiClock;
|
||||
_select = slaveSelect;
|
||||
_mySPI = NULL;
|
||||
_hwSPI = false;
|
||||
}
|
||||
|
||||
|
||||
@ -36,27 +40,11 @@ void DAC8551::begin()
|
||||
|
||||
if(_hwSPI)
|
||||
{
|
||||
#if defined(ESP32)
|
||||
if (_useHSPI) // HSPI
|
||||
{
|
||||
mySPI = new SPIClass(HSPI);
|
||||
mySPI->end();
|
||||
mySPI->begin(14, 12, 13, _select); // CLK=14 MISO=12 MOSI=13
|
||||
}
|
||||
else // VSPI
|
||||
{
|
||||
mySPI = new SPIClass(VSPI);
|
||||
mySPI->end();
|
||||
mySPI->begin(18, 19, 23, _select); // CLK=18 MISO=19 MOSI=23
|
||||
}
|
||||
#else // generic hardware SPI
|
||||
mySPI = &SPI;
|
||||
mySPI->end();
|
||||
mySPI->begin();
|
||||
#endif
|
||||
_mySPI->end();
|
||||
_mySPI->begin();
|
||||
delay(1);
|
||||
}
|
||||
else // software SPI
|
||||
else // SOFTWARE SPI
|
||||
{
|
||||
pinMode(_dataOut, OUTPUT);
|
||||
pinMode(_clock, OUTPUT);
|
||||
@ -69,21 +57,6 @@ void DAC8551::begin()
|
||||
}
|
||||
|
||||
|
||||
#if defined(ESP32)
|
||||
void DAC8551::setGPIOpins(uint8_t clk, uint8_t miso, uint8_t mosi, uint8_t select)
|
||||
{
|
||||
_clock = clk;
|
||||
_dataOut = mosi;
|
||||
_select = select;
|
||||
pinMode(_select, OUTPUT);
|
||||
digitalWrite(_select, HIGH);
|
||||
|
||||
mySPI->end(); // disable SPI
|
||||
mySPI->begin(clk, miso, mosi, select);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// value = 0..65535
|
||||
void DAC8551::setValue(uint16_t value)
|
||||
{
|
||||
@ -121,7 +94,7 @@ void DAC8551::setSPIspeed(uint32_t speed)
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PRIVATE
|
||||
// PROTECTED
|
||||
//
|
||||
void DAC8551::updateDevice()
|
||||
{
|
||||
@ -130,11 +103,11 @@ void DAC8551::updateDevice()
|
||||
digitalWrite(_select, LOW);
|
||||
if (_hwSPI)
|
||||
{
|
||||
mySPI->beginTransaction(_spi_settings);
|
||||
mySPI->transfer(configRegister);
|
||||
mySPI->transfer(_value >> 8);
|
||||
mySPI->transfer(_value & 0xFF);
|
||||
mySPI->endTransaction();
|
||||
_mySPI->beginTransaction(_spi_settings);
|
||||
_mySPI->transfer(configRegister);
|
||||
_mySPI->transfer(_value >> 8);
|
||||
_mySPI->transfer(_value & 0xFF);
|
||||
_mySPI->endTransaction();
|
||||
}
|
||||
else // Software SPI
|
||||
{
|
||||
@ -162,38 +135,34 @@ void DAC8551::swSPI_transfer(uint8_t value)
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
//
|
||||
// derive 8501, 8531 and 8550 from 8551
|
||||
// DERIVED CLASSES DAC8501, DAC8531, DAC8550
|
||||
//
|
||||
DAC8501::DAC8501(uint8_t select, __SPI_CLASS__ * spi) : DAC8551(select, spi)
|
||||
{
|
||||
}
|
||||
|
||||
DAC8501::DAC8501(uint8_t slaveSelect) : DAC8551(slaveSelect)
|
||||
DAC8501::DAC8501(uint8_t select, uint8_t spiData, uint8_t spiClock)
|
||||
: DAC8551(select, spiData, spiClock)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DAC8501::DAC8501(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)
|
||||
: DAC8551(spiData, spiClock, slaveSelect)
|
||||
DAC8531::DAC8531(uint8_t select, __SPI_CLASS__ * spi) : DAC8551(select, spi)
|
||||
{
|
||||
}
|
||||
|
||||
DAC8531::DAC8531(uint8_t select, uint8_t spiData, uint8_t spiClock)
|
||||
: DAC8551(select, spiData, spiClock)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DAC8531::DAC8531(uint8_t slaveSelect) : DAC8551(slaveSelect)
|
||||
DAC8550::DAC8550(uint8_t select, __SPI_CLASS__ * spi) : DAC8551(select, spi)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DAC8531::DAC8531(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)
|
||||
: DAC8551(spiData, spiClock, slaveSelect)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DAC8550::DAC8550(uint8_t slaveSelect) : DAC8551(slaveSelect)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DAC8550::DAC8550(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)
|
||||
: DAC8551(spiData, spiClock, slaveSelect)
|
||||
DAC8550::DAC8550(uint8_t select, uint8_t spiData, uint8_t spiClock)
|
||||
: DAC8551(select, spiData, spiClock)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
// AUTHOR: Rob Tillaart
|
||||
// PURPOSE: Arduino library for DAC8551 SPI Digital Analog Convertor
|
||||
// could work with DAC8550, not tested
|
||||
// VERSION: 0.2.7
|
||||
// VERSION: 0.3.0
|
||||
// HISTORY: See DAC8551.cpp
|
||||
// URL: https://github.com/RobTillaart/DAC8551
|
||||
//
|
||||
@ -14,7 +14,7 @@
|
||||
#include "SPI.h"
|
||||
|
||||
|
||||
#define DAC8551_LIB_VERSION (F("0.2.7"))
|
||||
#define DAC8551_LIB_VERSION (F("0.3.0"))
|
||||
|
||||
|
||||
#define DAC8551_POWERDOWN_NORMAL 0
|
||||
@ -23,11 +23,20 @@
|
||||
#define DAC8551_POWERDOWN_HIGH_IMP 3
|
||||
|
||||
|
||||
#ifndef __SPI_CLASS__
|
||||
#if defined(ARDUINO_ARCH_RP2040)
|
||||
#define __SPI_CLASS__ SPIClassRP2040
|
||||
#else
|
||||
#define __SPI_CLASS__ SPIClass
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
class DAC8551
|
||||
{
|
||||
public:
|
||||
DAC8551(uint8_t slaveSelect);
|
||||
DAC8551(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect);
|
||||
DAC8551(uint8_t select, __SPI_CLASS__ * spi = &SPI);
|
||||
DAC8551(uint8_t select, uint8_t spiData, uint8_t spiClock);
|
||||
|
||||
void begin();
|
||||
|
||||
@ -43,16 +52,6 @@ public:
|
||||
|
||||
bool usesHWSPI() { return _hwSPI; };
|
||||
|
||||
// ESP32 specific
|
||||
#if defined(ESP32)
|
||||
void selectHSPI() { _useHSPI = true; };
|
||||
void selectVSPI() { _useHSPI = false; };
|
||||
bool usesHSPI() { return _useHSPI; };
|
||||
bool usesVSPI() { return !_useHSPI; };
|
||||
|
||||
// to overrule ESP32 default hardware pins
|
||||
void setGPIOpins(uint8_t clk, uint8_t miso, uint8_t mosi, uint8_t select);
|
||||
#endif
|
||||
|
||||
protected:
|
||||
uint8_t _dataOut = 255;
|
||||
@ -68,19 +67,14 @@ protected:
|
||||
void updateDevice();
|
||||
void swSPI_transfer(uint8_t value);
|
||||
|
||||
|
||||
SPIClass * mySPI;
|
||||
__SPI_CLASS__ * _mySPI;
|
||||
SPISettings _spi_settings;
|
||||
|
||||
#if defined(ESP32)
|
||||
bool _useHSPI = true;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
//
|
||||
// derive 8501, 8531 and 8550 from 8551
|
||||
// DERIVED DAC8501, DAC8531, DAC8550
|
||||
//
|
||||
|
||||
#define DAC8501_POWERDOWN_NORMAL 0
|
||||
@ -92,9 +86,8 @@ protected:
|
||||
class DAC8501 : public DAC8551
|
||||
{
|
||||
public:
|
||||
DAC8501(uint8_t slaveSelect);
|
||||
DAC8501(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect);
|
||||
|
||||
DAC8501(uint8_t select, __SPI_CLASS__ * spi = &SPI);
|
||||
DAC8501(uint8_t select, uint8_t spiData, uint8_t spiClock);
|
||||
};
|
||||
|
||||
|
||||
@ -107,9 +100,8 @@ public:
|
||||
class DAC8531 : public DAC8551
|
||||
{
|
||||
public:
|
||||
DAC8531(uint8_t slaveSelect);
|
||||
DAC8531(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect);
|
||||
|
||||
DAC8531(uint8_t select, __SPI_CLASS__ * spi = &SPI);
|
||||
DAC8531(uint8_t select, uint8_t spiData, uint8_t spiClock);
|
||||
};
|
||||
|
||||
|
||||
@ -122,9 +114,8 @@ public:
|
||||
class DAC8550 : public DAC8551
|
||||
{
|
||||
public:
|
||||
DAC8550(uint8_t slaveSelect);
|
||||
DAC8550(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect);
|
||||
|
||||
DAC8550(uint8_t select, __SPI_CLASS__ * spi = &SPI);
|
||||
DAC8550(uint8_t select, uint8_t spiData, uint8_t spiClock);
|
||||
};
|
||||
|
||||
|
||||
|
@ -24,8 +24,23 @@ They all have classes derived 1 to 1 from DAC8551.
|
||||
**Warning** this library is not tested extensively.
|
||||
|
||||
|
||||
#### 0.3.0 Breaking change
|
||||
|
||||
The version 0.3.0 has breaking changes in the interface.
|
||||
The essence is removal of ESP32 specific code from the library.
|
||||
This makes it possible to support the ESP32-S3 and other processors in the future.
|
||||
Also it makes the library a bit simpler to maintain.
|
||||
|
||||
Note order of parameters changed.
|
||||
|
||||
|
||||
#### Related
|
||||
|
||||
- https://github.com/RobTillaart/DAC8550
|
||||
- https://github.com/RobTillaart/DAC8551
|
||||
- https://github.com/RobTillaart/DAC8552
|
||||
- https://github.com/RobTillaart/DAC8554
|
||||
- https://github.com/RobTillaart/MCP_DAC
|
||||
- https://github.com/RobTillaart/AD5680 (18 bit DAC)
|
||||
|
||||
|
||||
@ -37,15 +52,13 @@ They all have classes derived 1 to 1 from DAC8551.
|
||||
|
||||
### Core
|
||||
|
||||
- **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,
|
||||
since 0.2.0 the slaveSelect pin needs to be defined.
|
||||
- **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
|
||||
- **DAC8551(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)** Constructor for the software SPI
|
||||
- **DAC8551(uint8_t select, SPIClassRP2040 \* spi = &SPI)** Constructor HW SPI RP2040.
|
||||
- **DAC8551(uint8_t select, SPIClass \* spi = &SPI)** Constructor HW SPI other.
|
||||
- **DAC8551(uint8_t select, uint8_t spiData, uint8_t spiClock)** Constructor SW SPI.
|
||||
- **DAC8501(...)** idem constructors for DAC8501.
|
||||
- **DAC8531(...)** idem constructors for DAC8531.
|
||||
- **DAC8550(...)** idem constructors for DAC8550.
|
||||
- **DAC8551(...)** idem constructors for DAC8551.
|
||||
- **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.
|
||||
@ -60,24 +73,6 @@ To be used only if one needs a specific speed.
|
||||
- **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
|
||||
|
||||
- **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.
|
||||
|
||||
|
||||
### Power down
|
||||
|
||||
check datasheet for details.
|
||||
|
@ -7,14 +7,17 @@
|
||||
|
||||
#include "DAC8551.h"
|
||||
|
||||
DAC8531 mydac(8); // CLK=D13, MISO=D11, SS = D8
|
||||
// select, data, clock
|
||||
DAC8531 mydac(8, 11, 13);
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.println(__FILE__);
|
||||
Serial.print("DAC8551_LIB_VERSION: ");
|
||||
Serial.println(DAC8551_LIB_VERSION);
|
||||
|
||||
mydac.begin();
|
||||
}
|
||||
|
||||
@ -51,3 +54,4 @@ void loop()
|
||||
|
||||
|
||||
// -- END OF FILE --
|
||||
|
||||
|
@ -6,16 +6,20 @@
|
||||
|
||||
|
||||
#include "DAC8551.h"
|
||||
#include "Wire.h"
|
||||
|
||||
// HW SPI uses slave spin since 0.2.0
|
||||
DAC8531 mydac(1);
|
||||
|
||||
SPIClass * mySPI = new SPIClass(VSPI); // HSPI
|
||||
// select, address HW SPI
|
||||
DAC8531 mydac(5, mySPI);
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
mydac.selectVSPI();
|
||||
Serial.println(__FILE__);
|
||||
Serial.print("DAC8551_LIB_VERSION: ");
|
||||
Serial.println(DAC8551_LIB_VERSION);
|
||||
|
||||
mydac.begin();
|
||||
}
|
||||
|
||||
@ -52,3 +56,4 @@ void loop()
|
||||
|
||||
|
||||
// -- END OF FILE --
|
||||
|
||||
|
@ -9,15 +9,17 @@
|
||||
|
||||
#include "DAC8551.h"
|
||||
|
||||
// HW SPI uses slave spin since 0.2.0
|
||||
DAC8551 mydac(10);
|
||||
// select, address HW SPI
|
||||
DAC8551 mydac(10, &SPI); // explicit SPI
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.println(__FILE__);
|
||||
Serial.print("DAC8551_LIB_VERSION: ");
|
||||
Serial.println(DAC8551_LIB_VERSION);
|
||||
|
||||
mydac.begin();
|
||||
}
|
||||
|
||||
|
@ -10,15 +10,17 @@
|
||||
#include "DAC8551.h"
|
||||
|
||||
|
||||
// HW SPI uses slave spin since 0.2.0
|
||||
DAC8551 mydac(10);
|
||||
// select, address HW SPI
|
||||
DAC8551 mydac(10); // uses default
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.println(__FILE__);
|
||||
Serial.print("DAC8551_LIB_VERSION: ");
|
||||
Serial.println(DAC8551_LIB_VERSION);
|
||||
|
||||
mydac.begin();
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "DAC8551.h"
|
||||
|
||||
|
||||
// SW SPI pins 4,5,6
|
||||
// SW SPI pins select, data, clock
|
||||
DAC8551 mydac(4, 5, 6);
|
||||
|
||||
|
||||
@ -18,7 +18,9 @@ void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.println(__FILE__);
|
||||
Serial.print("DAC8551_LIB_VERSION: ");
|
||||
Serial.println(DAC8551_LIB_VERSION);
|
||||
|
||||
mydac.begin();
|
||||
}
|
||||
|
||||
|
@ -19,13 +19,6 @@ getSPIspeed KEYWORD2
|
||||
|
||||
usesHWSPI KEYWORD2
|
||||
|
||||
selectHSPI KEYWORD2
|
||||
selectVSPI KEYWORD2
|
||||
usesHSPI KEYWORD2
|
||||
usesVSPI KEYWORD2
|
||||
|
||||
setGPIOpins KEYWORD2
|
||||
|
||||
|
||||
# Constants (LITERAL1)
|
||||
DAC8551_LIB_VERSION LITERAL1
|
||||
|
@ -15,7 +15,7 @@
|
||||
"type": "git",
|
||||
"url": "https://github.com/RobTillaart/DAC8551"
|
||||
},
|
||||
"version": "0.2.7",
|
||||
"version": "0.3.0",
|
||||
"license": "MIT",
|
||||
"frameworks": "*",
|
||||
"platforms": "*",
|
||||
|
@ -1,8 +1,8 @@
|
||||
name=DAC8551
|
||||
version=0.2.7
|
||||
version=0.3.0
|
||||
author=Rob Tillaart <rob.tillaart@gmail.com>
|
||||
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
||||
sentence=Arduino library for DAC8501, DAC8531, DAC8550 and DAC8551 SPI 16-bit Digital Analog Convertor
|
||||
sentence=Arduino library for DAC8501, DAC8531, DAC8550 and DAC8551 SPI 16-bit Digital Analog Convertor.
|
||||
paragraph=
|
||||
category=Sensors
|
||||
url=https://github.com/RobTillaart/DAC8551
|
||||
|
Loading…
Reference in New Issue
Block a user