Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Geschrieben

Hallo zusammen,

 

ich versuche mit einem Stepper-Brick eine Schrittmotorsteuerung für ein Experiment aufzubauen. Das funktioniert auch alles prima. Jetzt sollte eigentlich auch noch der Start und Endpunkt mit einem Endschalter erkannt werden. Dazu habe ich eine noch vorhandene IO16 verwendet. Ich nutze für den Nullpunkt den Pin7 des Port A und habe eine Interruptroutine, die den Steppermotor auschaltet (break). Das funktioniert auch aber leider nicht zuverlässig. Gelegentlich wird beim betätigen des Schalters wohl kein Interrupt ausgelöst und die Callback-Funktion auch nicht aufgerufen.

 

Der switch ist direkt an Pin7 und GND angeschlossen und der Pullup-Widerstand eingeschaltet.

 

Initialisiert wird IO16 mit:

self.stepper.register_callback(self.stepper.CALLBACK_POSITION_REACHED,self.cb_reached)

self.switch.set_port_configuration('a', 128,'i', True)

 

die Callback-Funktion wird mit:

self.switch.register_callback(self.switch.CALLBACK_INTERRUPT, self.cb_endswitch)

self.switch.set_port_interrupt('a', 0)  # noch kein Interrupt

 

registriert, aber zunächstder Interrupt abgeschaltet.

 

Wenn ich per Software eine Initialisierung durchführe, gebe ich den Interrupt mit:

 

self.switch.set_port_interrupt('a', 1 << 7)  # Pin 7 an Port A

 

frei.

 

in der Callback-Funktion wird der Motot gestoppt und der Interrupt mit:

 

self.switch.set_port_interrupt('a', 0)  # Interrupt wieder ausschalten

 

wieder ausgeschaltet. Ich nehme keine Auswertung der Wertes von Port A vor, da das auslösen des Interruptes für mich schon genügt, den Motor zu stoppen.

 

Hat jemand ein ähnliches Problem mit nicht ausgelösten Interrupt und hat dafür möglicherweise eine Lösung?

 

Klaus

 

Geschrieben

Von deiner Beschreibung des Programms her sollte das funktionieren.

 

Standardmäßig ist die Debounce Period (siehe set_debounce_period) auf 100ms gestellt. Wenn der Endschalter also weniger als 100ms gedrückt ist kann es passieren, dass das nicht als Interrupt angesehen wird.

 

Andere Möglichkeit wäre, dass der Endschalter oder die Verkabelung mechanisch oder elektrisch nicht in Ordnung ist und einen Wackelkontakt hat. Dadurch kann der Endschalter dann gedrückt werden, ohne dass das elektrisch bei der IO-16 ankommt.

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...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.