Guten Tag
Ich habe den IOWarrier56 Startboard gekauft, um damit einen SSI Sensor anzusprechen und eine eigene Windowsoberfläche zu schreiben.
Es funktioniert eigentlich wunderbar, nur habe ich nicht realisiert, dass die SSI Schnittstelle doch ein wenig anders als die SPI ist.
Das Einlesen der SSI Daten funktioniert nun nur so halb. Hier die Einstellungen, die ich verwende:
------------------------------------------------------------
Init SPI
------------------------------------------------------------
' Enable SPI and configure for use with SSI
Dim SSI_Clock As Integer = 200 ' Clock Speed in kHz
Dim IoWarrior_Clock As Integer = 24000 ' Clock Speed of IOWarrior in kHz
Report(0) = &H8S
Report(1) = &H1S 'Enable SPI
Report(2) = &H6S 'mode: MSB first, CPOL = 1 (high idle), CPHA = 1 (data is driven on the falling edges and sampled on the rising edges)
Report(3) = (IoWarrior_Clock / SSI_Clock) 'clock: 93.75 kHz (slowest rate) Divider of System Clock 24Mhz
Report(4) = &H0S 'flags: enable pull ups (SS must pull up to clear the clock, does not matter since SS is not connected to SSI
I = IowKitWrite(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)
-------------------------------------------------------------
Read Position
------------------------------------------------------------
Dim Status As Integer
Dim Report(64) As Byte
' write SSI 3 bytes (= 24 bits) of dummy data to SPI to trigger read
Report(0) = &H9S ' Report ID for read
Report(1) = &H3S ' count: number of bytes to read
Report(2) = &H0S ' flags: useDRDY = 0, SSactive = 0, ignoreDRDY = 0
Status = IowKitWrite(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)
' read SSI data
Status = IowKitRead(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)
If Status = 0 Then
Debug.Print("attempting read error occured")
Else
'' receive 24 bit value
Dim RawByts(3) As Byte
RawByts(0) = Report(4) ' flip data arround
RawByts(1) = Report(3)
RawByts(2) = Report(2)
'Dim Position As Integer
Read_SSI_SPI = BitConverter.ToInt32(RawByts, 0) ' Convert byts array to integer
End If
------------------------------------------------------------
Das Problem ist nun, dass die SPI Schnittstelle nur 24 bits schickt, anstatt 25.
Also das heisst das Start-Bit, welches dem Sensor mitteilt, dass nun ein Readout startet fehlt.
So wird nach 24bit das Readout beendet obwohl noch ein Bit kommen sollte.
Dieses Bild zeigt den "Gutfall", da das letzte Bit so oder so Null gewesen ist.
Dieses Bild zeigt den "Schlechtfall", da das letzte Bit noch 1 gewesen wäre. Deshalb ist dann mein Positionswert falsch.
Das letzte Bit ist ganz rechts in der Aufzeichnung.
--------------------------------------------------------
Lösung:
- Wie kann ich der SPI Schnittstelle beibringen, dass ein zusätzlicher ClockCycle am Anfang gesendet werden soll?
- Der Sensor ist momentan nicht ganz korrekt verdrahtet, nämlich nur SCK auf Clock+ (von Sensor) und MISO auf Data+ (von Sensor).
- Wie kann ich den Clock- per Invertierung vom IoWarrior ausgeben?
- Wie kann ich gleichzeitig den Kanal Data- per digital-in am IoWarrior auslesen?
- Mit diesen Änderungen hätte ich eine vollwertige SSI Schnittstelle.
Vielen Dank für Ihre Hilfe.
Sven Hubacher
SSI mittels SPI ansprechen
Moderator: Guido Körber
SSI mittels SPI ansprechen
Last edited by svenhu on Tue May 14, 2019 4:17 pm, edited 1 time in total.
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: SSI mittels SPI ansprechen
SPI ist nicht dafür ausgelegt beliebige Zahlen von Clocks zu erzeugen, es werden immer Vielfache von 8 verwendet.
Wir haben mit SSI keine Erfahrung, aber nach der Beschreibung in Wikipedia ist das eine auf RS-422 basierende Verbindung. Sie brauchen also entsprechende Treiberbausteine für die Pegelumsetzung.
Was soll Data- an einem Analogeingang?
Wir haben mit SSI keine Erfahrung, aber nach der Beschreibung in Wikipedia ist das eine auf RS-422 basierende Verbindung. Sie brauchen also entsprechende Treiberbausteine für die Pegelumsetzung.
Was soll Data- an einem Analogeingang?
Re: SSI mittels SPI ansprechen
Guten Tag
ok, kennen Sie einen solchen Treiberbaustein? Können Sie mir einen Hersteller empfehlen?
Data- ist, sofern ich alles richtig verstanden habe, das invertierte Signal von Data+, damit könnte man differentiell messen.
ok, kennen Sie einen solchen Treiberbaustein? Können Sie mir einen Hersteller empfehlen?
Data- ist, sofern ich alles richtig verstanden habe, das invertierte Signal von Data+, damit könnte man differentiell messen.
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: SSI mittels SPI ansprechen
Das ist ein differenzielles, digitales Signal, da gibt es nichts analog dran zu messen.
Hier sind solche Treiber zu finden:
https://www.st.com/content/st_com/en/se ... cts-page=1
Hier sind solche Treiber zu finden:
https://www.st.com/content/st_com/en/se ... cts-page=1
Re: SSI mittels SPI ansprechen
Danke für denk Link.
Stimmt, das habe ich falsch geschrieben. Meinte natürlich einen digitalen Input. Sorry.
Stimmt, das habe ich falsch geschrieben. Meinte natürlich einen digitalen Input. Sorry.
Re: SSI mittels SPI ansprechen
Moin,
ist zwar schon lange her, aber in dieser Application Note wird alles beantwortet.
Einfach ein Byte mehr übertragen.
Mike
ist zwar schon lange her, aber in dieser Application Note wird alles beantwortet.
Einfach ein Byte mehr übertragen.
Mike