Forum: Mikrocontroller und Digitale Elektronik Geschwindigkeitserfassung


von Marc (Gast)


Lesenswert?

Hallo Leute,

hat schon mal jemand irgendwas zur Geschwindigkeitserfassung aufgebaut? 
Ich meine so in der Richtung: 2 Lichtschranken, Impulse zählen zwischen 
der Auslösung von beiden, das dann umrechnen und auf einem LCD ausgeben. 
Vor allem die Umrechnung würde mich interessieren. Mir geht es um 
Objekte bis maximal 100km/h.

von Christian (Gast)


Lesenswert?

Hi
in der vorletzten Elektor ist genau das was du beschreibst für 
Modellautos realisiert worden!!! (ist sogar auf dem Titelbild)

mfg
Christian

von Axel(ojojo) (Gast)


Lesenswert?

jo,

da muss man sich aber der ihre Software kaufen, oder ?

warum sind eigentlich platinen so teuer ?

jo
Axel

von Christian (Gast)


Lesenswert?

welche Software???

Die Software für den MC kannst du dir kostenlos von elektor.de 
runterladen!!!

Das Platinen Layout wird auch zur verfügung gestellt - ist gar nicht so 
teuer!!!

mfg

von Marc (Gast)


Lesenswert?

jo, danke schon mal, aber ich wollte das so halbwegs verstehen was ich 
da mache. Aber bei dem Assemblercode von der Elektor-Site verstehe ich 
nicht sonderlich viel. Ist wohl einfach etwas zu viel mit der 
Umschaltung zwischen Geschwindigkeit, Zeit und Strecke oder was auch 
immer da alles dabei ist. Jetzt versuche ich erstmal den Timer1 zum 
Laufen zu bekommen.
Wenn ich das geschafft habe überlege ich mir weiter wie man die 
gezählten Takte dann auswerten kann. Aber ich bekomme nur den Timer0 in 
Gang. Wer kann mir sagen wie das bei Timer1 funktioniert und wie ich ihn 
dann wieder stoppen kann?

von Sepp (Gast)


Lesenswert?

Weis leider nichts Sepp

von Josef (Gast)


Lesenswert?

Einfache Lösung der Geschwindigkeitsmessung:

Du musst dir mal überlegen, wie lange ein Fahrzeug für die Zurücklegung
eines Meters bei 100 KM/h benötigt. 1 Stunde hat 3600 sec. Das Auto
fährt in dieser Zeit also 100 KM, das sind 100 000 Meter/Stunde.
Das heißt, dass es 27,77 m je sec zurücklegt. Was wiederum bedeutet, 
dass es für 1 m 36 Millisekunden bei 100 KM/h benötigt (1 sec hat 
1000ms).
Wenn das Auto mit 1 KM/h fahrt, benötigt es also 3600 ms für diesen 
Meter.

Wir stellen also die 2 Lichtschranken in einer Entfernung von genau 1 
Meter auf und messen die Zeit vom Ausl. des ersten Schrankens bis zum
Ausl. des 2. Lichtschrankens.

Wir nehmen  einen Timerinterrupt, der genau alle ms eine
Routine abarbeitet. In dieser Routine wird einfach ein 16-Bit Register 
erhöht
(zB addw XL,1).
Beim Auslösen des 1. Lichtschrankens wird diese Register einfach auf 0
gesetzt. Beim Ausl. des 2. Lichtschranken wird der Timerinterrupt 
gestoppt
oder die X-Register ins RAM "gerettet". Fortsetzung folgt.

von Josef (Gast)


Lesenswert?

Fortsetzung von Josef

Jetzt müssen wir nur noch die Zahl 3600 durch diesen Wert in X 
dividieren
und wir haben die Geschwindigkeit. ZB.: gemessener Wert 56.
Also folgt: 3600/56=64KM/h. Die Auflösung ist so aber  mit ca 3 KM/h
beschränkt. Für den Anfang aber leicht genug.
Will man eine größere Auflösung, ist etwas mehr "Mathematik" notwendig.
Das Ergebniss (zB. 64 KM/h) müßen wir nun mit einer Routine
(auf ATMEL-Homepage) von Binär auf BCD umrechnen. Zu diesen
BCD-Werten müssen wir noch einen Ascii-Offset dazu addieren (0x30H)
und schon können wir die Geschwindikeit in KM/h in einer LCD-
Anzeige anzeigen.

Schöne Grüße Josef

von Marc (Gast)


Lesenswert?

Danke schon mal für die Antwort, aber das ist nicht genau das Problem 
das ich habe. Wie ich das berechnen kann weiss ich schon, aber wie 
dividiere ich mit einem MC, in der Befehlsliste für den 90S8515 finde 
ich bei den arithmetc instructions auf jeden Fall keinen Befehl dafür.
Ausserdem müsste ich das ganze etwas abändern weil ich nicht den Platz 
habe um den Abstand von 1m zu realisieren. Das soll bei mir auf 5 bis 10 
cm ablaufen. Damit ist also die Routine mit 1ms auch gestorben weil es 
zu ungenau wird. Die Genauigkeit sollte schon bei 1km/h liegen.

von Marc (Gast)


Lesenswert?

Habe mich jetzt dafür entschieden die Lichtschranken im Abstand von 10cm 
aufzustellen. Bei 4MHz und CK/64(Timer1) bekomme ich eine ausreichende 
Genauigkeit zustande. Die Berechnung ist dann 3600/((Zählwert 
Timer1)*10/62.5).  Aber momentan habe ich NULL Ahnung wie ich das in 
Assemblercode umsetzen kann. Falls da jemand eine Idee hat wäre das echt 
klasse.

von Andreas (Gast)


Lesenswert?

Hier gibt's die nötigen Mathe-Routinen:
http://users.i.com.ua/~birua/math32.asm
Falls ich mich jetzt nicht verrechnet habe musst du einfach 22500 durch 
den Timer-Wert dividieren. Oder, wenn's genauer sein soll, 225000/Timer 
(und dann halt noch das Komma an der richtigen Stelle anzeigen).

MfG
Andreas

von Marc (Gast)


Lesenswert?

Damit hast Du schon mal vollkommen recht, 22500 durch den Timerwert ist 
richtig. Diese Variante ist zwar wesentlich einfacher als meine ;) aber 
der Assemblercode von der Site die Du mir genannt hast geht irgendwie 
nicht.
Habe mir den Code einfach rauskopiert und dann mal in die register für 
dividend und divisor (jeweils das niederwertigste) 8 und 16 reingeladen, 
aber da kommt niemals nicht zwei raus.

von Andreas (Gast)


Lesenswert?

Mach's mal umgekehrt, dann kommt 2 raus!

Andreas

von Marc (Gast)


Angehängte Dateien:

Lesenswert?

Das hatte ich auch schon ausprobiert, aber bei mir kam da keine 2 raus.
Im Anhang ist der Code den ich verwendet habe. Vielleicht siehst Du ja 
was bei mir nicht passt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.