Das vorher
mit Hilfe der KI
entworfene Programm zur Reaktionszeitmessung habe ich am Ende noch
einmal stark vereinfacht. Das betrifft auch die Bedienung. Nach einer
zufälligen Wartezeit läuft ein LED-Band mit definierter Geschwindigkeit
hoch und kann mit dem Taster gestoppt werden. Zeitmessung und Anzeige
fallen damit zusammen. Und das Ergebnis wird so lange angezeigt, wie
der der Taster gedrückt gehalten wird. Danach beginnt alles von vorn,
Das Programm ist damit so kompakt, dass man mit 24 Befehlen auskommt.
B0 ist ein Eingang mit Pullup. Die hier angeschlossene LED leuchtet nur
schwach. Der Befehl Pullup = 1 funktioniert beim Pico, aber nicht beim
Arduino. Das Programm läuft aber trotzdem auf beiden, weil der Eingang
mit Pout = 3 mit hochgezogen wird. Allerdings sollte beim Arduino hier
keine LED liegen, weil dabei wegen der 5V-Betriebsspannung der Pegel
durch eine LED noch unter die Schaltschwelle gedrückt werden könnte.
Damit man sich nicht auf einen bestimmten Takt einstellen kann und
damit das erste Bit immer überraschend kommt, wird im Bereich L1 und L2
eine Zufallszeit erzeugt. Der Zufall entsteht durch einen Trick. Hier
wird der AD-Wandler verwendet und an AD0 ein kurzes Kabel
angeschlossen. Der gemessene Wert schwankt stark, vor allem durch
einstreuende Wechselfelder und Änderungen statischer Felder. Von diesem
Ergebnis werden nur die unteren vier Bit verwendet, dann noch mit 10
addiert und in D geladen. Die Wartezeit ist dann D-mal 100 ms.
Das Verfahren ist mir selbst eingefallen, weil ich oft mit offenen
Eingängen herumgespielt habe. Aber ich muss gestehen, dass die
Feinabstimmung mit der Hilfe der KI entstanden ist. Die Zufallszeit
liegt nun im Bereich 1,0 s …2,5 s.
Rem Reaktion2
0x09FE Pdir = 254
0x0A01 Pullup = 1
L1:
0x3C00 A = AD0
0x120F A = A AND 15
0x020A B = 10
0x2A00 A = A + B
0x3800 D = A
L2:
0x1964 Delay ms = 100
0x2607 D*Jmp L2:
0x0803 Pout = 3
L3:
0x1932 Delay ms = 50
0x4000 A = Pin0
0x0200 B = 0
0x2213 If A=B Jmp L4:
0x3F00 A = Pin
0x3100 A = A Shl 1
0x1303 A = A OR 3
0x4500 Pout = A
0x200A Jmp L3:
L4:
0x19FA Delay ms = 250
0x4000 A = Pin0
0x2213 If A=B Jmp L4:
0x0800 Pout = 0
0x2002 Jmp L1:
Ursprünglich hatte das Programm eine Auflösung von 0,1 s. Dabei hat
sich gezeigt, dass ich fast immer eine Reaktionszeit von 0,2 s oder 0,3
s hatte, dass also nicht mehr als drei LEDs für das Ergebnis standen.
Weil ich aber sieben LEDs ansteuere, konnte die Auflösung
verdoppelt werden. Deshalb hat die eigentliche Zeitmessung ab L3 nun
eine Verzögerung von nur noch 50 ms. Nun kann ich im Bereich 0,05 s bis
0,35 s messen. Meist jedoch bleibt es bei 0,20 s. Wer kann es schneller?
Info von Alfred Altner
Vor etlichen Jahren gab es in der Berichterstattung zu einem
Rodelwettbewerb die Frage, wie schnell man manuell den
Start-Stopp-Modus betätigen kann. Sowohl mit mechanischen als auch
elektronischen Stoppuhren ist die kürzeste Start-Stopp-Sequenz 0,17
Sekunden, die ein Mensch stoppen kann. Ergo ist eine Reaktionszeit von
0,20 Sekunden schon sehr nah an dem menschlich möglichen. Soweit ich
mich erinnere, war der Abstand zwischen Platz 1 und Platz 2 im
damaligen Wettbewerb bei 0,10 Sekunden, heute rechnet man diese
Abstände bereits in Zentimeter um.