Inhaltsverzeichnis

Reaktionstester

Ich habe vor einiger Zeit mal ein kleines Wochenend-Projekt gemacht: Einen Reaktionstester.

Im Kern steckt ein ATmega8, welcher eine LED, Sieben-Segment-Anzeigen und einen Tester ansteuert. Sobald der Taster gedrückt wird, werden zwei Balken angezeigt. Sobald die LED angeht (pseudozufällig verzögert), muss der Taster schnellstmöglich gedrückt werden. Macht man dies, dann zeigt die Sieben-Segment-Anzeige die benötigte Reaktions-Zeit in Millisekunden an. Drückt man zu früh den Taster wird “FAIL” ausgegeben. Der Taster ist als Öffner ausgeführt war ursprünglich als Öffner geplant, damit das Ergebnis genauer ist.

Bilder


Reaktionstester im Gehäuse


LED leuchtet – nun muss schnell
der Taster gedrückt werden


Reaktionszeit in Millisekunden


Fehlerfall

Schaltung

Die Schaltung wird von einem 5V-Steckernetzteil gespeist. Die ISP-Schnittstelle ist nicht verbunden, der AVR wurde extern programmiert. Die vier Transistoren werden für das Multiplexing der Segmentanzeigen benötigt. Die Vorwiderstände weiß ich leider nicht mehr auswendig, aber es sollte kein Hexenwerk sein diese zu berechnen. Als Taktgeber wird der interne Oszillator genutzt. Der reicht voll und ganz aus.

Software

Interessant ist die display.c. Diese kümmert sich um die Kodierung von Zahlenwerten auf das Display. set_number() setzt die angebenen Segmentanzeige auf den angegebenen Wert. Mit set_display_number() kann ein Wert zwischen 0 und 9999 auf ausgegeben werden. Die anderen Funktionen dienen Spezialausgaben (z.B. “FAIL”).

display.c

Die multiplex.c enthält eine Funktion, welche vom timer0-Interrupt aufgerufen wird und sich um das Multiplexen kümmert.

multiplex.c

In der main.c gibt es eine Schrittkette, welche sich um den Hauptprogrammablauf kümmert.

Schritt Null wartet auf den Taster. Schritt Eins Wartet eine Pseudozufällige Zeit und fragt ab, ob der Button zu früh gedrückt wurde. Schritt Zwei wartetet darauf, dass man den Taster drückt (oder die Maximalzeit abgelaufen ist und gibt den Wert (bzw. Fehler) aus.

main.c

Download