Ich fange momentan an mit dem microcontroller zu programmieren in Assembler. Mein projekt, das ich mache sind zwei lichtschranken, die im Abstand von etwa 1 Meter stehen sollen und ein objekt an lichtschranke 1 startet, was die Zeitmessung an meinem Timer vom CHip auslöst und wenn das auto an lichtschranke 2 kommt soll die zeit gestoppt werden. Die genommene Zeit soll weiterverwendet werden um die durchschnittsgeschwindigkeit des Körpers zu berechnen. Jetzt ist meine Frage: Wie realisiere ich das in Assembler,könnte mir dabei jemand mit dem Programmcode helfen? und wo gibt es gute tutorials zur assemblerprogrammierung? Kennt jemand schon so ein projekt (also den Quellcode) oder hat jemand die projekt gar selber schon gemacht? Ich bräuchte auf jeden fall hilfe bei der programierung und hoffe hier kann mir jemand die grundprinzipien wie man bei dem projekt vorgeht und was zur programmierung sagen. Gruss Alex Haydl
es wäre super nett, wenn ihr mir dabei helfen könntet! Gruss Alex
Die Zeitnehmung als solche ist kein Problem. Du solltest dir aber im Vorfeld einige Fragen beantworten: *) welche CPU möchtest du einsetzen? *) wie sollen die Daten weiterverarbeitet werden? (Display, serielle,..) *) welche Auflösung strebst du an (z.B. 1/10 km/h) bei meinem ersten Projekt in dieser Art war ich verwundert dass mehrere Läufer immer aufs Komma genau die selbe Geschwindigkeit hatten -> wenn man die Zeit nur in 1/10-Sekunden mißt darf man sich halt nicht wundern wenn es von einer zur nächsten "möglichen" Geschwindigkeit Sprünge gibt (halt wohl was mit Quantisierungsfehler zu tun) *) wie soll das Handling von dem System sein. z.B. Scharfstellen - durch fahren - anzeigen - warten auf Restart oder jede Auslösung werten und immer den letzten anzeigen, darf man in beiden Richtungen durch oder nur in einer .... *) Plausibilitätsprüfung der Werte u.s.w. Ich würde eine CPU verwenden die mindestens zwei flankengetriggerte Interrupts kann und über einen Timer verfügt. *) warten auf reset (Tastendruck?) *) Display löschen bzw. "ready" anzeigen und enable Int1 *) idlen bis fertig-flag oder error-flag gesetzt *) entsprechende info anzeigen *) und an den Start *) der erste Interrupt setzt den Zähler auf null, sperrt den Int1 und enabled Int2 und Timer-overflow *) der zweite Interrupt stoppt den Zähler, setzt das fertig-flag und disabled alle Ints *) der Timer Overflow Interrupt setzt das error-flag und disabled alle Ints grüsse leo9
@leo ich werde den atmel at89s8253 benutzen. Der hat 3 Timer insgesammt. Kannst du das etwas genau erläutern, wie das mit dem overflow funktioniert? Gruss Alex
Dass hängt von deinen zu erwartenden Gschwindigkeiten ab. Wenn z.B. das langsamste Meßobjekt mit 1km/h unterwegs ist, sollte die Software 3,6s nach Auslösen der ersten Lichtschranke eine "Fehlermeldung" ausgeben (natürlich vorausgesetzt dass die zweite Schranke nicht auslöst). Wenn du einen Timer so konfigurierst dass er alle 100ms inkrementiert wird, stellst du beim Auslösen der ersten Schranke den Zähler auf 256-36 und wartest. Jetzt passiert entweder ein Interrupt ausgelöst von der zweiten Schranke (-> Messung OK) oder vom Timer Overflow (-> Objekt zu langsam, stehengeblieben oder sonstwas) grüsse leo9
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.