Ein Warrior56 soll mit einem ADU zusammenarbeiten. Der ADU benötigt für eine Conversion (Zeit für die Sampleabnahme und Erstellung des Digitalwertes) 22 µs. Während dieser Zeit wird ein Pin des ADU auf High gesetzt. Ich möchte nun jedesmal, wenn der Pin des ADU von high nach low gesprungen ist, den Samplewert abholen. Dazu muss der Warrior den 22µs kurzen High-Impuls erkennen. Ich habe dies in einer Schleife versucht, wobei die Werte sofort in eine Textdatei geschrieben werden inklusive einer Zeitmarke:
Do
ret = IowKitRead(IOHandle, 0, data(0), 8)
If IsBitSet(data(3), 0) Then 'ist das STATUS-Bit gesetzt?
'Statusbit prüfen: falls die conversation gerade läuft: keinen Wert übernehmen
conversionrunning = True
Else
If conversionrunning Then 'war das STATUS-Bit vorher gesetzt?
'bytes übernehmen und dabei negieren und dann zusammenfassen
lowbyte = (Not data(1))
highbyte = (Not data(2))
sampleresult = highbyte * 256 + lowbyte
objTextWriter.WriteLine(sampleresult & " " & Now.ToString("ss.fff"))
'das Status-Bit ist jetzt nicht gesetzt: diesen Zustand sichern
conversionrunning = False
End If
End If
Loop
Eigentlich müssen die Ergebnisse nun im Takt des ADU (in diesem Fall mit einem konstanten Abstand von 5 ms) erfaßt und in die Datei geschrieben werden. Leider ist das nicht der Fall. Es gibt immer wieder "Aussetzer". Es sieht so aus, als würde der Warrior den schmalen Conversion-Puls von 22 µs manchmal übersehen.
Wie schnell bemerkt ein Warrior eine Pinänderung
Moderator: Guido Körber
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Wie schnell bemerkt ein Warrior eine Pinänderung
Na da könnte ich fast unterschreiben, dass der IO-Warrior diese Impulse in den meisten Fällen nicht übertragen kann.
Die Paketrate der IOW56 beträgt 1000 pro Sekunde. Wozu muss man da eine Wartezeit im Mikrosekundenbereich gezielt abfragen? Es ist gar nicht möglich die Abfrage der Daten zu schnell zu machen.
Die Paketrate der IOW56 beträgt 1000 pro Sekunde. Wozu muss man da eine Wartezeit im Mikrosekundenbereich gezielt abfragen? Es ist gar nicht möglich die Abfrage der Daten zu schnell zu machen.