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.
Hi in der vorletzten Elektor ist genau das was du beschreibst für Modellautos realisiert worden!!! (ist sogar auf dem Titelbild) mfg Christian
jo, da muss man sich aber der ihre Software kaufen, oder ? warum sind eigentlich platinen so teuer ? jo Axel
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
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?
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.
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
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.