Pfad: Home => AVR-Übersicht => Anwendungen => Prellen
Prellmessung mit ATmega8

Messung des Tastenprellens mit ATmega8 und STK500

Mechanische Tasten schalten nicht einfach nur an und aus: werden sie betätigt, geben einige von ihnen eine ganze Serie kürzerer oder längerer Signale ab. Bei trägen Anwendungen wie Leuchten oder dem Einschalten eines Netzteils macht das nichts aus, aber bei Prozessorsignalen kann Prellen chaotische Folgen haben.

Mit dieser Anwendung eines ATmega8 auf einem STK500-Entwicklungsboard werden solche Schaltsignale erfasst, gespeichert und ihre Dauer über die im STK500 vorhandene serielle Schnittstelle an einen PC gesendet, auf dem die Signale ausgewertet werden können.

Eigenschaften der Anwendung:

0. Inhalt

1. Hardware Prellmessung

Die gesamte Hardware ist auf dem STK500 aufgebaut.

ATmega8 im STK500 Der ATmega8 wird in den grünen 28-poligen Sockel eingesetzt.

ISP-Anschluss STK500 Zum Programmieren wird die ISP-Schnittstelle an den ATmega8 geführt.

Quarz im STK500 Der 16 MHz-Quarz wird in den Crystal-Sockel eingesetzt und die entsprechenden Jumper für den Betrieb mit Quarz gesetzt. Um den ATmega8 auf Quarzbetrieb umzustellen, wird seine ST_CKSEL-Fuse auf "Ext.Crystal/Resonator HighFreq." mit einer Start-up-Zeit von "16K CK + 64 ms" gesetzt. Das entspricht einer Fuse-Einstellung auf HIGH=0xD9, LOW=0xFF.

Serielle Schnittstelle im STK500 Zur Ansteuerung der seriellen Schnittstelle wird der Port PD0 mit RXD, PD1 mit TXD verbunden.

Tastenanschluss am STK500 Die Tasterobjekte werden mit Krokodilklemmen an Port PD2 und GND angeklemmt.

Das Schaltbild ist auch in der Quellsoftware enthalten (siehe Software).

Zum Inhaltsverzeichnis

2. Datenformat, Auswertung

Die in Hex-Format ausgegebenen Signale bestehen aus 32-Bit-Zahlen.
Testpin
43A5DB1D
43A5DB5F
C3A5DBA8
43A5DBAB
43A5DC22
43A5DC26
43A5DC2E
43A5DCD1
C3A5DCF4
43A5DCFB
43A5DD95
43A5DDA6
43A5DDAA
C3A5DDEA
43A5DDED
C3A5DEA0
43A5DEA4

Das oberste Bit stellt die Polarität dar. Es wechselt im dargestellten Beispiel zwischen "4" und "C", also zwischen 0 und 1. Werte, bei denen kein Wechsel der Polarität erfolgt (im Beispiel mehrfach 4 hintereinander), sind so kurze Signale, dass zwischendurch kein Interrupt erkannt wird oder nach Erreichen der Serviceroutine bereits ein erneuter Polaritätswechsel erfolgt (<2µs).

Die folgenden 31 Bit sind der Zählerstand des 31-Bit-Timers (16 Bit Hardware Timer, 15 Bit via Software). Überläufe müssen (und können) von der Auswertungssoftware leicht erkannt werden, weil sie erst nach sehr langen Zeiträumen (ca. 18 Minuten) auftreten und sehr selten vorkommen.

Zur Auswertung der Mitschriften habe ich ein Delphi-Programm geschrieben, das diese auswertet und graphisch darstellt. Quellcode und Windows-Executables sind auf Anfrage bei mir erhältlich. Die folgenden Bilder wurden damit erstellt.

Das Bild zeigt den gesamten Signalverlauf über 6,4 Sekunden bei einem handelsüblichen Taster mit Zentralbefestigung.

Taster Zentral 64s

Etwas höher aufgelöst hier das Umschaltsignal eines Kleinschalters mit Zentralbefestigung, der schon nach etwa 2 ms zur Ruhe kommt.

Umschalter Zentral 6,4ms

Es gibt aber auch "saubere" Schalter. Hier ein Exemplar Rundtaster von ITT/Schadow mit zwei sehr sauberen Tastsignalen.

Umschalter Zentral 6,4ms

Das totale Chaos zeigt die folgende Auswertung einiger Umschaltvorgänge bei einem Schalter (alle Zeiten in Mikrosekunden):

Total pulses: 2370
0..9: 758
10..49: 481
50..99: 259
100..499: 533
500..999: 116
1,000..4,999: 114
5,000..9,999: 20
10,000..49,999: 34
50,000..99,999: 6
>100,000: 49


Jeder Taster und Schalter produziert dabei sein eigenes Muster, von Schaltvorgang zu Schaltvorgang unterschiedlich.

Grund genug, bei jeder Schalteranwendung mit Mikroprozessor eine ordentlich programmierte Prellbehandlung vorzusehen.

Zum Inhaltsverzeichnis

3. Software

Die Software gibt es im HTML-Format hier und im asm-Format hier.

Sie funktioniert folgendermaßen:

Zum Inhaltsverzeichnis

©2013 by http://www.avr-asm-tutorial.net