Der 12-Bit-DA-Wandler MCP4725

Elektronik-Labor  Projekte  AVR 



Einen DA-Wandler mit hoher Auflösung kann man immer gebrauchen. Und zum Geburtstag bekam ich von meinem Freund Rainer eine kleine Platine mit dem MCP4725 vom Microchip geschenkt. Das besondere an diesem Chip ist, dass man die Ausgangsspannung jederzeit per I2C-Bus einstellen kann. Zusätzlich gibt es ein EEPROM, in dem ein Startwert festgehalten wird. Man könnte also z.B. eine ganz bestimmte Spannung einstellen, die dann beim nächsten Einschalten ganz ohne Zutun eines Mikrocontrollers sofort erscheint.



Der DA-Wandler hat ein winzigkleines SOT-23-6-Gehäuse. Da ist es eine große Hilfe, dass alles bereits auf einer kleine Platine von Adafruit montiert ist.



Die kleine Platine passt prima zum Lernpaket Mikrocontroller mit seinem ATtiny13. Es werden nur vier Verbindungsleitungen verwendet: Vcc, GND, SCL an PB4 und SDA an PB3. Der Adresseingang A0 wird zusätzlich an GND gelegt. Die Schreibadresse ist dann 11000100.



Um einen Spannungswert zwischen Null und 4095 auszugeben sind nur drei Bytes erforderlich: I2C-Adresse, Highbyyte (0...15) und Lowbyte (0...255). Also los, der erste Test mit Bascom ist ganz einfach:

'MCP4725
$regfile = "attiny13.dat"

$crystal = 1200000
Waitms 500
Config Scl = Portb.4
Config Sda = Portb.3
I2cinit

Do
I2cstart
I2cwbyte &HC4 'Adresse 11000100
I2cwbyte &H02
I2cwbyte &H00 '512/4096, 1/8*5V
I2cstop
Waitms 500
Loop

Mit dem Oszilloskop am Ausgang Vout sieht man was passiert. Das interne EEPROM ist offensichtlich werksseitig auf halbe Spannung eingestellt. Also erscheint erstmal 2,5 V. eine halbe Sekunde später schickt das Programm dann seine eigenen Daten. Die Spannung wird in einem Sprung kleiner und landet bei ca. 0,6 V.

Und hier noch ein Rampengenerator mit langsamen Anstieg von 0 V auf 5 V in ca. 4 s:

'MCP4725 Rampe
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 16
$framesize = 16

Dim D As Word
Dim Hi As Byte
Dim Lo As Byte

Waitms 500

Config Scl = Portb.4
Config Sda = Portb.3
I2cinit

Do
For D = 0 To 4095
I2cstart
I2cwbyte &HC4 'Adresse 11000100
Hi = High(d)
Lo = Low(d)
I2cwbyte Hi
I2cwbyte Lo
I2cstop
Waitms 1
Next D
Waitms 500
Loop

Und zum guten Schluss muss auch noch das EEPROM ausprobiert werden. Der DA-Wandler soll nach jedem Neustart 3,14 V ausgeben. Wenn man dann mal vergessen hat, wie groß Pi ist, kann man es mit dem DVM nachmessen. Es gibt aber auch andere Anwendungen, wie z.B. das Speichern einer Abstimmspannung eines Empfängers oder eines Sollwerts für einen Temperaturregler. Für diese Aktion sind vier Bytes nötig: I2C-Adresse, das Steuerbyte &H60 und Highbyte und Lowbyte des Messwerts, diesmal aber um vier Bit nach links geschoben (mal 16). Gleichzeitig mit dem Schreiben ins EEPROM wird der aktuelle ausgabewert erneuert.

'MCP4725 EEPROM + DAC
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 16
$framesize = 16

Dim D As Word
Dim Hi As Byte
Dim Lo As Byte

Waitms 500

Config Scl = Portb.4
Config Sda = Portb.3
I2cinit

D = 2573 '3,14 V (Pi V)
D = D * 16
Hi = High(d)
Lo = Low(d)
I2cstart
I2cwbyte &HC4 'Adresse 11000100
I2cwbyte &H60 'EEPROM und DAC
I2cwbyte Hi
I2cwbyte Lo
I2cstop

Do
Loop

End



Simmt genau!


Elektronik-Labor  Projekte  AVR