Geschwindigkeitsmessung mit dem C64
|
Neulich hat mich mal jemand angemailt, ob es möglich sei mit
dem C64 die Geschwindigkeiten von Seifenkisten zu messen. Ferner sollte eine
Sirene angehen wenn eine bestimmte Geschwindigkeit überschritten wird. Dabei
ist nun folgendes herausgekommen:
diese Seite beinhaltet:
Beschreibung
Es werden potentialfreie Kontakte von zwei Lichtschranken
benutzt, die an den Userport des C64 angeschlossen werden. Optional wird der
dritte Userportanschluss für eine Sirene benötigt. Die Schaltung ist nicht
schwer nachzubauen. Jenachdem WAS für Lichtschranken benutzt werden braucht man
noch eine externe Spannung. In der Regel 24 V Gleichspannung wenn man
Lichtschranken aus der Industrie verwenden möchte. Je weiter man die beiden
Lichtschranken auseinander postiert, desto genauer wird das Messergebnis, weil
mit dem nachstehenden Programm nur auf Zehntel Sekunden gemessen werden kann. Zu
beachten ist dabei, dass die Geschwindigkeit zwischen den beiden Messpunkten
konstant gehalten werden muss.
Das Meßprogramm
Hier das dazugehörige Programm welches ich auf die schnelle
zusammengeklatscht habe:
10 POKE 56576+3,252 : REM Bit 2-7 vom Userport auf Ausgang geschaltet
20 POKE 56576+1 , PEEK (56576+1) AND 3 : REM Ausgang 2-7 auf "0"
30 POKE 56328+3,0 : REM Stoppuhr H auf "00"
40 POKE 56328+2,0 : REM Stoppuhr M auf "00"
50 POKE 56328+1,0 : REM Stoppuhr S auf "00"
55 POKE 56328+6, PEEK (56328+6) OR 128 : REM 50Hz Flag für Uhr setzen
60 A = PEEK (56576+1) AND 1 : REM Lichtschranke 1
70 IF A = 1 THEN 60 : REM Lichtschranke 1 passiert ?
80 POKE 56328,0 : REM Zehntel Sekunden auf "00" - Stoppuhr starten
100 A = PEEK (56576+1) AND 2 : REM Lichtschranke 2
110 IF A = 1 THEN 100 : REM Lichtschranke 2 passiert ?
200 H = PEEK (56328+3) AND 127
210 M = PEEK (56328+2)
220 S = PEEK (56328+1)
230 Z = PEEK (56328)
240 A=S : GOSUB 400 : S$ = STR$(A) : REM Sekunden
250 A=M : GOSUB 400 : M$ = STR$(A) : REM Minuten
260 A=H : GOSUB 400 : H$ = STR$(A) : REM Stunden
270 A=Z : GOSUB 400 : Z$ = STR$(A) : REM Zehntel
280 T = (H*3600) + (M*60) + S + (Z/10)
285 AB = 10 : V = (AB/T)*3,6 : REM Geschwindigkeit in Km/h - AB = Lichtschrankenabstand in Metern
290 V$ = LEFT$(STR$(V),6)
300 PRINT S;",";Z;"Sekunden"
310 PRINT V$;"Km/h"
350 HU = 20 : IF V > HU THEN POKE 56576+1,PEEK (56576+1) OR 4 : REM Sirene/Hupe an - HU = Vergleichsgeschwindigk. in Km/h
360 FOR A = 1 TO 3000 : NEXT A
370 POKE 56576+1, PEEK (56576+1) AND 3 : REM Alle Ausgänge = "0" - Sirene/Hupe aus
380 END
400 D = INT(A/16)*10+(A AND 15) : A = D : RETURN : REM BCD > Dezimal
Bildliche Darstellung
|