12 Bit DA Wandler, der MCP4921 am Arduino Uno

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

mcp4921-a-1000

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.

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.