15.02.2013, 14:38
Hallo zusammen.
Ich bin kurz davor, dass ich mein erstes größeres LabView Projekt fertig stelle. Ca 90% des Programmes hab ich, dabei geht es hauptsächlich um Messgerätesteuerung, Messdatenerfassung, schalten von Relais,... .
Der letzte Teil bereitet mir aber seit Tagen Kopfzerbrechen. Ich muss noch mit einer elektronischen Baugruppe über SPI kommunizieren.
Zur HW: Ein USB-8451 von NI hatten wir im Haus, kann aber nicht verwendet werden, da die Taktfrequenz 600Hz (bis max. 1kHz) sein muss. (die min. Freq. vom 8451 liegt bei 12MHz)
Nach Rücksprache mit NI wurde mir (aufgrund der Anforderung vom Projekt inkl. SPI) ein USB-6341 DAQ empfohlen und dann auch angeschafft. Einer der DIO Ports des 6341 ist HW getaktet und somit für die realisierung der SPI Schnittstelle verwendbar.
Soweit sogut, Analog- und Digital ausgaben funktionieren im Programm wie sie sollten, jedoch komme ich wie gesagt beim SPI einfach nicht weiter.
Zur Anforderung:
Es soll mit 600Hz bis max. 1kHz getaktet werden. CS 1 wird auf high gelegt (CS active high), 4 Datenbyte gesendet und der CS 1 geht wieder auf low. 10ms später geht CS 2 auf high, die Baugruppe sendet zum DAQ 7 Datenbyte und CS 2 geht wieder auf low. Nach einer Sekunde geht das Spiel wieder von vorne los und die 7 Datenbyte können dazwischen natürlich weiterverarbeitet werden. - Siehe "spi.jpg"
Folgende Librarys gibts von NI für diese Thematik:
SPI Digital Waveform Reference Library
http://zone.ni.com/devzone/cda/epd/p/id/6163
Serial Protocol Communication Reference Design for Digital Waveform Devices
http://zone.ni.com/devzone/cda/epd/p/id/6200
Für das Forum habe ich ein Beispiel VI vom "Serial Protocol Cummunication..." genommen und die Erstellung vom SPI Signal dazugepackt. (jetzt nur ein Slave und nur Daten schreiben)
Die Daten werden, wie auf Bild "spi_fp.jpg" ausgegeben, auch CS ist auf high. Das ist am Oszi schön anzusehen.
Die Bezeichnung in der Anzeige für MOSI und CS habe ich gemacht, wofür "Plot 0" und "Leitung 3" sind ist mir leider auch noch nicht ganz klar. Ich denke, auf "Plot 0" sollte das Taktsignal ausgegeben werden, messen kann ich aber aber nur ein Signal, wie in der Anzeige unter "Leitung 3" zu sehen ist. Nach den 4 Datenbyte wird ein kurzes high ausgegeben.
Wie in Kanaleinstellungen zu sehen sollte der Takt auf Port0/0, MOSI auf 0/1 CS1 auf 0/2 und später CS2 auf 0/3 ausgegeben werden. MOSI und CS1 passen wie gesagt auch.
Ich denke, dass beim Takt das Problem liegt und warum meine Baugruppe nicht reagiert. Aber ich habs einfach noch nicht geschafft, dass ich den Takt ausgebe....
Beim Bild "spi_clk.jpg" habe ich noch ein Bild wie ich denke, dass es aussehen sollte (in dem Fall halt CS active low).
Wenn ich dem Programm in der Bus config. sage, dass zwei Slaves vorhanden sind bekomme ich eine Fehlermeldung von dem VI, welches ich im Bild "spi_bd.jpg" rot markiert habe. Die Funktion vom dem habe ich leider noch nicht 100%ig verstanden und deshalb bekomm ich den Fehler auch nicht weg.
Hab das VI für Version 8.0 konvertiert und samt SubVIs hochgeladen.
Es liegt im Unterordner: \DAQmx SPI - Correlated DIO Ordner\user.lib\Serial Protocols with Waveform Devices\DAQmx
Hoffe ich hab alles halbwechs verständlich formuliert und bitte um Eure Hilfe!
Ich bin kurz davor, dass ich mein erstes größeres LabView Projekt fertig stelle. Ca 90% des Programmes hab ich, dabei geht es hauptsächlich um Messgerätesteuerung, Messdatenerfassung, schalten von Relais,... .
Der letzte Teil bereitet mir aber seit Tagen Kopfzerbrechen. Ich muss noch mit einer elektronischen Baugruppe über SPI kommunizieren.
Zur HW: Ein USB-8451 von NI hatten wir im Haus, kann aber nicht verwendet werden, da die Taktfrequenz 600Hz (bis max. 1kHz) sein muss. (die min. Freq. vom 8451 liegt bei 12MHz)
Nach Rücksprache mit NI wurde mir (aufgrund der Anforderung vom Projekt inkl. SPI) ein USB-6341 DAQ empfohlen und dann auch angeschafft. Einer der DIO Ports des 6341 ist HW getaktet und somit für die realisierung der SPI Schnittstelle verwendbar.
Soweit sogut, Analog- und Digital ausgaben funktionieren im Programm wie sie sollten, jedoch komme ich wie gesagt beim SPI einfach nicht weiter.
Zur Anforderung:
Es soll mit 600Hz bis max. 1kHz getaktet werden. CS 1 wird auf high gelegt (CS active high), 4 Datenbyte gesendet und der CS 1 geht wieder auf low. 10ms später geht CS 2 auf high, die Baugruppe sendet zum DAQ 7 Datenbyte und CS 2 geht wieder auf low. Nach einer Sekunde geht das Spiel wieder von vorne los und die 7 Datenbyte können dazwischen natürlich weiterverarbeitet werden. - Siehe "spi.jpg"
Folgende Librarys gibts von NI für diese Thematik:
SPI Digital Waveform Reference Library
http://zone.ni.com/devzone/cda/epd/p/id/6163
Serial Protocol Communication Reference Design for Digital Waveform Devices
http://zone.ni.com/devzone/cda/epd/p/id/6200
Für das Forum habe ich ein Beispiel VI vom "Serial Protocol Cummunication..." genommen und die Erstellung vom SPI Signal dazugepackt. (jetzt nur ein Slave und nur Daten schreiben)
Die Daten werden, wie auf Bild "spi_fp.jpg" ausgegeben, auch CS ist auf high. Das ist am Oszi schön anzusehen.
Die Bezeichnung in der Anzeige für MOSI und CS habe ich gemacht, wofür "Plot 0" und "Leitung 3" sind ist mir leider auch noch nicht ganz klar. Ich denke, auf "Plot 0" sollte das Taktsignal ausgegeben werden, messen kann ich aber aber nur ein Signal, wie in der Anzeige unter "Leitung 3" zu sehen ist. Nach den 4 Datenbyte wird ein kurzes high ausgegeben.
Wie in Kanaleinstellungen zu sehen sollte der Takt auf Port0/0, MOSI auf 0/1 CS1 auf 0/2 und später CS2 auf 0/3 ausgegeben werden. MOSI und CS1 passen wie gesagt auch.
Ich denke, dass beim Takt das Problem liegt und warum meine Baugruppe nicht reagiert. Aber ich habs einfach noch nicht geschafft, dass ich den Takt ausgebe....
Beim Bild "spi_clk.jpg" habe ich noch ein Bild wie ich denke, dass es aussehen sollte (in dem Fall halt CS active low).
Wenn ich dem Programm in der Bus config. sage, dass zwei Slaves vorhanden sind bekomme ich eine Fehlermeldung von dem VI, welches ich im Bild "spi_bd.jpg" rot markiert habe. Die Funktion vom dem habe ich leider noch nicht 100%ig verstanden und deshalb bekomm ich den Fehler auch nicht weg.
Hab das VI für Version 8.0 konvertiert und samt SubVIs hochgeladen.
Es liegt im Unterordner: \DAQmx SPI - Correlated DIO Ordner\user.lib\Serial Protocols with Waveform Devices\DAQmx
Hoffe ich hab alles halbwechs verständlich formuliert und bitte um Eure Hilfe!