Arduino MCP4921 / MCP4922 Library Bibliothek

Ich habe für Arduino eine Bibliothek zusammengestellt für einen 12-bit IC Analog-Digital-Converter Digital-Analog-Converter: MCP4921 / MCP4922
Warte auf Eure Kommentare/ Verbesserungsvorschläge.

Link: Beschreibung
MCP4921 Library [ZIP-Datei]: AH_MCP4921_20120117.zip
MCP4922 Library [ZIP-Datei]: AH_MCP4922_20120117.zip

Hallo,

habe die Bibliothek eben ausprobiert und sie funktioniert. Vielen Dank erstmal!

Allerdings habe ich mit dem Oszilloskop am Clock-Pin einen Takt von nur 1 kHz gemessen, was ich persönlich viel zu niedrig finde. Die Ursache dafür liegt im delay(1) in der Methode sendSPIClock(), was meines Erachtens völlig überflüssig ist. Hab's auskommentiert und läuft wunderbar mit ca. 100 kHz!

Gruß
Christoph

hikke:
Ich habe für Arduino eine Bibliothek zusammengestellt für einen 12-bit IC Analog-Digital-Converter: MCP4921 / MCP4922
Warte auf Eure Kommentare/ Verbesserungsvorschläge.

Soviel ich das verstanden habe sind das Digital-Analog-Converter mit 12 Bit Auflösung (nicht ADC).
Der MCP4921 hat einen DAC und der MCP4922 zwei unabhängige DAC.

Die links zu den Bibiotheken funktionieren nicht. hikke ist Deine Hompage offline?

Grüße Uwe

@uwefed: Da muss an dir liegen, die Links haben gestern und heute immer noch funktioniert.

Jetzt funktionen mir die Links auch wieder. Die Seite war wohl gestern nur zeitweise offline weil alhinde dran gearbeitet hat.
Grüß Uwe

christophk:
Hallo,

habe die Bibliothek eben ausprobiert und sie funktioniert. Vielen Dank erstmal!

Allerdings habe ich mit dem Oszilloskop am Clock-Pin einen Takt von nur 1 kHz gemessen, was ich persönlich viel zu niedrig finde. Die Ursache dafür liegt im delay(1) in der Methode sendSPIClock(), was meines Erachtens völlig überflüssig ist. Hab's auskommentiert und läuft wunderbar mit ca. 100 kHz!

Gruß
Christoph

Danke für den Tipp, werde ich dann bei mir auch ändern.

Soviel ich das verstanden habe sind das Digital-Analog-Converter mit 12 Bit Auflösung (nicht ADC).
Der MCP4921 hat einen DAC und der MCP4922 zwei unabhängige DAC.

Ja, hast Du natürlich recht. Schreibfehler.

Jetzt funktionen mir die Links auch wieder. Die Seite war wohl gestern nur zeitweise offline weil hikke dran gearbeitet hat.
Grüß Uwe

Hatte letzte Tage eine Webhosterwechsel gehabt, deshalb kann es schon sein, dass die Seite/Dateien nicht erreichbar waren!.

Hallo allerseits,

ich bin Arduino-Anfänger und habe obiges Beispiel ausprobiert.

Es funzt! Nur ich verstehe nicht wie man auf 100kHz-Takt kommt?
Mit meinem ARduino Uno erreiche ich max. 3,4kHz 290us; bzw. mit zwei DAC-Ausgängen 1,7kHz (2x290us)
Ist das das Maximum oder geht es noch schneller?
Es wäre nett das Teil als SIgnalgenerator verwenden zu können.

Bei Ausnutzung von 12Bit bzw. 4096 Punkten bleiben gerade mal 0,3Hz (3,1s)

Gruß, Miss Franken

Was hat die Auflösung mit der Frequenz zu tun?

Eine Frage habe ich noch, wie komme ich am besten auf 0-10V? Laut Datenblatt kommt geht er ja nur von 0-5V. Nichtinvertierender Verstärker?

Okay, die Aussage ist etwas verwirrend... :roll_eyes:
Die Auflösung von 12 Bits hat nichts mit dem Takt zu tun.

Aber wenn ich entsprechend dem o.g. Beispiel den Sägezahn alle 4096 Bits durchlaufen lasse, dann benötigt das pro Sägezahn -Grundschwingung bei der geringen Taktrate von deutlich unter 5kHz eine Ewigkeit...

Wie kann ich den Takt auf 100kHz schrauben?

Miss Franken

Der MCP4921 braucht pro Wert 16 Bit. Darum muß die Busfrequenz durch 16 geteilt werden um die max Geschwindigkeit der Änderungen am DAC-Ausgang zu wissen. Da komme ich bei 100kHz auf max 6,2kHz. Mit etwas latenz bzw bearbeitungszeit zwischen den Übertragungen sind es leicht mal 3kHz.

Grüße Uwe

Hallo Uwe,

okay verstehe. Mit den oben zitierten 100kHz ist die SPI-Busfrequenz gemeint,
und pro Bit benötige ich einen Taktzyklus, macht bei dem 12 Bit DAC ca. 8kHz.

Kann man die SPI-Bus-Frequenz höher als 100kHz takten? Welche Stellschraube habe ich am Arduino?
Der ATMEGA 324 arbeitet immerhin mit 16MHz.
Im MCP4921 Datenlatt steht was von "SPI™ Interface with 20 MHz Clock Support"

Wo sind die Stellschrauben?

Es wäre nett mit der Ausgangsspannung wenigsten den Audio-Bereich (also bis 20kHz) abdecken zu können.

Miss Franken

Ich habe die Bibiothek nicht angesehen aber Du kannst den DAC über den SPI ansteuern und alle möglichen Geschwindigkeiten des SPI verwenden. Suche mal nach SPI Bus.
Der DAC braucht pro Wert nicht 12 sondern 16 Bit. Schau Dir das Datenblatt an. http://ww1.microchip.com/downloads/en/DeviceDoc/21897a.pdf Seite 18.
Grüße Uwe

Ich werde nicht ganz schlau aus dem Datenblatt, darf Vref nur 2,5 bzw. 3 Volt haben. Was ist die maximale mögliche Ausgangsspannung am analogen Ausgang?

Die Referenzspannung kann von 0V bis VDD (Versorgungsspannung) im ungebufferten Betrieb gehen. Mit dem Biffer sind es 40mV an jeder Seite weniger. (Seite 2 unterer Teil der Tabelle.)
Auch der Ausgang kommt nicht ganz auf die Betriebsspannung ( 10mV mehr als Masse und 40mV weniger als die Versogungspannung.
bit 13 !GA Output Gain Select bit - ermöglicht die Verdopplung der Ausgangsspannung. (Seite 18)

Grüße Uwe