mikrocontroller.net

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


Autor: Alex.Haydl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex.Haydl (Gast)
Datum:

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

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex.Haydl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.