/DRDY Timeout?

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

/DRDY Timeout?

Post by Franz Peter Zantis »

Bei der Übertragung per SPI halte ich den IO-Warrior56 über das /DRDY-Signal in Warteposition. Insgesamt sollen 32 Byte (16 16-Bit-Integerwerte) übertragen werden. Das funktioniert meistens. Der Warrior erhält den Befehl die Werte zu lesen. Damit geht die CS-Leitung (Pin 5.1) auf low. Sonst passiert noch nichts, denn /DRDY ist auf high. Sobald /DRDY auf low geht werden die 16 Integer sauber übertragen. Leider nicht immer. Manchmal springt CS (Pin5.1) ohne erkennbaren Grund auf high und die Übertragung stoppt. Damit gerät das Übertragungsgefüge aus dem Takt, denn /DRDY bleibt nun auf low, denn es wurden noch nicht 16 Werte übertragen. Die fehlenden Werte werden sofort übertragen, wenn CS wieder auf low geht. Aber diese werden dann im Empfängerprogramm falsch ausgewertet.
Ich habe zwei Bilder angehängt.
Nun meine Frage: gibt es für /DRDY so etwas wie ein Timeout, was zur Folge hat, dass CS auf high springt? Oder welche Ursache könnte es noch haben?
Attachments
Ab und zu springt CS auf high, bevor alle 16 Werte übertragen wurden. Dann gerät die Übertragung aus dem Rhytmus.
Ab und zu springt CS auf high, bevor alle 16 Werte übertragen wurden. Dann gerät die Übertragung aus dem Rhytmus.
Fehler.gif (53.49 KiB) Viewed 9629 times
Es ist zu erkennen, dass CS meistens (die beiden rechten Bildteile) längst auf low ist, ehe /DRDY auf low geht und die Übertragung zulässt (und kontrolliert). Nur manchmal (links im Bild) ist /DRDY bereits auf low, ehe CS auf low geht. In allen diesen Fällen werden 16 16-Bit-Integer sauber übertragen.
Es ist zu erkennen, dass CS meistens (die beiden rechten Bildteile) längst auf low ist, ehe /DRDY auf low geht und die Übertragung zulässt (und kontrolliert). Nur manchmal (links im Bild) ist /DRDY bereits auf low, ehe CS auf low geht. In allen diesen Fällen werden 16 16-Bit-Integer sauber übertragen.
alles.OK.gif (31.56 KiB) Viewed 9629 times
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: /DRDY Timeout?

Post by Guido Körber »

/DRDY hat keinen Timeout, damit kann man den IOW56 praktisch beliebig blockieren.

Nicht ganz klar ist bei den Bildern welches Signal jetzt welches ist?
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: /DRDY Timeout?

Post by Franz Peter Zantis »

Rot ist das SPI-Taktsignal
Blau ist CS bzw. /SS
Gelb ist /DRDY
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: /DRDY Timeout?

Post by Guido Körber »

Und welches Bild ist jetzt das bei dem der Fehler auftritt und wie sehen die Befehle zum IO-Warrior aus?
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: /DRDY Timeout?

Post by Franz Peter Zantis »

Beim oberen Bild springt CS (bzw. /SS) auf high noch bevor alle 16 Werte übertragen wurden.
Hier die Hauptsub des Programms:

Private Sub current_measurement()
Dim lret As Integer = 0
Dim lvaluesperSPITransfer As Int16 = 24
Dim lcd As Integer = 0
Dim lshift As Integer = 256

w56init(0) = &H8 'initialisation of SPI by sending a report with ID8
w56init(1) = &H1 'enable SPI
w56init(2) = &H4 'mode MSB first, /CPOL, CPHA=1, CKPH=0; for communication with MSP430F2013
w56init(3) = 23 '24 MHz/(1+23)=1MHz
w56init(4) = 128 'Pullups enabled = 0; Pullups disabled = 128 --> to connect with 3.6-V-logic (MSP430)
lret = IowKitWrite(IOhandle, 1, w56init(0), 64)

Do
w56SPIdata(0) = &H9 'indicator for sending via SPI
w56SPIdata(1) = CByte(lvaluesperSPITransfer * 2) 'number of Byte to send/write (24 16-Bit-Words results to 32 Byte)
w56SPIdata(2) = &H80 'Flags: do use handshake (/DRDY)
'#catch SPI-Data from MSP430F2013
lret = IowKitWrite(IOhandle, 1, w56SPIdata(0), 64)
lret = IowKitRead(IOhandle, 1, w56SPIdata(0), 64)


'##############################################################
'#### Getting the data and saveing into the array ####
'##############################################################
For lcd = 0 To lvaluesperSPITransfer - 1
datenarray2(cnt) = ((w56SPIdata(2 * lcd + 2) * lshift + w56SPIdata(2 * lcd + 3)) - offset)
If endflag = True Then
Exit For
End If

''FFT-Berechnung ###########################################################
fftcnt = fftcnt + 1 'Alle "4 * samplerate" Sekunden erfolgt Aufruf

If fftcnt > (samplerate * 876) Then
Timer2.Enabled = True 'Im Timer wird die FFT berechnet
End If

'Zeitsignal (Sekunde)######################################################
zeige()
cnt = cnt + 1 'Pointer für Datenarray
Next lcd

'##############################################################
'#### Innere Schleife Ende ####
'##############################################################


Application.DoEvents()

'Speichern: Wenn aktueller Sekundenstand = eingestelltem Sekundenstand, dann:
If se = endse Then
speichern()
endflag = True
End If

Loop While endflag = False

'##############################################################
'#### Äußere Schleife Ende ####
'##############################################################

Label5.BackColor = Color.DarkRed 'Rotes Recording-Licht ausschalten
End Sub
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: /DRDY Timeout?

Post by Guido Körber »

Wie sieht die Antwort des IOW56 aus, wenn dieser Fehler auftritt? Meldet der die volle Anzahl an Bytes zurück und wenn ja, was steht in den fehlerhaften drin?
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: /DRDY Timeout?

Post by Franz Peter Zantis »

Ja, es werden immer 64 Byte gemdeldet, die übertragen wurden. Die Inhalte prüfe ich noch.
Es scheint so zu sein, dass, wenn Windows stark beschäftigt ist bzw. ich in der Schleife mit dem SPI-Lesebefehl noch andere Berechnungen einbaue, das Problem schlimmer wird.
Aber es gibt doch Lösungen, bei denen viel größere Datenmengen übertragen werden. Wie macht man das dann?
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: /DRDY Timeout?

Post by Christoph Jung »

Wie sieht denn der Aufbau des Ganzen aus?
Weil Berechnungen oder Windows beim Auslesen keine auswirkungen haben sollte. Jedenfalls nicht solche, dass störungen auf Leitungen eintreten.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: /DRDY Timeout?

Post by Franz Peter Zantis »

Ein Mikrocontroller (MSP430F2013) arbeitet als 16-Bit-ADU und sammelt 16 16-Bit-Werte. Der IO-Warrior56 hat erst mal nur die Aufgabe die Werte abzuholen. Er wird jedoch über /DRDY vom Mikrocontroller festgehalten. Sobald der Mikrocontroller 16 Werte bereit hat gibt er /DRDY für zwei Byte frei und hälte den Warrior dann wieder fest. Dann lädt der µC den nächsten der 16 Werte in den SPI-Register und gibt /DRDY wieder für zwei Byte frei. Sind alle 16 Werte durch, hält der µC über /DRDY den Warrior wieder fest bis die nächsten 16 Werte zur Verfügung stehen.
Anbei das Schaltbild.
Attachments
TargettTIFF.gif
TargettTIFF.gif (423.84 KiB) Viewed 9479 times
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: /DRDY Timeout?

Post by Guido Körber »

Wenn ich das richtig sehe ist da kein Pull-Up an /DRDY, obwohl die Pullups abgeschaltet werden?

Was ist das für ein Jumper in der Stromversorgung?
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: /DRDY Timeout?

Post by Franz Peter Zantis »

Das /DRDY-Signal wird vom Mikrocontroller vorgegeben (0 bzw. 3,6V).
Der Jumper K1 erlaubt die Stromversorgung über USB oder über einen externen Akku.
Der Jumper K2 ist nur für den Mikrocontroller interessant. Wenn er programmiert wird, dann kann er durch Umstecken des Jumpers K2 vom Programmieradapter versorgt werden.
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: /DRDY Timeout?

Post by Guido Körber »

Haben Sie von dem Aufbau ein Bild mit etwas Details?
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: /DRDY Timeout?

Post by Franz Peter Zantis »

Welche Details genau meinen Sie? Das Schaltbild habe ich ins Forum gestellt; auch einige Diagramme.
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: /DRDY Timeout?

Post by Guido Körber »

Ich meine den eigentlichen Aufbau. Haben Sie dazu einen Platine gemacht? Gibt es davon ein Foto?
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: /DRDY Timeout?

Post by Franz Peter Zantis »

Anbei ein Foto.
Attachments
Der linke Teil (links von den blauen Drahtbrücken) ist rein analog und hat mit dem Zusammenspiel IO-Warrior - ADU nichts zu tun. Der ADU (Mikrocontroller) befindet sich oben links neben dem IO-Warrior.
Der linke Teil (links von den blauen Drahtbrücken) ist rein analog und hat mit dem Zusammenspiel IO-Warrior - ADU nichts zu tun. Der ADU (Mikrocontroller) befindet sich oben links neben dem IO-Warrior.
Platinenfoto.jpg (196.33 KiB) Viewed 9316 times
Post Reply