Forum: Mikrocontroller und Digitale Elektronik Hilfe: IR-Lichtschranke - Programmierung in Assembler


von Alex.Haydl (Gast)


Lesenswert?

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

von Alex.Haydl (Gast)


Lesenswert?

es wäre super nett, wenn ihr mir dabei helfen könntet!
Gruss
Alex

von leo9 (Gast)


Lesenswert?

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

von Alex.Haydl (Gast)


Lesenswert?

@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

von leo9 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.