Über den SPI-Bus sollen Daten erfaßt werden. Das Problem ist die Synchronisierung. Ein Mikrocontroller gibt an einem Pin durch ein High-Signal bekannt, wenn Daten zur Verfügung stehen. Wenn ich diesen Pin mit dem IO-Warrior56 abfrage und dann über SPI die Daten abhole, dann kann dies maximal alle 40 ms erfolgen. So lange dauert es nämlich, bis das der Warrior die IO-Pins eingelesen hat und dann die Daten über SPI angefordert hat. Das ist natürlich viel zu langsam.
Nehme ich die Abfrage der Pins raus und nehme die Daten ohne Synchronisation entgegen, indem in einer Schleife nur per SPI eingelesen wird, dann kann dies alle 2 ms erfolgen. Das sind alles sehr ernüchternde Werte. Ohne Synchronisation kann es aber sein, dass die Daten gerade dann vom Warrior über SPI gelesen werden, wenn der Mikrocontroller in seinem SPI-Register die Daten einlädt. Diese Daten wären dann unbrauchbar.
Mache ich etwas zu umständlich oder falsch?
Hier der Code
Do
'test if the value can be taken; before data via SPI can be taken, Pin 4.7 has to be checked
'data(5) = 128
data(0) = 0 'in simple mode always 0
ret = IowKitRead(IOhandle, 0, data(0), 8)
If IsBitSet(data(5), 7) Then
'Initialisation IO-Warrior in special mode
ldata(0) = &H9 'indicator for sending via SPI
ldata(1) = &H2 'number of data to send (2 Bytes)
ldata(2) = &H0 'Flags
I = IowKitWrite(IOhandle, 1, setWarrior(0), 64)
'write 2 bytes of dummy data to SPI to trigger read
I = IowKitWrite(IOhandle, 1, ldata(0), 64) 'write is necessary to get values via SPI
I = IowKitRead(IOhandle, 1, ldata(0), 64)
If ldata(1) = 2 Then
'build 16 bit value
I = (ldata(2) * 256 + ldata(3))
'Debug.Print(CStr(I))
If I > max Then
max = I
'Me.TxtBxMaxVal.Text = CStr(max)
End If
If min = 0 Or I < min Then
min = I
'Me.TxtBxMinVal.Text = CStr(min)
End If
'Me.Button1.Text = CStr(I)
'objTextWriter.WriteLine(CStr(I))
End If
End If
Application.DoEvents()
If flag = True Then
Exit Do
End If
Loop
schnelle Datenerfassung, IO-Warrior56
Moderator: Guido Körber
-
- Posts: 97
- Joined: Wed Aug 03, 2011 3:46 pm
- Contact:
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: schnelle Datenerfassung, IO-Warrior56
Woher haben Sie denn das mit den 40ms an den IO-Pins?
Die IO-Pins können genau so schnell ausgelesen werden wie alles andere.
Die IO-Pins können genau so schnell ausgelesen werden wie alles andere.