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.
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.
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.
Die in der BiDiBOne-Basis-Firmware implementierte „Entprellte Eingabe“ wird durch Konfiguration in addon_model.h
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:
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.
addon_model.h
check_input_addon
mit check_debounced_input