tastermatrix IOW40

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

Moderator: Guido Körber

Post Reply
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

tastermatrix IOW40

Post by rolf55 »

es gibt dinge für die bin ich zu blöd! Wie zum Geier lese ich die Matrix aus und bringe die werte in varablen. Bei mir bleibt die ganze kiste immer stehen.
Bin leider VB´ler. aber damit muss es ja auch funktioniren. (sind ganz einfache taster)
MfG
Rolf
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

"Wer lesen kann, ist klar im Vorteil" ;-)

Post by towaibw »

Einfach mal in das Datenblatt schauen. Da muß man nur lesen können :-).
Habe es jetzt nicht vor mir liegen aber wenn ich mich recht erinnere, gibt es zwei spezielle Reports, nach denen man jeweils ein Report zurück bekommt, in dem dann die Matrixdaten stehen. Und vorher natürlich die entsprechende Special Mode Function aktivieren.

Ich würde vorschlagen, Datenblatt studieren und dann gezielt noch einmal hier nachfragen, wenn etwas im Unklaren bleibt ;-)

Thomas
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

hm........

Post by rolf55 »

<Da muß man nur lesen können :-). >
Kann ich! Ehrlich! Wirklich!
Aber, die Doidenmatrix mit 2 Iow und meine 3 Spin´s funktioniren ja auch. Nur mit den Schaltern gehts nicht.Es ist bestimmt ein einfacher Denkfehler von mir.
Also:
form load()
. . . . . . . . . . . . .....
initdata(0) = &H18
initdata(1) = 1
Res = IowKitWrite(iowHandles(0), IOW_PIPE_SPECIAL_MODE, initdata(0), 8)
Res = IowKitWrite(iowHandles(1), IOW_PIPE_SPECIAL_MODE, initdata(0), 8)
End Sub

Private Sub Timer3_Timer()
Dim Res As Long
Dim initdata(5) As Byte
dim i
initdata(0) = &H19
initdata(1) = 1
Res = IowKitWrite(iowHandles(0), IOW_PIPE_SPECIAL_MODE, initdata(0), 5)
Res = IowKitRead(iowHandles(0), 0, data(0), 5)
If Res <> N Then
status.Caption = "Read from IOW wrong?"
Else
' nur um erstmal zu sehen was vom IOW kommt
Text1.Text = Hex$(data(1))
Text2.Text = Hex$(data(2))
Text3.Text = Hex$(data(3))
Text4.Text = Hex$(data(4))
End If
Res = IowKitWrite(iowHandles(0), IOW_PIPE_SPECIAL_MODE, initdata(0), 5)
Res = IowKitRead(iowHandles(0), 0, data(0), 5)
If Res <> N Then
status.Caption = "Read from IOW wrong?"
Else
' nur um erstmal zu sehen was vom IOW kommt
Text5.Text = Hex$(data(1))
Text6.Text = Hex$(data(2))
Text7.Text = Hex$(data(3))
Text8.Text = Hex$(data(4))
End If

status.Caption = "Read from IOW complete"
' jetzt das ganze nochmal für den 2´ten IOW nur in die text felder 9 - 16

End Sub
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

Hallo,
ich glaube da gibt es mehrere Probleme:

Zuerrst mal braucht der Modus TastaturMatrix nur einmal eingeschaltet zu werden. Wenn das geschehen ist, erzeugt der IOW die Datenpakete für Schalteränderungen selbstständig. Dein Programm muß sie nur noch lesen (jeweils 2 Reports von der SpecialMode-Pipe. )
Das ganze schreibe ich ohne irgendwelche Ahnung von VB zu haben!
Die init-Routine sollte ok sein

Code: Select all

form load() 
. . . . . . . . . . . . ..... 
initdata(0) = &H18 
initdata(1) = 1 
Res = IowKitWrite(iowHandles(0), IOW_PIPE_SPECIAL_MODE, initdata(0), 8) 
Res = IowKitWrite(iowHandles(1), IOW_PIPE_SPECIAL_MODE, initdata(0), 8) 
End Sub 
Aber in der Lese-Routine gibt es erstens unnötige Write-Befehle und zweitens liest du von der falschen Pipe:

Code: Select all

Private Sub Timer3_Timer() 
Dim Res As Long 
Dim initdata(5) As Byte 
dim i 
//bis hier wars ok, aber die nächsten 3 Zeilen braucht man nicht denn
//die KeyMatrix ist ja schon eingeschaltet
//initdata(0) = &H19 
//initdata(1) = 1 
//Res = IowKitWrite(iowHandles(0), IOW_PIPE_SPECIAL_MODE, initdata(0), 5) 

//jetzt muß gelesen werden, aber von der Richtigen pipe und 8 bytes nicht 5
// Falsch : Res = IowKitRead(iowHandles(0), 0, data(0), 5) 
Res = IowKitRead(iowHandles(0), IOW_PIPE_SPECIAL_MODE, data(0), 8) 
If Res <> N Then 
 status.Caption = "Read from IOW wrong?" 
Else 
 ' nur um erstmal zu sehen was vom IOW kommt 
 Text1.Text = Hex$(data(1)) 
 Text2.Text = Hex$(data(2)) 
 Text3.Text = Hex$(data(3)) 
 Text4.Text = Hex$(data(4)) 
//die nächsten 4 Bytes auch anschauen
End If 
//und jetzt gleich nochmal
//Falsch Res = IowKitRead(iowHandles(0), 0, data(0), 5) 
Res = IowKitRead(iowHandles(0), IOW_PIPE_SPECIAL_MODE, data(0), 8) 
If Res <> N Then 
 status.Caption = "Read from IOW wrong?" 
Else 
 ' nur um erstmal zu sehen was vom IOW kommt 
 Text5.Text = Hex$(data(1)) 
 Text6.Text = Hex$(data(2)) 
 Text7.Text = Hex$(data(3)) 
 Text8.Text = Hex$(data(4)) 
End If 


Irgendwie klar geworden??

Eberhard
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

danke

Post by rolf55 »

ja! Vielen Dank. Hat mr sehr geholfen. Das einfache ist oft schwer zu erkennen.
konnte mir nicht vorstellen das der Chip zwei Reports ohne Anforderung ausgibt. Das macht die Sache natürlich komplizierter, weil einfach die Kontrolle fehlt, was wann wo passiert. Aber jetzt gehts erstmal so einigermaßen.

Also Danke nochmal
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

Danke Eberhard, dass Du für mich eingesprungen bist ;-)

Noch ein paar Anmerkungen von mir:
Zuerrst mal braucht der Modus TastaturMatrix nur einmal eingeschaltet zu werden.
Ich glaube, Rolf hat zwei IO-Warrior mit je einer Matrix. Die beiden Aufrufe unterscheiden sich im Handle und sind damit korrekt.
Aber in der Lese-Routine gibt es erstens unnötige Write-Befehle ...
Das würde ich so nicht stehen lassen. Richtig ist, das sie nicht unbedingt nötig sind, da bei Änderungen in der Matrix die entsprechenden Reports automatisch erzeugt werden und nur gelesen werden brauchen. Notwendig sind sie auf jeden Fall, wenn man den Ist-Zustand der Matrix abfragen will, ohne erst auf eine Statusänderung warten zu müssen (das ist zumindest einmal beim Programmstart zu empfehlen). Sie haben weiterhin den Vorteil, das die dazugehörigen Reads garantiert nicht bis zur nächsten Statusänderung blockieren werden. Mit dieser Methode könnte man z.B. auch in einer Schleife zyklisch abfragen, ob eine Taste immer noch gedrückt ist (und so durch Zykluszählung eine recht einfache Ermittlung der Dauer eines Tastendruckes möglich ist).

Ich würde sagen, es hängt einfach von der Anwendung ab, ob sie sinnvoll sind oder nicht. Und ich denke, CodeMercs hat sich auch etwas dabei gedacht, diese Reports zu implementieren ;-).

Thomas
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

Post by rolf55 »

Ich glaube, Rolf hat zwei IO-Warrior mit je einer Matrix

Genau so ist es. Eigentlich werden es 3 IOW und 3 Spin Warrior.
Wenn es fertig ist, sieht es so aus
http://simjet.si.funpic.de/
Eigentlich funktioniert es schon, aber so richtig fertig ist man ja nie.
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

Hallo Thomas,
towaibw wrote:
Aber in der Lese-Routine gibt es erstens unnötige Write-Befehle ...
Das würde ich so nicht stehen lassen. Richtig ist, das sie nicht unbedingt nötig sind, da bei Änderungen in der Matrix die entsprechenden Reports automatisch erzeugt werden und nur gelesen werden brauchen. Notwendig sind sie auf jeden Fall, wenn man den Ist-Zustand der Matrix abfragen will, ohne erst auf eine Statusänderung warten zu müssen
Thomas
Ich habe ich gar nicht gewußt, dass man so den Ist-Zustand abfragen kann! Danke für die Info. (Ich habe nur einmal ganz kurz die Funktion beim IOW56-Testen benutzt, ansonsten keine Erfharung damit.)

Schönen Tag noch
Eberhard
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Post by friend-of-rq »

Hallo zusammen,

Abfrage (Testen) der Tastatur-Matrix, ist ein Bestandteil vom Testprogramm All-in-One. (IOW40 und IOW56)

Image

ALL-in-ONE Testprogramm Version 2-6-008

Im Testprogramm wird die Abfrage gepollt.
Last edited by friend-of-rq on Sat Dec 20, 2008 2:30 am, edited 1 time in total.
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

wayoda wrote:Ich habe ich gar nicht gewußt, dass man so den Ist-Zustand abfragen kann!
Genau das haben wir uns bei der Funktion gedacht :)

Alle anderen Special Mode Functions haben keinen Status der durch externe Ereginisse bestimmt wird (z.B. IIC oder SPI haben nur dann Daten wenn vorher ein Befehl geschickt wird). Aber sowohl die einfache I/O Funktion, als auch die Tastenmatrix haben einen extern bestimmten Status, also braucht man auch eine Möglichkeit diesen abzurufen.
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

Bekomme ich jetzt eine 1? ;-)
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

towaibw wrote:Bekomme ich jetzt eine 1? ;-)
Nee, aber ich muß nachsitzen weil ich das Datenblatt nicht richtig gelesen habe ;-)
Eberhard
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

Post by rolf55 »

Ich hab das Blatt inzwischen 30 mal gelesen. Und komme zu keinen Ergebnis.
Das Auslesen der Reports &H19 und &H1A geht problemlos. (dank eurer Hilfe)
Aber dann habe ich laut Datenblatt die werte für Spalten Y0 bis Y7.
Wo sind nun aber die werte für X0 bis X7 zu finden?
Vielleicht liegts ja am Alter..................
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

In den Bytes der Spalten?
rolf55
Posts: 21
Joined: Tue May 16, 2006 2:15 pm
Location: Berlin
Contact:

Post by rolf55 »

Bingo!!!
Jetzt hat es auch der dümmste Rolf kapiert.
Jetzt gehts ans Bauen.
danke für die Hilfe!!!
Post Reply