User manual
95 96
11.4 Der DA Umsetzer Brick und Poti
In dem Beispiel wird der A/D-Umsetzer verwendet, um den Spannungswert am Poti einzulesen und dann in
der Schleife an dem D/A-Umsetzer auszugeben. Nun hat der A/D-Umsetzer des Nano einen Wertebereich von
0..1023 also 10Bit, der D/A-Umsetzer aber 0..4095 also 12 Bit. Im Programm muss der Wertebereich umgerech-
net werden. Dazu kann der Wert des A/D-Umsetzer mit 4 multipliziert werden, im Programm geschieht dies
durch eine Schiebeoperation (<<2).
Wenn man das Poti dreht, kann man die Helligkeit der LEDs einstellen. Die gelbe LED reagiert zum Beispiel
früher als die grüne LED, da sie eine geringere Flussspannung hat. Dies ist abhängig von der Bestückung des
jeweilig eingesetzten Dual-LED-Bricks, welche LEDs vorhanden sind.
+
-
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
I²C 12BIT DAC
SCL
SDA
SCL
SDA
+9V
Adr:18-1F
P1
123
P2
P3
Vout
ab
Imax 20mA
// DE_34 DA Beispiele Da Brick I2Cs und Poti
#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 Initialisieren
}
void loop() {
int daval=0; // Als Zwischenvariable verwendet
int poti = analogRead(A0); // a1,a2,a3 kann man austauschen
daval = poti << 2; // 0..1023 -> 0..4095 UMRECHNUNG
// 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
}
ACHTUNG:
0-5V einstellen !
P3
0-5V
0-10V
+-10V
P1
+-5V
P2
0-20V
01
10
11
Adr.
Vout
JP1
Was passiert? Die beiden LEDs lassen sich in der Helligkeit mit dem Poti einstellen. Es gibt dabei
auch einen kleinen „toten“ Bereich durch die Schwellspannung der LEDs.










