Skip to content

Commit ea4225e

Browse files
committed
0.1.1 DAC8550
1 parent 3ace3a4 commit ea4225e

File tree

17 files changed

+787
-0
lines changed

17 files changed

+787
-0
lines changed

libraries/DAC8550/.arduino-ci.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
compile:
2+
# Choosing to run compilation tests on 2 different Arduino platforms
3+
platforms:
4+
- uno
5+
- leonardo
6+
- due
7+
- zero
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
name: Arduino-lint
3+
4+
on: [push, pull_request]
5+
jobs:
6+
lint:
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@v2
10+
- uses: arduino/arduino-lint-action@v1
11+
with:
12+
library-manager: update
13+
compliance: strict
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
name: Arduino CI
3+
4+
on: [push, pull_request]
5+
6+
jobs:
7+
runTest:
8+
runs-on: ubuntu-latest
9+
10+
steps:
11+
- uses: actions/checkout@v2
12+
- uses: ruby/setup-ruby@v1
13+
with:
14+
ruby-version: 2.6
15+
- run: |
16+
gem install arduino_ci
17+
arduino_ci.rb
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: JSON check
2+
3+
on:
4+
push:
5+
paths:
6+
- '**.json'
7+
pull_request:
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v2
14+
- name: json-syntax-check
15+
uses: limitusus/json-syntax-check@v1
16+
with:
17+
pattern: "\\.json$"
18+

libraries/DAC8550/DAC8550.cpp

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
//
2+
// FILE: DAC8550.cpp
3+
// AUTHOR: Rob Tillaart
4+
// PURPOSE: Arduino library for DAC8550 SPI Digital Analog Convertor
5+
// VERSION: 0.1.1
6+
// URL: https://github.com/RobTillaart/DAC8550
7+
//
8+
// HISTORY:
9+
// 0.1.0 2021-02-04 initial version (based upon DAC8551)
10+
// 0.1.1 2021-08-29 add support for HSPI/VSPI ESP32
11+
// some performance improvements.
12+
13+
14+
15+
#include "DAC8550.h"
16+
17+
18+
DAC8550::DAC8550(uint8_t slaveSelect)
19+
{
20+
_hwSPI = true;
21+
_select = slaveSelect;
22+
}
23+
24+
25+
DAC8550::DAC8550(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect)
26+
{
27+
_hwSPI = false;
28+
_dataOut = spiData;
29+
_clock = spiClock;
30+
_select = slaveSelect;
31+
}
32+
33+
34+
// initializes the SPI
35+
// and sets internal state
36+
void DAC8550::begin()
37+
{
38+
pinMode(_select, OUTPUT);
39+
digitalWrite(_select, HIGH);
40+
41+
_spi_settings = SPISettings(_SPIspeed, MSBFIRST, SPI_MODE1);
42+
43+
if(_hwSPI)
44+
{
45+
#if defined(ESP32)
46+
if (_useHSPI) // HSPI
47+
{
48+
mySPI = new SPIClass(HSPI);
49+
mySPI->end();
50+
mySPI->begin(14, 12, 13, _select); // CLK=14 MISO=12 MOSI=13
51+
}
52+
else // VSPI
53+
{
54+
mySPI = new SPIClass(VSPI);
55+
mySPI->end();
56+
mySPI->begin(18, 19, 23, _select); // CLK=18 MISO=19 MOSI=23
57+
}
58+
#else // generic hardware SPI
59+
mySPI = &SPI;
60+
mySPI->end();
61+
mySPI->begin();
62+
#endif
63+
delay(1);
64+
}
65+
else // software SPI
66+
{
67+
pinMode(_dataOut, OUTPUT);
68+
pinMode(_clock, OUTPUT);
69+
digitalWrite(_dataOut, LOW);
70+
digitalWrite(_clock, LOW);
71+
}
72+
73+
_register = 0;
74+
_value = 0;
75+
}
76+
77+
78+
#if defined(ESP32)
79+
void DAC8550::setGPIOpins(uint8_t clk, uint8_t miso, uint8_t mosi, uint8_t select)
80+
{
81+
_clock = clk;
82+
_dataOut = mosi;
83+
_select = select;
84+
pinMode(_select, OUTPUT);
85+
digitalWrite(_select, HIGH);
86+
87+
mySPI->end(); // disable SPI
88+
mySPI->begin(clk, miso, mosi, select);
89+
}
90+
#endif
91+
92+
93+
// value = 0..65535
94+
void DAC8550::setValue(uint16_t value)
95+
{
96+
_value = value;
97+
updateDevice();
98+
}
99+
100+
101+
// returns 0..65535
102+
uint16_t DAC8550::getValue()
103+
{
104+
return _value;
105+
}
106+
107+
108+
void DAC8550::setPowerDown(uint8_t powerDownMode)
109+
{
110+
_register = powerDownMode;
111+
updateDevice();
112+
}
113+
114+
uint8_t DAC8550::getPowerDownMode()
115+
{
116+
return _register & 0x03;
117+
}
118+
119+
120+
void DAC8550::setSPIspeed(uint32_t speed)
121+
{
122+
_SPIspeed = speed;
123+
_spi_settings = SPISettings(_SPIspeed, MSBFIRST, SPI_MODE1);
124+
};
125+
126+
127+
//////////////////////////////////////////////////////////////////
128+
//
129+
// PRIVATE
130+
//
131+
void DAC8550::updateDevice()
132+
{
133+
uint8_t configRegister = _register;
134+
135+
digitalWrite(_select, LOW);
136+
if (_hwSPI)
137+
{
138+
mySPI->beginTransaction(_spi_settings);
139+
mySPI->transfer(configRegister);
140+
mySPI->transfer(_value >> 8);
141+
mySPI->transfer(_value & 0xFF);
142+
mySPI->endTransaction();
143+
}
144+
else // Software SPI
145+
{
146+
swSPI_transfer(configRegister);
147+
swSPI_transfer(_value >> 8);
148+
swSPI_transfer(_value & 0xFF);
149+
}
150+
digitalWrite(_select, HIGH);
151+
}
152+
153+
154+
// simple one mode version
155+
void DAC8550::swSPI_transfer(uint8_t value)
156+
{
157+
uint8_t clk = _clock;
158+
uint8_t dao = _dataOut;
159+
for (uint8_t mask = 0x80; mask; mask >>= 1)
160+
{
161+
digitalWrite(dao,(value & mask));
162+
digitalWrite(clk, HIGH);
163+
digitalWrite(clk, LOW);
164+
}
165+
}
166+
167+
// -- END OF FILE --

libraries/DAC8550/DAC8550.h

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#pragma once
2+
//
3+
// FILE: DAC8550.h
4+
// AUTHOR: Rob Tillaart
5+
// PURPOSE: Arduino library for DAC8550 SPI Digital Analog Convertor
6+
// VERSION: 0.1.1
7+
// HISTORY: See DAC8550.cpp
8+
// URL: https://github.com/RobTillaart/DAC8550
9+
//
10+
11+
12+
#include "Arduino.h"
13+
#include "SPI.h"
14+
15+
16+
#define DAC8550_LIB_VERSION (F("0.1.1"))
17+
18+
19+
#define DAC8550_POWERDOWN_NORMAL 0
20+
#define DAC8550_POWERDOWN_1K 1
21+
#define DAC8550_POWERDOWN_100K 2
22+
#define DAC8550_POWERDOWN_HIGH_IMP 3
23+
24+
25+
class DAC8550
26+
{
27+
public:
28+
DAC8550(uint8_t slaveSelect);
29+
DAC8550(uint8_t spiData, uint8_t spiClock, uint8_t slaveSelect);
30+
31+
void begin();
32+
33+
void setValue(uint16_t value);
34+
uint16_t getValue();
35+
36+
void setPowerDown(uint8_t powerDownMode);
37+
uint8_t getPowerDownMode();
38+
39+
// speed in Hz
40+
void setSPIspeed(uint32_t speed);
41+
uint32_t getSPIspeed() { return _SPIspeed; };
42+
43+
bool usesHWSPI() { return _hwSPI; };
44+
45+
// ESP32 specific
46+
#if defined(ESP32)
47+
void selectHSPI() { _useHSPI = true; };
48+
void selectVSPI() { _useHSPI = false; };
49+
bool usesHSPI() { return _useHSPI; };
50+
bool usesVSPI() { return !_useHSPI; };
51+
52+
// to overrule ESP32 default hardware pins
53+
void setGPIOpins(uint8_t clk, uint8_t miso, uint8_t mosi, uint8_t select);
54+
#endif
55+
56+
private:
57+
uint8_t _dataOut = 255;
58+
uint8_t _clock = 255;
59+
uint8_t _select = 255;
60+
61+
bool _hwSPI = false;
62+
uint16_t _value = 0;
63+
uint8_t _register = 0;
64+
65+
uint32_t _SPIspeed = 16000000;
66+
67+
void updateDevice();
68+
void swSPI_transfer(uint8_t value);
69+
70+
71+
SPIClass * mySPI;
72+
SPISettings _spi_settings;
73+
74+
#if defined(ESP32)
75+
bool _useHSPI = true;
76+
#endif
77+
};
78+
79+
// -- END OF FILE --

libraries/DAC8550/LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2021-2021 Rob Tillaart
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

0 commit comments

Comments
 (0)