User manual
93 94
11.3 Der DA-Umsetzer Brick und Ansteuerung per I2C
Unser DA-Umsetzer hat eine höhere Auösung als der über den PWM realisierte Ausgang, nämlich 4096 Stufen,
also 12 Bit. Mit dieser Beispielschaltung kann auch die Helligkeit der LEDs gesteuert werden. Sie beginnen al-
lerdings erst ab einem bestimmten Schwellwert zu leuchten, der je nach LED unterschiedlich sein kann. Deshalb
leuchten die beiden LEDs unten auch nicht gleichmäßig. LEDs müsste man eigentlich mit einer Stromregelung
ansteuern. Die 2.2k Ohm Widerstände übersetzen näherungsweise die Spannungsänderung in eine Stromände-
rung. Es gilt dabei die Formel I = (Uda - Uled) / 2200Ohm (*1). Wenn Uda groß gegenüber ULed ist, funktioniert
die Übersetzung in die Stromstärke auch ganz gut. Wenn Uda < Uled ist, ießt kein Strom durch die LED und
sie bleibt dunkel, damit wird Uda nicht mehr richtig angezeigt.
Achtung: Der DA-Umsetzer-Brick hat integrierte Spannungskonverter für -10V, man kann durch die Steckbrü-
cken auf der Oberseite einstellen, welchen Bereich er hat. In dem Beispiel geht neben 0-5V auch noch 0-10V.
Der Ausgangsstrom ist auf ca. 20 mA begrenzt, doch bitte trotzdem immer GENAU kontrollieren, wie die Steck-
brücken gesetzt sind. Auf der Unterseite ist die Belegung auch nochmal abgebildet. Wenn man den Baustein
öffnet, kann man eine der drei Adressen für den I2C Bus einstellen. Die vierte Adresse (18) lässt sich bei dem
Baustein nicht setzen.
*1 Uda > ULed und Uled = die Mindest-Spannung damit die LED leuchtet.
+
-
9V
1A
SCLS DA
+9V
A0
A1
Tx
Rx
PD2
SCLKMOSI
PD3
PD 6
PD 4
PD 5
PD 7
A7
A3
A2
A6
NANO
to
Br ick`R`
3,3V 5V
USB
B0
SS
MISC
B1
I²C
LED
LED
P3
0-5V
0-10V
+-10V
P1
+-5V
P2
0-20V
01
10
11
Adr.
Vout
JP1
I²C 12BIT DAC
SCL
SDA
SCL
SDA
+9V
Adr:18-1F
P1
123
P2
P3
Vout
ab
Imax 20mA
ACHTUNG:
0-5V einstellen !
// DE_33 DA Beispiele Da Brick I2Cs
#include <Wire.h>
#include <avr/pgmspace.h>
// 1E=GND,1c=Open,1a=VCC AD5622 JUmper offen dann 1Ch
// 0001 1aa0
// aber nur aa=01 10 11 sind moegliche Adressen
#dene i2cdasel1 (0x1a>>1) // ADRESSE Einstellen 1a,1c,1e
#dene i2cdasel2 (0x1c>>1) // ADRESSE Einstellen 1a,1c,1e
#dene i2cdasel3 (0x1e>>1) // ADRESSE Einstellen 1a,1c,1e
void i2c_da_write_command(unsigned char i2cbaseadr, unsigned short cmdvalue)
{
// BIt15,14=0 13,12=pd (std=0) dann 11..0 = DA Value
cmdvalue = cmdvalue & 0xFFF; // 12 Bits valide // 0..4095 Wertebereich
Wire.beginTransmission(i2cbaseadr); // I2C Start senden
Wire.write((cmdvalue>>8)&0xff); // dann MSB zuerst
Wire.write(cmdvalue&0xff); // danach das LSB
Wire.endTransmission(); // I2C beenden
}
void setup() {
Wire.begin(); // i2C Initialisierung
}
void loop() {
static int daval=0; // Wert statisch fuer tests wird hochgezaehlt
// Alle moeglichen I2C Adresse ausgeben der Einfachheit halber
i2c_da_write_command(i2cdasel1,daval); // Hier mal alle DA Umsetzer
i2c_da_write_command(i2cdasel2,daval); // an sprechen die moeglich sind
i2c_da_write_command(i2cdasel3,daval); // Nur einer wird aber verwendet
delay(1); // 1ms nur zur Sicherheit damit nicht zu schnell und alles noch sichtbar
daval++; // Neuer DA Wert
if (daval>4095) daval = 0; // Ueberlauf verhindern 0..4095
}
Was passiert? Die beiden LEDs sind zu Beginn ganz dunkel, dann sieht man plötzlich die Helligkeit
ansteigen, bis ein Maximum erreicht wird und alles von vorne beginnt. Der Vorgang dauert ein paar
Sekunden.










