Inhaltsverzeichnis
Entprellte Eingabe (Debouncing)
Die BiDiBOne-Basis-Firmware enthält ein einfache Funktionalität für entprellte Eingaben wie Schalter und Taster. Diese Eingabeinformationen können an den BiDiBus gesendet und für die Steuerung von Makros verwendet werden.
Hintergrund
Mechanische Schaltelemente wie Taster, Schalter oder auch Relais prellen beim Umschalten, d.h. sie schalten nicht plötzlich von einem in den anderen Zustand um, sondern wechseln im Millisekundenbereich ihren Zustand bis zur gewollten Ruhelage. Dieses Verhalten wird als „Prellen“ bezeichnet.
Da einige Millisekunden für den Prozessor eine Ewigkeit sind, würde eine nicht optimierte Software jede Änderung dieser Schaltzustände auswerten und zu Fehlschlüssen gelangen. Probates Mittel dagegen ist das so genannte Entprellen (engl. debounce). In analogen Systemen wird das Prellen u.A. mittels Kondensatoren unterbunden. In unserer BiDiBOne-Basis entprellen wir diese Signale Software technisch.
Resourenbelegung
Die „entprellte Eingabe“ bildet die Eingangsinformationen auf die Keyboard-Ereignisse im Event-System ab.
Je nach Anzahl der Eingaben (ein bis acht) werden die Ereignisse IN_DOWN0
bzw. IN_UP0
bis IN_DOWN7
bzw. IN_UP7
verwendet. Die dürfen dann nicht mehr anderweitig verwendet werden.
Die Eingänge werden als INPUT
beginnend bei 0 aufsteigend im System geführt.
Konfiguration
Die in der BiDiBOne-Basis-Firmware implementierte „Entprellte Eingabe“ wird durch Konfiguration in addon_model.h
aktiviert.
- Es können maximal 8 Eingänge von insgesamt 2 Ports konfiguriert werden
- Die Pins eines Ports sollten zusammenhängend sein
- Die beiden Gruppen müssen ohne Überlappung in eine 8-Bit-Variable verschoben werden
- Das niederwertigste Bit wird als INPPUT0 interpretiert
- EXTERNAL2 wird nur mit EXTERNAL1 aktiviert
Definition | Wert | Bedeutung |
---|---|---|
EXTERNAL_INPUT_ACTIVE_TO_GND | TRUE/FALSE | Aktivlage aller Eingänge |
EXTERNAL1_INPUT_ENABLED | FALSE/TRUE | deaktiviert/aktiviert die Gruppe |
EXTERNAL1_INPUT_PORT | PORTA…PORTF | Port von dem gelesen wird |
EXTERNAL1_INPUT_MASK | 0x00…0xFF | Maske für die relevanten Bits |
EXTERNAL1_INPUT_SHIFT | 0 | ohne Verschiebung |
>0 | Verschiebung nach links (positiv) | |
<0 | Verschiebung nach rechts (negativ) |
Analog dazu wird EXTERNAL2… definiert.
Um Konflikte zu vermeiden (siehe AddOn-Software einbinden in BiDiBOne), sollten auch hier die angeforderten Portpins unbedingt gekennzeichnet werden:
Softwareeinbindung
Neben der Konfiguration ist die Weiterleitung einer dieser Eingangs-Informationen mit der Funktion: check_debounced_input
aus dem Modul keyboard.c
möglich.
Das kann z.B. in der Callback-Funktion check_input_addon
aus dem Modul addon.c
passieren.
Zusammenfassung
- Konfiguration in
addon_model.h
- Abfrage und Weiterleitung in
check_input_addon
mitcheck_debounced_input