Hallo!
Nachdem ich die wichtigsten Fragen der elektronik endlich verstanden habe, habe ich mir das IOW 40 Starterkit bestellt. Der Zusammenbau ging trotz nicht sehr tauglichem Werkzeug merkwürdigerweise sehr einfach (war meine erste Platine). Das Testprogramm lief auch sofort durch -da war ich schon mal begeistert.
Nun fange ich an meine Test´s zu machen - ich stoße aber auf eine Sache die ich nicht verstehe.
Gleich vorweg, ich frage den IOW über IowKitReadNonBlocking im 100ms-Takt ab. Als Umgebung nutze ich "good old" VB6.
Ich schalte die mittleren beiden LED´s ab (Hex 24) und betätige den Mikroschalter. Daraufhin erhalte ich auf Data(1), wie erwartet, 254 - auf Data(4) aber 255. Danach setze ich den Schalter mit 255 zurück und erhalte ein weiteres mal 255 auf Data(4). Erst beim 3. mal lesen erhalte ich den korrekten Wert, also z.B. 24 vom IOW.
Beim betätigen des Mikroschalters bzw. nach dem loslassen bekomme ich als Rückgabe auf IowKitReadNonBlocking eine 5, was ja eigentlich stimmt, die LED´s werden aber nur korrekt dargestellt wenn der Wert 0 ist.
Habe ich da gerade einen Denkfehler, oder wie frage ich den Status der Portpins korrekt ab?
Gruß
Matthias
IOW 40 Starterkit -> Status der LED wenn Taster betätigt.
Moderator: Guido Körber
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: IOW 40 Starterkit -> Status der LED wenn Taster betätigt.
Das ist jetzt für mich nicht wirklich nachzuvollziehen.
Auf jeden Fall ist es Quatsch "den Schalter mit 255 zurücksetzen", der IO-Warrior liefert den Status der IO-Ports, wenn der Taster noch gedrückt ist, dann kommt da auch immer noch eine Null für den Portpin raus.
Auf jeden Fall ist es Quatsch "den Schalter mit 255 zurücksetzen", der IO-Warrior liefert den Status der IO-Ports, wenn der Taster noch gedrückt ist, dann kommt da auch immer noch eine Null für den Portpin raus.
Re: IOW 40 Starterkit -> Status der LED wenn Taster betätigt.
Ok, Schalter zurücksetzen war auch selten doof ausgedrückt. Wenn ich die LED´s an Port 3 ändere, dann gebe ich den anderen 3 Ports 255.
Ich hole mal etwas weiter aus, um den Rest erklären zu können.
Ich rufe die dll in einem Benutzersteuerelement auf. Hier habe ich einmal einen Event "Click()" angelegt, der mir die jeweiligen Ports und Pins übergibt wenn ein Schalter gedrückt wird (das klappt auch sicher) sowie jeweils 32 Shapes für meine Schalter (grün) und meine LED´s (rot).

Im 10ms Takt läuft eine Prozedur durch, die Ports abfragt.
Wenn IowKitReadNonBlocking 5 zurückgibt geht es um einen Schalter, bei 0 um die LED´s (bei 5 werden die LED´s immer als "alle-an" angezeigt, egal wie sie stehen, bei 0 bekomme ich den richtigen wert...).
Das funktioniert solange, wie ich ständig etwas an den Port 03 sende. In meinem Beispiel ist es eine einfache Stoppuhr.
Im Leerlauf wechseln die LED´s 4 und 32 im 500ms Takt, wenn der 1. Knopf (hängt an 2/4) betätigt wird startet die Uhr und es wechselt im Sekundentakt zwischen 1, 8, 16 und 8, 16, 128. Bis dahin klappt es auch. Wenn ich nun nochmal den Knopf drücke pausiert die Uhr und ich schalte einmal die LEDs 8 und 16 - ohne Takt. Die LED´s schalten auch, aber die Anzeige bleibt tot weil der Port 3 in dem Moment 255 ausgibt. Das verstehe ich nicht. Bekomme ich von den LED´s kein ständiges Signal?
Gruß
Matthias
Ich hole mal etwas weiter aus, um den Rest erklären zu können.
Ich rufe die dll in einem Benutzersteuerelement auf. Hier habe ich einmal einen Event "Click()" angelegt, der mir die jeweiligen Ports und Pins übergibt wenn ein Schalter gedrückt wird (das klappt auch sicher) sowie jeweils 32 Shapes für meine Schalter (grün) und meine LED´s (rot).

Im 10ms Takt läuft eine Prozedur durch, die Ports abfragt.
Wenn IowKitReadNonBlocking 5 zurückgibt geht es um einen Schalter, bei 0 um die LED´s (bei 5 werden die LED´s immer als "alle-an" angezeigt, egal wie sie stehen, bei 0 bekomme ich den richtigen wert...).
Das funktioniert solange, wie ich ständig etwas an den Port 03 sende. In meinem Beispiel ist es eine einfache Stoppuhr.
Im Leerlauf wechseln die LED´s 4 und 32 im 500ms Takt, wenn der 1. Knopf (hängt an 2/4) betätigt wird startet die Uhr und es wechselt im Sekundentakt zwischen 1, 8, 16 und 8, 16, 128. Bis dahin klappt es auch. Wenn ich nun nochmal den Knopf drücke pausiert die Uhr und ich schalte einmal die LEDs 8 und 16 - ohne Takt. Die LED´s schalten auch, aber die Anzeige bleibt tot weil der Port 3 in dem Moment 255 ausgibt. Das verstehe ich nicht. Bekomme ich von den LED´s kein ständiges Signal?
Gruß
Matthias
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: IOW 40 Starterkit -> Status der LED wenn Taster betätigt.
5? 0? Ständiges Signal von den LEDs?
Die Erklärung verstehe ich zwar nicht, aber ih glaube da zwischen den Zeilen gelesen zu haben, dass Sie die Daten nehmen die vom IO-Warrior gesendet werden, darauf eine Bitmanipulation machen und dann zurückschreiben?
Das ist ein grundsätzlich falsches Vorgehen, da der IO-Warrior keine Trennung zwischen Eingang und Ausgang macht, Sie damit also einen Eingang der auf Null ist zurückschreiben als Ausgang der auf Null treibt. Generell immer den Ausgabestatus speichern und auf diesem die Änderungen machen und zurückschreiben.
Warum die LEDs ein High zurück liefern kann die Suchfunktion im Forum erklären.
Die Erklärung verstehe ich zwar nicht, aber ih glaube da zwischen den Zeilen gelesen zu haben, dass Sie die Daten nehmen die vom IO-Warrior gesendet werden, darauf eine Bitmanipulation machen und dann zurückschreiben?
Das ist ein grundsätzlich falsches Vorgehen, da der IO-Warrior keine Trennung zwischen Eingang und Ausgang macht, Sie damit also einen Eingang der auf Null ist zurückschreiben als Ausgang der auf Null treibt. Generell immer den Ausgabestatus speichern und auf diesem die Änderungen machen und zurückschreiben.
Warum die LEDs ein High zurück liefern kann die Suchfunktion im Forum erklären.
Re: IOW 40 Starterkit -> Status der LED wenn Taster betätigt.
Ok, ich denke ich habe einen Beitrag gefunden, der sich mit dem Tema beschäftigt...
In http://www.codemercs.com/phpBB2/viewtop ... t=LED+high steht es ja ähnlich.
Das andere haben sie richtig erkannt ;-). Ich werde diesbezüglich die Strategie ändern.
Vielen Dank
In http://www.codemercs.com/phpBB2/viewtop ... t=LED+high steht es ja ähnlich.
Das andere haben sie richtig erkannt ;-). Ich werde diesbezüglich die Strategie ändern.
Vielen Dank