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.