Hallo,
ich habe einen CH Robotics UM6 AHRS welches von UART auf SPI Kommunikation umgestellt werden soll.
Der Sensor bietet beide Protokolle an.
Der Sensor ist an ein sbRIO 9636 angeschlossen.
Ich bin von dem Multiport SPI sbRIO Beispiel im Labview ausgegangen und habe es versucht, an meine Konfiguration anzupassen.
Dazu habe ich den Sensor angeschlossen und die Ports (SS, SCK, MOSI, MISO) im Labview entsprechend angepasst.
Da das Beispiel schon sehr umfangreich ist, müsste es ja ein leichtes sein, es entsprechend Anzupassen.
Gemäß Datenblatt (
http://www.chrobotics.com/docs/UM6_datasheet.pdf ) Seite 20, dass 0x00 auf MOSI geschrieben wird, gefolgt vom Register welches ausgelesen werden soll. (z.B. 0x5D für eine gefilterte Drehrate um z)
Danach antwortet der Sensor auf MISO mit dem Inhalt des Registers.
Wie geschieht nun die Praktische Umsetzung des Beispiels?
Ich betrete momentan selbst Neuland, da ich bisher noch nicht mit Labview FPGA gearbeitet habe.
Bin daher um jede Hilfe dankbar.
Ich arbeite mit diesem Beispiel:
http://www.ni.com/white-paper/9117/en
Es geht um die Anpassung des VIs an ein anderes FPGA Target
Zitat:The IO of the Single-Board RIO device in the example project will not be the same as the IO types on the R Series board. Specifically, the IO lines have different properties and methods associated with them and the PORTs of an sbRIO are 10 bits wide while the R Series ports are 8 bits. To rectify this:
Make sure you have the IO set up for Boolean values for SCLK, MOSI, and MISO and a Port set for CS.
Was ist mit diesem Port für CS gemeint?
Ich habe ein Screenshot des Projektexplorers angefügt:
Im oberen FPGA Target (RT Single Board RIO 10.0.18.167), welches aus dem Beispiel Projekt kommt, sieht man das CS_0 respektive CS_1 Port1/DIO9:0 zugeordnet ist.
Was beudetet dieses 9:0 in diesem Fall?
Der CS Port muss wohl als U16 und nicht als Boolean konfiguriert sein.
Im Original Beispiel sieht man das an der Port Konfiguration der FPGA I/Os, vgl angehängte Screenshots.
Das Beispiel lässt sich nicht kompilieren, da in meinem Fall Datentypen unterschiedlichen Typs (U8 und Boolean) miteinander verbunden sind...
Weiß einer Rat?
Hallo smarties,
CS steht für Chip Select - dh. Du verbindest einen digitalen Ausgang mit der Baugruppe mit der Du kommunizieren willst. Wenn du CS auf high setzt schaltest Du sozusagen die Baugruppe auf aktiv und sie kann jetzt hören was vom digitalen Sendeausgang auf ihren Eingang kommt und mit ihrem Ausgang etwas zum digitalen Eingang Deiner Kommunikationshardware senden. Und alles natürlich im Rhytmus vom Clock.
Grüße
kpa
Hallo, smarties,
in Ergänzung zu kpa:
Zitat aus dem White-Paper:
Code:
A single-cycle timed loop (SCTL) is used to perform each step of communication between the SPI master (LabVIEW FPGA VI) and up to 8 slave devices per port. Multiple ports can be created using the same FPGA VI and interface to a host program.
Das Beispiel kann also über
denselben SPI-Bus mit mehreren Slaves kommunizieren, je nachdem welches Bit im Chip-Select Port gerade aktiv ist.
Wenn du nur mit einem einzigen SPI-Teilnehmer kommunizieren willst, dann kannst du das gerne auf einen einzelnen DO reduzieren.
Gruß, Jens
Nachtrag: Schau dir genau den "Chip Select" deines Sensors an. Häufig muss der Pin Low sein, damit die Kommunikation aktiv ist.
Das habe ich bereits getan.
Es kommt die Fehlermeldung dass es ein Fehler mit dem FGPA I/O Knoten gibt, vgl Anhang.
Im angehängten PDF ist ein Auszug aus dem Sensor Datenblatt. Soweit ich das Verstanden habe müsste ja nur das Beispiel angepasst werden und ich könnte dann meine angeforderten Daten Register aus dem Sensor auslesen. Wo liegt der Fehler?
Auf Grund deines Screenshots kann ich nicht sagen, was du jetzt falsch machst.
Gruß, Jens
Der Fehler ist nun behoben, ich habe einen neuen FPGA I/O Cluster gemacht.
Nun taucht ein Fehler im Host VI auf: code -63195 "Read/Write Control in FPGA SPI_Configure.vi".
Siehe Screenshot.
Das Sub VI stammt aus dem Beispiel.
Hier wird der Fehler im Lesen/Schreiben Element produziert. Mit dem Highlight Modus konnte ich keine ungereimtheiten Feststellen die für den Fehler verantwortlich sein könnten...??