Der 12-Bit Digital zu Analog Wandler (DAC) MCP4921 soll vom Arduino Uno angesteuert werden. Er wird mit einem Vorwort (Header) und der 12Bit Zahl über die SPI Schnittstelle programmiert. Als Referenzspannung wird hier VCC verwendet.
Die Schaltung
Die Schaltung wird wie folgt aufgebaut
MCP4921 Pin > Arduino Pin
1 (VDD) > 5V
2 (!CS) > Pin 10
3 (SCK) > Pin 13
4 (SDI) > Pin 11
5 (!LDAC) > GND
6 (Vref) > 5V
7 (Analog GND) > GND
8 (Vout) > Ausgang analog
Die Software
Die 3 Datenanschlüsse werden definiert.
Mit sendWert(int wert) wird erst der Header und dann der Wert zum ADC übertragen.
// MCP 4921 DA Wandler 12 Bit mit dem Arduino Uno ansteuern
//
// MCP4921 > Arduino
// 2 > 10 ist !CS / Chip Select bei 0
// 3 > 13 ist SCL / Takt
// 4 > 11 ist SDI / Daten
//
// Die maximale Frequenz bei einem Rechteck 1/0 ist ca. 1850 Hz.
//
// Matthias Busse 26.6.2014 Version 1.0
#define DA 11 // Anschlüsse SPI BUS und Chip Select
#define CL 13
#define CS 10
#define CLOCK digitalWrite(CL,1); digitalWrite(CL,0);
void setup() {
pinMode(DA,OUTPUT); // alles Ausgänge
pinMode(CL,OUTPUT);
pinMode(CS,OUTPUT);
}
void loop() {
// Rampe mit 0,9 Hz
for(int i=0 ; i< 4096 ; i++)
sendWert(i);
// Rechteck mit 1850 Hz
// sendWert(0);
// sendWert(4095);
}
void sendWert(int wert) {
// Header und Wert ausgeben
digitalWrite(CS,0); // Chip wählen
sendHeader(); // Header senden
for(int i=11;i>=0;i--){ // Daten senden
digitalWrite(DA,((wert&(1<<i)))>>i);
CLOCK
}
digitalWrite(CS,1); // Chip abwählen
}
void sendHeader() {
// Vorwort laut Datenblatt Seite 18
digitalWrite(DA,0); // 0: auf DAC0 ausgeben
CLOCK
digitalWrite(DA,0); // ungepuffert
CLOCK
digitalWrite(DA,1); // Gain: 1=1x 0=2x
CLOCK
digitalWrite(DA,1); // Chip aktiv
CLOCK
}
Für die Übertragung eines Werts wird ca. 1/4 Milisekunde benötigt, sodass eine Rampe mit 4096 Punkten in gut einer Sekunde übertragen ist. Ein Rechteck kann so mit maximal 1850 Hz ausgegeben werden.
von Matthias Busse
Vorherige Artikel zu diesen Thema
Ein R-2R 4-Bit Digital-Analog Ausgang wird aufgebaut mit dem Arduino Uno.

