Taster
1 Das landende Flugzeug

Ein Flugzeug landet unsanft auf der Landebahn. Der Pilot setzt mehrfach auf. Es ist als ob das Flugzeug hin- und herschwingt.

Diese Eigenschaft können auch die Kontaktfedern eines Tasters haben. Sowohl beim Betätigen und als auch beim Loslassen, können diese nachschwingen, so dass es ungewollt zu mehrfachen Kontakten beim Betätigen oder Loslassen des Tasters kommt. Diese Eigenschaft nennt man das Prellen eines Tasters.

Um das unerwünschte Prellverhalten loszuwerden, da hierdurch bei einer Betätgigung des Tasters womöglich mehrere Kontakte gezählt werden, entprellt man den Taster. Dies ist entweder durch eine elektronische Schaltung möglich oder durch eine softwaretechnische Lösung.

2 Prellverhalten
Zeitablauf Prellen

Die Merkersteuerung funktioniert nicht korrekt. Nach Tastendruck des low-aktiven Tasters S0 ändert die LED L1 mehrfach ihren Zustand. Ursache: Der Taster prellt.

Wie man in dem Zeitablaufdiagramm erkennt, kann dies sowohl beim Drücken als auch beim Loslassen passieren. Darüber hinaus ist es auch möglich, dass durch Störungen der Zustand geändert wird.

Im folgenden werden verschiedene Methoden (Hardware und Software) zum Entprellen vorgestellt.

3 Entprellen mit Kondensator oder Zeitverzögerung
Entprellschaltung

Hardwaretechnisch Entprellen kann man, in dem man einen Kondensator parallel zum Pull-Down- oder Pull-Up-Widerstand schaltet. Dadurch werden kurzzeitige Signalschwankungen heraus­ge­fil­tert. Eine Zustandsänderung tritt erst dann ein, wenn der Kondensator auf die Schaltschwelle des Mikrocontrollers entsprechend ge- oder entladen ist.

Da in diesem Fall kein Entprellkondensator in der Schaltung vorgesehen war, wurde ein Konden­sator mit 100 nF einfach Huckepack auf den Pull-Down-Widerstand gelötet. Beim Board LIME 2 sind für den Taster S0 und S1 Pads für einen Entprellkondensator vorgesehen.

Softwaretechnisch lässt sich das Entprellen durch eine Zeitverzögerung erreichen. Durch Auspro­bieren kann man herausfinden, wie lang die Zeit nach dem Drücken und Loslassen jeweils sein muss. Dann packt man noch eine Reserve obendrauf und man erhält eine einfache Lösung.

4 do-while-Schleife

"Auf die Arbeit schimpft man nur solange,
bis man keine mehr hat."

Sinclair Lewis

Oft legt man im Leben einfach mal los, ohne vorher die Bedingungen zu prüfen. Die do-while-Schleife fällt auch in diese Kategorie. Mit ihrer Hilfe lässt sich eine Entprellmethode programmieren, die automatisch die notwendige Zeit für unterschiedliche Taster adaptiert.

Dabei funktioniert sie identisch wie die while-Schleife, nur dass sie die Bedingung immer nach dem Durchlauf prüft. Solange die Bedingung wahr ist wiederholt sie den Schleifenkörper. Da die Bedingung am Ende geprüft wird steht die Bedingung auch entsprechend dort.

Schauen wir uns im Folgenden die Funktion dieser Schleife an.

5 Entprellen mit der do-while-Schleife
do-while-Schleife

Innerhalb der do-while-Schleife (Schleifenkörper) wird eine Zeitverzögerung von 10 ms erzeugt. Dann wird eine vorher auf Null gesetzte Variable mtaster um eins erhöht falls der Taster S0 betätigt wurde. Bleibt der Zustand 5mal 10 ms stabil ist der Taster entprellt:

if( S0 == 0){
     do{
         DelayMS(10);
         if( S0 == 0)  mtaster++;
         else          mtaster++;
     }while(mtaster < 5)
 }



Aufgabe 1 do-while- und while-Schleife

while (S0 = = 0){
      L1 = 1;
 }
 L1 = 0;


do{
      L1 = 1;
 }while (S0 = = 0)
 L1 = 0;

Teste dein Programmierwissen. Hier werden die verschiedenen Schleifen miteinander verglichen.

  1. Welcher Unterschied besteht zwischen den zwei Schleifen?
  2. Schreib die folgende for-Schleife in eine do-while-Schleife um:
    int i;
     for(i = 0; i < 10; i++){
          L1 = !L1;
     }
  3. Warum benötigt die do-while(1)-Schleife keine Änderung im Schleifenkörper?
  1. Bei der do-while-Schleife geht die LED L1 unabhängig davon ob der Taster gedrückt ist kurz an.
  2. do-while-Schleife:
    int i = 0;
    do{
          L1 = !L1;
          i++;
     }while (i < 10)
  3. Die Bedingung ist mit dem Wert 1 immer war. D.h. wir haben eine Endlosschleife.

Aufgabe 2 LED-Steuerung mit Merker und entprelltem Taster

Taster

In dieser Aufgabe werden die Taster softwaretechnisch entprellt. Dabei werden verschiedene Methoden getestet.

  1. Erstelle das Projekt 06 Taster entprellen und schreibe die C-Datei 06-Taster-entprellen-1.c. Bei Tastendruck S0 soll der Zustand der Variable merker geändert und gespeichert werden. Die LED L1 soll je nach Zustand der Variable merker an oder aus sein. Das Entprellen beim Betätigen und Loslassen lösen wir mit Hilfe einer Wartezeit von 200 ms.
  2. Teste die notwendigen Entprellzeiten für jeden einzelnen Taster.
  3. Schreibe die C-Datei 06-Taster-entprellen-2.c. Nutze diesmal die do-while-Schleife zum Entprellen. Der Zustand des Tasters sollte dabei mindestens 100 ms stabil sein (sich nicht ändern). Überprüfe die Variable mtaster alle 10 ms.

Aufgabe 3 Tastenabfrage in Kombination mit einem entprelltem Zählwert

Taster mit LEDs

Schreibe die C-Datei 06-Taster-entprellen-3.c. Dabei sollen beim Betätigen von SU, der Taster entprellt und die Zählvariable merker um eins erhöht werden. Achte darauf, dass merker nicht größer als vier wird.

Beim Betätigen von SD wird dieser entprellt und merker um eins verringert werden. Achte darauf, dass merker niemals kleiner als Null wird.

Entsprechend des aktuellen Wertes von merker soll keine oder die LEDs L1L4 leuchten.
Hinweis: Nutze dazu die Funktion int Scheck(int merker).


Entspann dich erst mal ...

Folgenden Text habe ich mal entdeckt.

Der Text soll als Beweis für die überragende Leistung unseres Gehirns stehen.

Lies nach, wenn du kannst und überzeuge dich selbst.

D1353 M17731LUNG D13N7
4L5 B3W315 D4FU3R,
W45 FU3R 3R574UNL1CH3 D1NG3
UN53R V3R574ND L31573N K4NN.

B331NDRUCK3ND.
4M 4NF4NG W4R'5 5CH0N 5CHW3R,
4B3R J37Z7 L1357 35 D31N G3H1RN
5CH0N 4U70M4715CH. N1CH7 W4HR?
FR3U D1CH DRU3B3R.


© mylime.info