-
Notifications
You must be signed in to change notification settings - Fork 7
/
MCP48X2.h
63 lines (52 loc) · 1.25 KB
/
MCP48X2.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
* MCP48X2.h
*
* Created on: 2012/05/25
* Author: sin
*/
#ifndef MCP48X2_H_
#define MCP48X2_H_
#include <SPI.h>
class MCP48X2 {
byte pin_cs;
byte spi_mode;
byte spi_clockdiv;
static const byte DAC_CHANNEL = 1 << 7;
static const byte DAC_OUTPUT_GAIN1x = 1 << 5;
static const byte DAC_OUTPUT_SHUTDOWN = 1 << 4;
void init(const byte cdiv, const byte mode) {
pinMode(pin_cs, OUTPUT);
digitalWrite(pin_cs, HIGH);
setupSPI(cdiv, mode);
}
public:
MCP48X2(const byte cs = 10) : pin_cs(cs) {}
void begin(const byte cdiv = SPI_CLOCK_DIV4, const byte mode = SPI_MODE0) { init(cdiv, mode); }
void select() { digitalWrite(pin_cs, LOW); }
void deselect() { digitalWrite(pin_cs, HIGH); }
void setupSPI(const byte cdiv, const byte mode) {
spi_clockdiv = cdiv;
spi_mode = mode;
setupSPI();
}
void setupSPI() {
SPI.setDataMode(spi_mode);
SPI.setClockDivider(spi_clockdiv);
SPI.setBitOrder(MSBFIRST);
}
void write12(word val) {
select();
SPI.transfer( (DAC_OUTPUT_GAIN1x | DAC_OUTPUT_SHUTDOWN) | (val>>8&0x0f));
SPI.transfer(val);
deselect();
}
/*
void write8(byte val) {
select();
SPI.transfer( (DAC_OUTPUT_GAIN1x | DAC_OUTPUT_SHUTDOWN) >> 3);
SPI.transfer(val);
deselect();
}
*/
};
#endif /* MCP48X2_H_ */