tastermatrix IOW40
Moderator: Guido Körber
tastermatrix IOW40
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
Bin leider VB´ler. aber damit muss es ja auch funktioniren. (sind ganz einfache taster)
MfG
Rolf
"Wer lesen kann, ist klar im Vorteil" ;-)
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
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
hm........
<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
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
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
Aber in der Lese-Routine gibt es erstens unnötige Write-Befehle und zweitens liest du von der falschen Pipe:
Irgendwie klar geworden??
Eberhard
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
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
danke
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
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
Danke Eberhard, dass Du für mich eingesprungen bist ;-)
Noch ein paar Anmerkungen von mir:
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
Noch ein paar Anmerkungen von mir:
Ich glaube, Rolf hat zwei IO-Warrior mit je einer Matrix. Die beiden Aufrufe unterscheiden sich im Handle und sind damit korrekt.Zuerrst mal braucht der Modus TastaturMatrix nur einmal eingeschaltet zu werden.
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).Aber in der Lese-Routine gibt es erstens unnötige Write-Befehle ...
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
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.
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.
Hallo Thomas,
Schönen Tag noch
Eberhard
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.)towaibw wrote: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üssenAber in der Lese-Routine gibt es erstens unnötige Write-Befehle ...
Thomas
Schönen Tag noch
Eberhard
-
- Posts: 389
- Joined: Sun Feb 13, 2005 1:22 pm
- Location: Gerblingerode / Duderstadt
- Contact:
Hallo zusammen,
Abfrage (Testen) der Tastatur-Matrix, ist ein Bestandteil vom Testprogramm All-in-One. (IOW40 und IOW56)
ALL-in-ONE Testprogramm Version 2-6-008
Im Testprogramm wird die Abfrage gepollt.
Abfrage (Testen) der Tastatur-Matrix, ist ein Bestandteil vom Testprogramm All-in-One. (IOW40 und IOW56)
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.
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Genau das haben wir uns bei der Funktion gedacht :)wayoda wrote:Ich habe ich gar nicht gewußt, dass man so den Ist-Zustand abfragen kann!
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.
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..................
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..................
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact: