Mikrocontroller – Ein Leitfaden für Anfänger – Tastenentprellung durch Software
Teilen
Mikrocontroller - Ein Leitfaden für Anfänger - Tastenentprellung durch Software
Okay, jetzt sagen Sie sich, wir haben die Entprellung GERADE besprochen, und sie schien gut zu funktionieren... Warum tiefer in dieses Thema eintauchen?!? Nun, im Grunde ist die Software-Entprellung, wenn der Programmspeicher und die Mikrocontroller-Zyklen es zulassen, im Wesentlichen kostenlos. Es sind nur ein paar Zeilen Code, und Sie können viel mehr Kontrolle darüber haben, wie die Entprellungsmethoden mit der von Ihnen verwendeten Taste funktionieren. Eine Entprellung in der Hardware kann die Kosten für jede entwickelte Platine erhöhen, und es ist schwieriger, eine gute Entprellung für alle verwendeten Drucktasten zu finden. Wenn Sie jedoch Programm-Ausführungszyklen einsparen möchten, ist es am besten, den Hardware-Weg zu gehen.
Meine Methode der Entprellung mit Software verwendet nur zwei Variablen, die den Konfidenzlevel des tatsächlichen Tastendrucks messen. Mit Hilfe der Variablen „Pressed“, die in der Tastenentprellung eingeführt wurde, wird ein Strom von 1en erzeugt, wenn die Taste gedrückt wird, und ein Strom von 0en, wenn die Taste losgelassen wird. Wenn ein Prellen auftritt, sind die Ströme von 1en oder 0en sehr kurz, so dass wir dies nutzen können, indem wir zwei Variablen einführen, die die Länge dieser Ströme messen. Die Variablen heißen „Pressed_Confidence_Level“, um den gedrückten Zustand der Taste zu messen, und „Released_Confidence_Level“, um den losgelassenen Zustand der Taste zu messen.
Wenn die Taste also gedrückt wird, steigt der „Pressed_Confidence_Level“, und das Gleiche geschieht mit dem „Released_Confidence_Level“, wenn die Taste losgelassen wird. Aber diese Variablen werden auch auf 0 zurückgesetzt, wenn die entgegengesetzte Bedingung eintritt. Nehmen wir zum Beispiel an, die Taste wurde eine Zeit lang gedrückt, und der „Pressed_Confidence_Level“ wurde zu einer sehr großen Zahl, wie 153.356. Wenn die Taste losgelassen wurde (oder ein Prellen auftrat), würde die Variable auf 0 zurückgesetzt. Der Trick bei diesen Variablen besteht darin, einen guten Schwellenwert zu bestimmen, um einen guten Tastendruck oder -loslasszustand zu bestimmen. Sagen wir, wenn der „Pressed_Confidence_Level“ nach dem Anstieg auf 500 anzeigt, dass diese Zahl ein starkes Indiz für einen Tastendruck ist, dann schalten die LEDs einmal um. Das Gleiche gilt für den „Released_Confidence_Level“, da auch beim Loslassen einer Taste ein Prellen auftreten kann. Sehen wir uns also an, wie wir dies im Code umsetzen:
{
PORTB ^= 1 << PINB0;
DDRB |= 1 << PINB2;
DDRB &= ~(1 << PINB1);
PORTB |= 1 << PINB1;
int Pressed = 0;
int Pressed_Confidence_Level = 0; //Messung der Tastenpress-Konfidenz
int Released_Confidence_Level = 0; //Messung der Tastenfreigabe-Konfidenz
while (1)
{
{
Released_Confidence_Level = 0; //Zurücksetzen der Released-Tasten-Konfidenz, da ein Tastendruck erfolgt ist
if (Pressed_Confidence_Level >500) //Indikator für einen guten Tastendruck
{
{
PORTB ^= 1 << PINB2;
Pressed = 1;
//Auf Null setzen, damit ein neuer gedrückter Zustand ausgewertet werden kann
Pressed_Confidence_Level = 0;
else
{
Pressed_Confidence_Level = 0; //Zurücksetzen der Pressed-Tasten-Konfidenz, da die Taste losgelassen wurde
if (Released_Confidence_Level >500)
{
Released_Confidence_Level = 0;