newbie / iow24 - bits lesen / schreiben
Moderator: Guido Körber
newbie / iow24 - bits lesen / schreiben
Hallo Leute, bin das erste mal hier (überhaupt in einem Forum) - als Student an einer nicht-technischer FH soll ich nebst hard- auch noch software zusammen bekommen (hier gibts nichtmal ein labor!)
--
habe iowsample.exe am iow24 starterkit soweit zum laufen gebracht, als dass irgendwie das LED an der platine leuchten kann - im datasheet konnte ich nicht finden was die einzelnen bytes - 1st, 2nd, 3rd, 4th - der "IO-Warrior sample application" unter SDK-windows-samples-samplesIO-VB bedeuten? könnt Ihr mir helfen ?
grundaufgabe: steuern 2er schrittmotore - sie werden über eigene ic´s getrieben, signale pro motor: 1 clocksignal pro schritt und ein richtungssignal 0 od . 1 / dazu eine stellungsüberwachung pro motor mit 3 pins, die je ein signal bekommen wenn der motor links, mitte oder rechts erreicht (poti mit op-komperatorschaltung) / und noch ein ausgang der ein relais steuert - damit wird eine digitalkamera per kabelfernsteuerung ausgelöst
ich habe fast KEINE ahnung vom programmieren, geschweige denn VB, hoffe aber wenn ich mal weiß wie ich ein byte rausschreiben und wie lesen kann, wenn der iow24 ein signal zurücksendet (der stellungsüberwachung), dann sollte ich in der lage sein ein programm zu entwickeln (oder so)
dieses forum und bemerkungen der sample-programme kommen mir sehr hilfreich vor - aber nur wenn man schon weiß worums geht - als anfänger will ich nicht die große aufgabe programmieren, einfache IO funktionen reichen, leider helfen mir die bisherigen beiträge, die ich versuchte zu enchiffieren, nicht weiter - tut mir leid die lange rede aber ich will klar stellen dass man mit mir einfach und klartext reden muss!
(dazu kommt noch ein zeitmangel - habe, samt öst-feiertag, jeden wochentag 18 stunden gearbeitet und weiß nicht wie ich das hier noch machen soll, es wird nur ein absolutes grundprogramm rauskommen, kein schnickschnack - was mir sehr leid tut, den grundsätzlich interessiert mich das hier sehr)
grüße
reinhard geringer / FH-Steyr, österreich
--
habe iowsample.exe am iow24 starterkit soweit zum laufen gebracht, als dass irgendwie das LED an der platine leuchten kann - im datasheet konnte ich nicht finden was die einzelnen bytes - 1st, 2nd, 3rd, 4th - der "IO-Warrior sample application" unter SDK-windows-samples-samplesIO-VB bedeuten? könnt Ihr mir helfen ?
grundaufgabe: steuern 2er schrittmotore - sie werden über eigene ic´s getrieben, signale pro motor: 1 clocksignal pro schritt und ein richtungssignal 0 od . 1 / dazu eine stellungsüberwachung pro motor mit 3 pins, die je ein signal bekommen wenn der motor links, mitte oder rechts erreicht (poti mit op-komperatorschaltung) / und noch ein ausgang der ein relais steuert - damit wird eine digitalkamera per kabelfernsteuerung ausgelöst
ich habe fast KEINE ahnung vom programmieren, geschweige denn VB, hoffe aber wenn ich mal weiß wie ich ein byte rausschreiben und wie lesen kann, wenn der iow24 ein signal zurücksendet (der stellungsüberwachung), dann sollte ich in der lage sein ein programm zu entwickeln (oder so)
dieses forum und bemerkungen der sample-programme kommen mir sehr hilfreich vor - aber nur wenn man schon weiß worums geht - als anfänger will ich nicht die große aufgabe programmieren, einfache IO funktionen reichen, leider helfen mir die bisherigen beiträge, die ich versuchte zu enchiffieren, nicht weiter - tut mir leid die lange rede aber ich will klar stellen dass man mit mir einfach und klartext reden muss!
(dazu kommt noch ein zeitmangel - habe, samt öst-feiertag, jeden wochentag 18 stunden gearbeitet und weiß nicht wie ich das hier noch machen soll, es wird nur ein absolutes grundprogramm rauskommen, kein schnickschnack - was mir sehr leid tut, den grundsätzlich interessiert mich das hier sehr)
grüße
reinhard geringer / FH-Steyr, österreich
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Also grundsätzlich kann man an die IO-Warrior weder einzelne Bits oder Bytes schreieben (ich kann garnicht mehr zählen wie oft ich das geschrieben habe...). Es werden immer alle Portbits gleichzeitig geschrieben oder gelesen weil das nun mal vom Zeitaufwand der Datenübertragung praktisch keinen Unterschied macht.
Also muss man sich merken was man zuletzt an den Chip als Ausgangsdaten gesendet hat und mittels logischer Verknüpfung die jeweiligen Pins ändern. Pins die als Eingang dienen sollen müssen immer mit 1 geschrieben werden.
Also muss man sich merken was man zuletzt an den Chip als Ausgangsdaten gesendet hat und mittels logischer Verknüpfung die jeweiligen Pins ändern. Pins die als Eingang dienen sollen müssen immer mit 1 geschrieben werden.
Hallo Guido
Herzlichsten Dank! deine antwort:
1. man kann keine ports einzeln beschreiben
2. ein eingang muss 1 gesetzt werden um ein eingang zu sein -
wirkt somit jeder port - der 16 ports, die beim 24er als IO dienen können - automatisch als eingang, sobald 1 an ihm steht?
(in der beschreibung steht er prüft jede ms ob sich ein port geändert hat und sendet dann ein datum zurück - wenn ich es so richtig interpretiere)
-------------
Für mich heißt dass, ich muss mich präziser ausdrücken:
ich habe - zu tief in der vergangenheit - einen 8051er mit assambler und später mit C programmiert, rein prinzipiell ist mir das ansprechen einzelner ports durch ansteuern von allen zusammen bekannt - das habe ich unten vorausgesetzt ohne es zu schreiben, tut mir leid
ich sehe ein für mich zumindest lösbares problem darin, abläufe zu schreiben die mir die ports ansprechen, die ich will und wann ich es will
- ich sehe nur nicht wie ich überhaupt einen port anschreibe - bzw alle 16 zusammen - und wie ich auswerte ob sich ein eingang geändert hat (u welcher)
im iowsample.exe kann man 4 bytes setzen und dann dem baustein einen write bzw read befehl geben - doch was schreibt man in diese 4 bytes rein
kann mir vorstellen mit einem byte oder 2 bytes gibt man den befehl was der baustein tun soll und mit den nächsten beiden bytes dann an welchen ports - oder umgekehrt - wie auch immer: was muss man rausschreiben um ports zu setzen? Wie kann man das, was der baustein zurücksendet, wenn sich ein eingang geändert hat auswerten
ich muss erst wissen: wie schreibe ich einen port, bzw alle ports an und wie lese ich einen eingang und dann kann ich mir gedanken um die ausmaskierung und den programmablauf machen
--------------
unser projekt an der FH steyr:
eine digitalkamera wird von schrittmotoren 360° horizontal gedreht und kann auch vertikal geschwenkt werden, diese wird vom programm gesteuert und ausgelöst - sinn: das automatische aufnehmen von fotos für 360° panoramabildern
ich benötige: 5 ausgänge:
1 schrittmotor 1 clock
2 schrittmotor 1 links/rechts
3 schrittmotor 2 clock
4 schrittmotor 2 links/rechts
5 Digitalkamera auslösen
6 eingänge, an denen zwei 10gang-potis über 6 komperatorschaltungen hängen:
potentiometer 1: schrittmotor 1 links/mitte/rechts
potentiometer 2: schrittmotor 2 oben/mitte/unten
natürlich wäre es "schöner" wenn man mit einem poti die stellung der motoren direkt und zu jeder zeit überwachen könnte und nicht nur links/mitte/rechts, doch dazu würde man einen analogeingang benötigen, den der iow24 nicht besitzt
Herzlichsten Dank! deine antwort:
1. man kann keine ports einzeln beschreiben
2. ein eingang muss 1 gesetzt werden um ein eingang zu sein -
wirkt somit jeder port - der 16 ports, die beim 24er als IO dienen können - automatisch als eingang, sobald 1 an ihm steht?
(in der beschreibung steht er prüft jede ms ob sich ein port geändert hat und sendet dann ein datum zurück - wenn ich es so richtig interpretiere)
-------------
Für mich heißt dass, ich muss mich präziser ausdrücken:
ich habe - zu tief in der vergangenheit - einen 8051er mit assambler und später mit C programmiert, rein prinzipiell ist mir das ansprechen einzelner ports durch ansteuern von allen zusammen bekannt - das habe ich unten vorausgesetzt ohne es zu schreiben, tut mir leid
ich sehe ein für mich zumindest lösbares problem darin, abläufe zu schreiben die mir die ports ansprechen, die ich will und wann ich es will
- ich sehe nur nicht wie ich überhaupt einen port anschreibe - bzw alle 16 zusammen - und wie ich auswerte ob sich ein eingang geändert hat (u welcher)
im iowsample.exe kann man 4 bytes setzen und dann dem baustein einen write bzw read befehl geben - doch was schreibt man in diese 4 bytes rein
kann mir vorstellen mit einem byte oder 2 bytes gibt man den befehl was der baustein tun soll und mit den nächsten beiden bytes dann an welchen ports - oder umgekehrt - wie auch immer: was muss man rausschreiben um ports zu setzen? Wie kann man das, was der baustein zurücksendet, wenn sich ein eingang geändert hat auswerten
ich muss erst wissen: wie schreibe ich einen port, bzw alle ports an und wie lese ich einen eingang und dann kann ich mir gedanken um die ausmaskierung und den programmablauf machen
--------------
unser projekt an der FH steyr:
eine digitalkamera wird von schrittmotoren 360° horizontal gedreht und kann auch vertikal geschwenkt werden, diese wird vom programm gesteuert und ausgelöst - sinn: das automatische aufnehmen von fotos für 360° panoramabildern
ich benötige: 5 ausgänge:
1 schrittmotor 1 clock
2 schrittmotor 1 links/rechts
3 schrittmotor 2 clock
4 schrittmotor 2 links/rechts
5 Digitalkamera auslösen
6 eingänge, an denen zwei 10gang-potis über 6 komperatorschaltungen hängen:
potentiometer 1: schrittmotor 1 links/mitte/rechts
potentiometer 2: schrittmotor 2 oben/mitte/unten
natürlich wäre es "schöner" wenn man mit einem poti die stellung der motoren direkt und zu jeder zeit überwachen könnte und nicht nur links/mitte/rechts, doch dazu würde man einen analogeingang benötigen, den der iow24 nicht besitzt
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
wenn ich im programm iowsample.exe in den ersten beiden byte irgendetwas reinschreibe und dann auf write drücke sollte doch der wert in den baustein geschrieben werden - wenn ich dann aber mit read den baustein auslese, passt das nicht (üblich FF im baustein) - wobei zur zeit auf der übungsplatine noch nichts dranhängt - nur das orginalled von der platine selbst
wie gesagt: ich möchte eigentlich nur wissen wie ich den baustein beschreibe und wie auslese - ganz grundsätzlich!!
ich dachte eigentlich man muss den baustein irgendwie erst sagen was er tun soll und dann auf welchen ports - oder nicht?
wenn ich dich richtig verstehe, muss ich 1 auf einen eingang schreiben und warten bis der auf 0 gezogen wird - der baustein liefert dann einen wert zurück und den muss ich auswerten
wie gesagt: ich möchte eigentlich nur wissen wie ich den baustein beschreibe und wie auslese - ganz grundsätzlich!!
ich dachte eigentlich man muss den baustein irgendwie erst sagen was er tun soll und dann auf welchen ports - oder nicht?
wenn ich dich richtig verstehe, muss ich 1 auf einen eingang schreiben und warten bis der auf 0 gezogen wird - der baustein liefert dann einen wert zurück und den muss ich auswerten
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Nein, falsch verstanden. Alle Pins sind immer Inputs, liefern also den logischen Wert am Pin zurück. Die Ausgangstreiber sind Open Drain mit einem Pull-Up Widerstand. Wenn man also eine 1 in einen Pin schreibt, zieht nur der Widerstand gegen +5V. Schreibt man eine 0 dann zieht der Treiber gegen Masse.
Ob das dann am Pin eine logische 0 ergibt hängt davon ab wie viel Strom man dem Treiber zumutet, wird es zu viel, dann steigt die Spannung am Pin und es kann eine 1 gelesen werden.
Steht übrigens auch alles im FAQ...
Ob das dann am Pin eine logische 0 ergibt hängt davon ab wie viel Strom man dem Treiber zumutet, wird es zu viel, dann steigt die Spannung am Pin und es kann eine 1 gelesen werden.
Steht übrigens auch alles im FAQ...
habe gelesen dass bereits ein pull-up wieder eingebaut ist - löst nicht meine frage, wie man denn nun einfach einen wert - 1 byte - rausschreibt und wie einließt
bzw warum kann ich über iowsample.exe irgendeinen wert über write ausschreiben, den dann aber über read nicht einlesen (wenn ich vorher, zb AA 11 auschreibe, sollte dann beim read-befehl doch auch wieder AA 11 gelesen werden??)
dachte ich setze einen treiber-ic mit intern ein paar ops (ULM..) ein für die ausgänge - damit diese eben nicht den iow24 belasten und die eingänge schließe ich direkt an die komperatorschaltungen an
bzw warum kann ich über iowsample.exe irgendeinen wert über write ausschreiben, den dann aber über read nicht einlesen (wenn ich vorher, zb AA 11 auschreibe, sollte dann beim read-befehl doch auch wieder AA 11 gelesen werden??)
dachte ich setze einen treiber-ic mit intern ein paar ops (ULM..) ein für die ausgänge - damit diese eben nicht den iow24 belasten und die eingänge schließe ich direkt an die komperatorschaltungen an
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Also das was man auf den IO-Warrior schreibt sollte so auch wieder zurück kommen, wenn man keine Aussenbeschaltung hat, die an den Logikpegeln was macht.
Das mit dem Zurücklesen ist nicht ganz so einfach. Da die Übertragung über den USB relativ langsam ist und der IO-Warrior nur bei Änderunen an seinen Eingängen von sich aus ein Datenpaket schickt kann es da zu Fehlinterpretationen kommen. Der normale Read liefert nicht notwendigerweise beim ersten mal den aktuellen Zustand, da können noch ein paar ältere Zustände im Puffer stehen.
Das mit dem Zurücklesen ist nicht ganz so einfach. Da die Übertragung über den USB relativ langsam ist und der IO-Warrior nur bei Änderunen an seinen Eingängen von sich aus ein Datenpaket schickt kann es da zu Fehlinterpretationen kommen. Der normale Read liefert nicht notwendigerweise beim ersten mal den aktuellen Zustand, da können noch ein paar ältere Zustände im Puffer stehen.
Hallo Guido
habe die übungsplatine probiert (mit messgerät und externen leds) - wenn der iow24 über einen externen widerstand ein led auf 0 ziehe funktionierts (hip,hip, hurrah) - somit klappt das schreiben mit dem programm iowsample.exe - leider hängt es sich auf, sobald man auf read drückt
muss jetzt ansehen was das programm eigentlich tut wenn man auf write drückt und woher es die 2 bytes, die auf den ausgang geschrieben werden nimmt.
im endeffekt muss das programm bitmuster ausgeben, warten (wenige sekunden) die nächsten bitmuster ausgeben - so lange bis die schrittmotoren eine bestimmte stellung erreicht haben und der baustein das meldet -
das heißt hier kommt das lesen, wenn sich ein eingang geändert hat und der baustein dies zurücksendet - in welches programmteil springt er dann und wie beherrscht man den sprung?
habe die übungsplatine probiert (mit messgerät und externen leds) - wenn der iow24 über einen externen widerstand ein led auf 0 ziehe funktionierts (hip,hip, hurrah) - somit klappt das schreiben mit dem programm iowsample.exe - leider hängt es sich auf, sobald man auf read drückt
muss jetzt ansehen was das programm eigentlich tut wenn man auf write drückt und woher es die 2 bytes, die auf den ausgang geschrieben werden nimmt.
im endeffekt muss das programm bitmuster ausgeben, warten (wenige sekunden) die nächsten bitmuster ausgeben - so lange bis die schrittmotoren eine bestimmte stellung erreicht haben und der baustein das meldet -
das heißt hier kommt das lesen, wenn sich ein eingang geändert hat und der baustein dies zurücksendet - in welches programmteil springt er dann und wie beherrscht man den sprung?
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
ich erkenne durchaus wenn ein programm sich aufhängt, habe es nun aber auf ein anderes laufwerk gestellt und siehe da es hängt sich nicht mehr auf (bei bestimmten aktionen reagiert das alte laufwerk merkwürdig)
den hinweis mit dem FAQ verstehe ich nicht, habe nachgesehen - es geht ums forum an sich - mach ich was falsch?
wenn man einen ULM... treiberbaustein an die ausgänge anschließt um diese zu entlasten, muss man vorher pull-up widerstände setzen (einfach gegen +5 V und zwischen iow24 und ulm) und wenn wie hoch müssen diese sein?
den hinweis mit dem FAQ verstehe ich nicht, habe nachgesehen - es geht ums forum an sich - mach ich was falsch?
wenn man einen ULM... treiberbaustein an die ausgänge anschließt um diese zu entlasten, muss man vorher pull-up widerstände setzen (einfach gegen +5 V und zwischen iow24 und ulm) und wenn wie hoch müssen diese sein?
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Das FAQ beim IO-Warrior, aber habe gerade nachgesehen, wir müssen da mal ein Update machen, es gibt einige Fragen und Antworten, die wir zwar gesammelt aber noch nicht dort veröffentlicht haben...
Der IO-Warrior hat selber interne Pull-Up Widerstände. Wann immer ein Treiber angeschlossen wird muss man sich Gedanken um den Stromverstärkungsfaktor machen und der Treiber sollte nicht bei High-Pegel schalten, das ist schliesslich der Ruhezustand der IO-Warrior Ausgänge.
Der IO-Warrior hat selber interne Pull-Up Widerstände. Wann immer ein Treiber angeschlossen wird muss man sich Gedanken um den Stromverstärkungsfaktor machen und der Treiber sollte nicht bei High-Pegel schalten, das ist schliesslich der Ruhezustand der IO-Warrior Ausgänge.
Hi,
wenn der IOW für meine Zwecke schon nicht ganz geeignet war, will ich hier mal meine Hilfe anbieten. Ich habe auch schon zu Testzwecken einen Schrittmotor damit angetrieben. Das hat auch im Prinzip funktioniert.
Jedoch sind die Probleme, die Du jetzt noch hast, Kleinigkeiten gegen die, die Du Dir mit diesem Vorhaben einhandelst. Je nach Schrittweite und Getriebe ist die Geschwindigkeit des Motors auf Grund der verhältnismäßig geringen Datenduchsatzraten viel zu langsam. Dann hast Du ja auch schon mit dem Leseproblem bekanntschaft gemacht. Du brauchst auf jeden Fall einen eigenen Lesethred. Das habe ich hier schon gelernt.
Ich schlage vor, ein steuerbaren Frequenzgeber zu verwenden, der das Signal für Deinen Treiber erzeugt und Du über den IOW nur Ein- Aus- Rechts- Links steuerst vielleicht auch unterschiedliche Geschwindigkeiten, und natürlich dann auch die Positionsdaten liest. Zur Not kannst Du die Positionsdaten ja auch noch errechnen. Das ist ja gerade das tolle an einem Schrittmotor. Das spart den Lesethred
Gruß
Mike
wenn der IOW für meine Zwecke schon nicht ganz geeignet war, will ich hier mal meine Hilfe anbieten. Ich habe auch schon zu Testzwecken einen Schrittmotor damit angetrieben. Das hat auch im Prinzip funktioniert.
Jedoch sind die Probleme, die Du jetzt noch hast, Kleinigkeiten gegen die, die Du Dir mit diesem Vorhaben einhandelst. Je nach Schrittweite und Getriebe ist die Geschwindigkeit des Motors auf Grund der verhältnismäßig geringen Datenduchsatzraten viel zu langsam. Dann hast Du ja auch schon mit dem Leseproblem bekanntschaft gemacht. Du brauchst auf jeden Fall einen eigenen Lesethred. Das habe ich hier schon gelernt.
Ich schlage vor, ein steuerbaren Frequenzgeber zu verwenden, der das Signal für Deinen Treiber erzeugt und Du über den IOW nur Ein- Aus- Rechts- Links steuerst vielleicht auch unterschiedliche Geschwindigkeiten, und natürlich dann auch die Positionsdaten liest. Zur Not kannst Du die Positionsdaten ja auch noch errechnen. Das ist ja gerade das tolle an einem Schrittmotor. Das spart den Lesethred

Gruß
Mike
hallo Mike
die leistungssteuerung des schrittmotors ist weniger ein problem, probemäßig funktioniert das schon - habe bereits mit kamera laufen lassen, die steuerung des schrittmotors selbst muss bei uns nicht genau sein
wir machen - zb - 15 bilder für 1x rundherum fotographieren, diese bilder sollen sich je um etwa 50% überlappen, spielt weniger eine rolle ob 30% oder 55% - dh ein paar schritte zu verlieren ist kein problem
wie oben geschrieben: gesteuert wird nur drehrichtung links oder rechts und "mach einen schritt" pro motor, als eingangssignal benötige ich pro motor nur links, mitte, rechts (für horizontales drehen) bzw oben/mitte/unten (ür vertikales drehen der Kamera)
für mich ist das extreme problem die Software!! - ich habe einfach keine ahnung davon
die einstellungen, die man bei der software machen muss sind nicht sehr kompliziert aber grundsätzlich möchte ich darüber erst bei interesse sprechen, sonst müsste ich kurz das ganze projekt vorstellen - ich wäre aber sehr, sehr froh wenn mir da jemand helfen kann
die leistungssteuerung des schrittmotors ist weniger ein problem, probemäßig funktioniert das schon - habe bereits mit kamera laufen lassen, die steuerung des schrittmotors selbst muss bei uns nicht genau sein
wir machen - zb - 15 bilder für 1x rundherum fotographieren, diese bilder sollen sich je um etwa 50% überlappen, spielt weniger eine rolle ob 30% oder 55% - dh ein paar schritte zu verlieren ist kein problem
wie oben geschrieben: gesteuert wird nur drehrichtung links oder rechts und "mach einen schritt" pro motor, als eingangssignal benötige ich pro motor nur links, mitte, rechts (für horizontales drehen) bzw oben/mitte/unten (ür vertikales drehen der Kamera)
für mich ist das extreme problem die Software!! - ich habe einfach keine ahnung davon
die einstellungen, die man bei der software machen muss sind nicht sehr kompliziert aber grundsätzlich möchte ich darüber erst bei interesse sprechen, sonst müsste ich kurz das ganze projekt vorstellen - ich wäre aber sehr, sehr froh wenn mir da jemand helfen kann
Hy,
für Leute, die nicht Programmieren können oder wollen gibt es eine Alternative.
ProfiLab-Expert
Man strickt grafisch eine Schaltung zusammen.
Der IOW wird in der I/O-Grundfunktion unterstützt, Special-Function leider nicht.
Mike D
für Leute, die nicht Programmieren können oder wollen gibt es eine Alternative.
ProfiLab-Expert
Man strickt grafisch eine Schaltung zusammen.
Der IOW wird in der I/O-Grundfunktion unterstützt, Special-Function leider nicht.
Mike D