Hallo Leute,
ich habe einen MCP4921 an meinen STM32F411 angeschlossen. Als
referenzspannung habe ich die 3.3V vom NUCLEO Board benutzt. Ich wollte
nun 8 Amplituden zwischen 3.3V und 0V generieren. Das macht der MCP4921
auch, nur macht er es leider zwischen 440mV und 0V (Bild im Anhang).
Senden tue ich wie folgt.
blubb schrieb:> Wie ist denn die BEschaltung fuer Vref?> WIe sind die Einstellungen fuer Vfref gain und den Buffer?>> Schreibst Du und misst Du den richtigen Kanal?
Vref habe ich einfach von der Spannungsversorgung mit 3.3V auf Vref
durchgebrückt.
0x3fff = 0b 0011 1111 1111 1111
ersten 4 konfigurationsbits
0 = Write to DAC A
0 = Unbuffered
1 = gain 1x
1 = Output Power down Control bit
Auf dem IC befindet sich nur ein DAC daher kann ich nicht den falschen
Kanal messen
Walt N. schrieb:> HAL_SPI_Transmit(&hspi2,high_impulse, 1, HAL_MAX_DELAY);
Du schreibst nur ein Byte raus, willst aber zwei?
Und wenn das Datenblatt richtig ist dann kommt das high Byte
zuerst, dann das low Byte (sollte kommen).
Ob die MSBit/LSBit Konfiguration richtig eingestellt ist
hast du nicht gezeigt ....
In meinem letzten angehängten Bild sieht man auch die Aufzeichnung mit
meinem Logic Analyzer. Die zwei Byte werden eigentlich richtig auf die
Reise geschickt.
Walt N. schrieb:> hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
Das passt nicht zusammen mit
Walt N. schrieb:> uint8_t high_impulse[2] = {0xff, 0x3f}; //3,3v> uint8_t low_impulse[2] = {0x00, 0x30}; //0V
Das tut man nicht, sonst fällt man auf die Schnauze.
Entweder du konfigurierst dein SPI als 8 Bit und schreibst zwei
Bytes (aber in der richtigen Reihenfolge, also MSByte zuerst) oder
du erzeugst deine Variablenwerte in 16 Bit. Dann ist die Transfer-
Anzahl natürlich 1 wie angegeben.
So sieht der code jetzt aus, das Ergebnis ist das gleiche. Anschließend
habe ich eine Verstärkerschaltung angeschlossen (Anhang Bild 1). Diese
soll mir das Signal auf +/-12V verstärken. Doch der Ausgang zeigt das
Signal zwischen 0V und 0.4V (Anhang Bild 2). Einfach weil der Ausgang
des DAC's nicht 3.3V ausgibt...
Walt N. schrieb:> So sieht der code jetzt aus,
Umständlicher kann man es ja kaum machen, ein Hinweis darauf
dass du offensichtlich gar nicht verstehst um was es geht
und wie man so etwas macht.
Walt N. schrieb:> hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
------------------------^^^^^^^^^^^^^^^^^^^^
Wenn man sagt dass etwas nicht funktioniert muss man schon
alles zeigen. Wie schaut denn die SPI-Konfiguration jetzt aus?
Walt N. schrieb:> SPIMCP.png
Auf diesem Diagramm fällt auch noch auf dass der Chip Select
nicht nach 16 Bit hoch geht. Das verlangt aber das Datenblatt
(siehe Seite 6, Figure 1-1). Sollte dir beim Implementieren
schon längst aufgefallen sein.
jo mei schrieb:> Umständlicher kann man es ja kaum machen, ein Hinweis darauf> dass du offensichtlich gar nicht verstehst um was es geht> und wie man so etwas macht.
Du bist ja der coolste hier. Es geht hier um einen Testaufbau und es
soll einfach funktionieren. mach dir mal keine Sorgen um die Code
Optimierung
jo mei schrieb:> Wenn man sagt dass etwas nicht funktioniert muss man schon> alles zeigen. Wie schaut denn die SPI-Konfiguration jetzt aus?
Natürlich habe ich aus der 16 eine 8 gemacht.
jo mei schrieb:> Auf diesem Diagramm fällt auch noch auf dass der Chip Select> nicht nach 16 Bit hoch geht. Das verlangt aber das Datenblatt> (siehe Seite 6, Figure 1-1). Sollte dir beim Implementieren> schon längst aufgefallen sein.
Anstatt gleich zu zicken kann man auch einfach mal nachfragen. Klar habe
ich gesehen das der Chipselect nicht triggert. Liegt aber an meinem
Logic Analyzer. Außerdem hat man den Schaltplan von meinem DAC auch ein
dem Bild. Hast du Lust zu helfen oder nur hier um den coolen zu spielen?