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”).
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.
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information