Jump to content

Recommended Posts

Geschrieben

Hallo zusammen,

ich möchte die Position eines optischen Encoders (E38S6G5-600B-G24N) mit dem IO-16 2.0 Bricklet auslesen.

Damit ich keine Schritte verliere, sollten die Eingänge als Interrupts genutzt werden. Laut Beschreibung des Bricklets sollte dies auch möglich sein. Es gibt auch einen Interrupt-Beispielcode.

Dieser ist meines Erachtens aber nur eine normale Callback-Funktion. Ich habe es natürlich trotzdem getestet, aber festgestellt, dass Schritte beim Auslesen des Encoders verloren gehen.

In der Doku des älteren IO-16 1.0 Bricklet habe ich eine Callback-Interrupt-Funktion gefunden, welche augenscheinlich so funktioniert wie ich es erwarten würde. Diese Funktion kann aber nicht  für das IO-16 2.0 Bricklet genutzt werden. 

Ist die Beschreibung in der Doku falsch oder verwende ich die CALLBACK_INPUT_VALUE Funktion nicht richtig?

Ich würde mich freuen wenn mir das jemand weiterhelfen könnte.

Geschrieben

Ich bin mir nicht 100%ig sicher ob ich die Frage richtig verstehe. Das Bricklet nutzt einen I2C-IO-Expander. Dieser wird ca. 1000x pro Sekunde per I2C ausgelesen.

Falls das Signal deines Encoders eine Frequenz von mehr als 1kHz hat kann das Bricklet keine Callbacks/Interrupts für jeden Flankenwechsel erzeugen leider.

Geschrieben

Hallo borg,

vielen Dank für deine Antwort.

Mir fehlt leider der elektrotechnische Hintergrund, um meine Frage besser zu formulieren, aber deine Antwort hilft mir erstmal weiter.

Das IO-16 Bricklet kann also Interrupts, nur eben nicht in der für meinen Encoder nötigen Frequenz. 

Da muss ich mir eine andere Lösung einfallen lassen. Vielleicht nen Arduino vorschalten. Mit dem hatte ich den Encoder bereits getestet und das hatte gut funktioniert. Möglicherweise kann ich die Winkelposition des Encoders vom Arduino berechnen lassen und dann per Analogsignal an ein Analog-IN Bricklet weiterleiten lassen.

Geschrieben

Wenn du die Position von einem neueren Arduino berechnen lassen und an ein Bricklet weitergeben lassen möchtest, empfehle ich dir das RS232 Bricklet 2.0, damit du die Daten digital übertragen kannst. Bei einem 3,3 V Arduino kannst du die Pins direkt verbinden, bei einem 5 V Arduino brauchst du einen Widerstand.

Das klappt allerdings nicht mit alten Arduinos, die nur eine serielle Schnittstelle haben, die fest mit dem USB-Port verbunden ist.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...