SPI DAC (Digital to Analog Converter)
Mit einem DAV kann eine sehr genau einstellbare analoge Gleichspannung erzeugt werden. Die Stromstärke kann um die 25mA liegen.
Die analoge Ausgangsspannung des DAC liegt zwischen 0V und VREF, wobei VREF kleiner oder gleich der Versorgungsspannung VDD sein muss. Die Spanne zwischen 0V und der Referenzspannung hat eine Auflösung von 8 bit (255 Schritte). Bei 5V VREF ist das eine Schrittweite on rund 0,02V.
Die Ausgangsspannung kann mit einem GA (Gain Amplifier) verdoppelt werden (jedoch nicht über die Versorgungsspannung hinaus)
Der DAC hat doppelte Register (ein zusätzliches Buffer-Register). Dies erlaubt ein Update der Werte während gleichzeitig der vorherige Wert weiter ausgegeben wird.
Pinbelegung
| Pin | Funktion |
|---|---|
| VDD | Spannungsversorgung 2,7-5,5V |
| VSS | GND bzw. Masse - |
| VREF | Voltage Referenz Input (muss kleiner oder gleich VDD sein) |
| VOUT | DAC Ausgangsspannung (kann mit 25mA direkt belastet werden) |
| LDAC | Latch um das empfangenen Registerinhalt auf VOUT zu legen (wird LDAC auf GND gelegt wird der Eingang sofort durchgeschaltet) |
| CS, SCK, SDI | SPI Datenleitungen bis zu 20MHZ |
Register des DAC
Der DAC hat ein 16 bit Register ( 0 | BUF | GA | SHDN | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | X | X | X | X )
| Bit | Bedeutung |
|---|---|
| BUF | 1= Input Buffer an 0= Unbuffered (wird ggf. bei höheren Schaltfrequenzen benötigt) |
| GA | 1= Ausgangsverstärkung 1x 0= Ausgangsverstärkung 2x |
| SHDN | 1= aktive Mode, 0= Shutdown Mode |
| D0-D7 | Binärwert für die gewünschte Ausgangsspannung |
| X | don't care |
Programmcode
Programm
#define CS 8 // CS für die SPI Übertragung (active Low)
#define LDAC 9 // LDAC PIN (active Low) - ladet (Load) den per SPI übertragenen Sollwert ind den DAC und damit auf den Ausgang
#include
void setup() {
pinMode(CS, OUTPUT);
pinMode(LDAC, OUTPUT);
digitalWrite(CS, HIGH);
digitalWrite(LDAC, HIGH);
SPI.begin();
SPI.setDataMode(SPI_MODE3);
SPI.setBitOrder(MSBFIRST);
digitalWrite(CS, LOW);
SPI.transfer16(0b0011110001110000); // ( 0 | BUF | GA | SHDN | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | X | X | X | X )
digitalWrite(CS, HIGH);
digitalWrite(LDAC, LOW);
digitalWrite(LDAC, HIGH);
}
void loop() {
// bleibt leer
}