www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Geschwindigkeitsberechnung in Assembler


Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag

Ich habe die Aufgabe mit zwei Lichtschranken eine Geschwindigkeit (z.B. 
von einem Ball) zu berechnen, in Assembler. Den Abstand der beiden 
Lichtschranken kann ich selber bestimmen, dachte da an etwa 200mm!
Meine Frage ist ob mir jemand helfen kann bei der Funktion für die 
Berechnung der Geschwindigkeit? (v=s/t)

Gruss und Danke Heinz

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe die Aufgabe ...

In welche Klasse gehst Du denn?

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin jetzt im 2. Lehrjahr. Habe aber die Aufgabe von meinen 
Lehrmeister bekommen!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

In Assembler macht man das wie in anderen Programmiersprachen auch: Zeit 
messen - Formel abarbeiten - Ergebnis anzeigen.

Was ich eigentlich sagen will: Ohne konkrete Angaben, wie: 
Controller,verfügbare Hard- und Software wirst du nur lapidare Antworten 
bekommen.

MfG Spess

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo! ich nehme mal folgendes an: du willst ne translation messen, die 
als übliche SI-Einheit dargestellt werden soll. Wenn  du die zeit 
gemessen hast brauchst du nur noch wie du schon gesagt hast, v = s/t

also musst du für ergebnis in m/s die gemessene Zeit in MILI-Sekunden 
haben! Du teilst dann den Wert des Weges in mm!! durch die gemessene 
Zeit in ms. Die "mili" kürzen sich dann weg.

c code:

char t,v;
.
.
.
v = 200/t;

ASM-Code:    // in main wird die rechnung v=s/t vollzogen(t in ms und s 
ist 200mm)

  processor  16F689
  radix  DEC

Carry       EQU   0
RP0         EQU   5
RP1         EQU   6
t           EQU   0x24
v           EQU   0x25
C1cnt       EQU   0x20
C2tmp       EQU   0x21
C3rem       EQU   0x23

  GOTO main

 main

  MOVLW .200
  BCF   0x03,RP0
  BCF   0x03,RP1
  MOVWF C2tmp
  CLRF  C3rem
  MOVLW .8
  MOVWF C1cnt
m001  BCF   0x03,RP0
  BCF   0x03,RP1
  RLF   C2tmp,1
  RLF   C3rem,1
  MOVF  t,W
  SUBWF C3rem,W
  BTFSS 0x03,Carry
  GOTO  m002
  BCF   0x03,RP0
  BCF   0x03,RP1
  MOVF  t,W
  SUBWF C3rem,1
  BSF   0x03,Carry
m002  BCF   0x03,RP0
  BCF   0x03,RP1
  RLF   v,1
  DECFSZ C1cnt,1
  GOTO  m001
  SLEEP
  GOTO main

  END

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich programmiere das Ganze mit der Umgebung uVision2 auf dem MESA. 
(C509)

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Dann muss ich passen.

MfG Spess

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du diesen Quellcode auch für Mikrocontroller (C509), programmieren 
keinen PIC!=)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum fragst du? ich kenne den befehlssatz von deiner MCU nicht.

ich denke da wird es nicht viel anders sein. Welche Befehle kennt der 
denn nicht?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hast du diesen Quellcode auch für Mikrocontroller (C509), programmieren
>keinen PIC!=)

direkt gesagt: Du wirst hier niemanden finden, der Dir Deine Arbeit 
abnimmt. Zeige, was Du selbst gemacht hast, und frage, wo Du nicht 
weiterkommst. Im 2. Lehrjahr (wovon auch immer) solltest Du lernen, 
Aufgaben zu lösen und nicht abzuschreiben.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinz wrote:
> Ich programmiere das Ganze mit der Umgebung uVision2 auf dem MESA.
> (C509)

Wow, schon im 6.Posting rückst Du mit dem wichtigsten raus.
Wozu auch die Postingregeln lesen (3. Punkt).


Der C509 ist ein 8051 mit einigen Siemens typischen Gemeinheiten 
(Abweichungen zum Standard-8051).

Eine Capture-Unit sollte er aber haben.

Du legst die beiden Lichtschranken auf 2 Capture-Eingänge und wählst den 
Abstand so, daß bei der langsamsten zu messenden Geschwindigkeit die 
16Bit ausreichen.

Beide Capturewerte subtrahieren und schon hast Du die Zeitdifferenz.
Dann noch v = s/t rechnen.



Peter

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Problem ist, die Geschwindigkeit einigermassen genau zu berechnen, 
ich kann ja in Assembler nicht die Geschwindigkeit in m/s mit 3.6 
multiplizieren, sondern nur mit ganzen zahlen.
kann mir da jemand helfen?

gruss

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, Assembler für C509 ist nicht mein Gebiet, aber ganz unabhängig von 
der Programmiersprache solltest Du mal mit grundlegender Mathematik 
überlegen, ob man eine Multiplikation mit 3,6 nicht vielleicht durch 
andere Operationen mit ganzen Zahlen ersetzen könnte. 3,6 ist 
schließlich nichts anderes als 36/10, also sollte das ganze ziemlich 
unproblematisch sein...

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, an das mit 36/10 hab ich auch schon gedacht, aber da gibt es ja 
ziemlich oft eine zahl welche 2 Bytes beträgt.. und da weiss ich au 
nicht mehr so wirklich weiter.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibts diese seite nur in englisch?

Autor: Matthias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke das Schulsystem in der Bundesrepublik ist dem in der 
ehemaligen DDR so überlegen - und da lernt man kein Englisch?

Gruß Matthias

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>gibts diese seite nur in englisch?

Wozu gibt es Babelfish und so?

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer wrote:
>>gibts diese seite nur in englisch?
>
> Wozu gibt es Babelfish und so?

Falls man das Original noch verstehen konnte, nach einmal Babelfish ist 
es völlig vergurkt - siehe untenstehenden Satz.
Ist zwar die falsche Übersetzungsrichtung aber trotzdem symptomatisch.

Es geht um das Überschwingen einer Heizung bei schlecht eingestellten 
Regler-Parametern und eventuell daraus folgendem Schaden.


With systems, as for example the metal block described above easily an 
overshooting of several 100 degrees can occur and lead if necessary to 
damage.

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, aber es geht ja hier eigentlich au nicht um babelfish..!

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Enweder einen Übersetzer wie Babelfish oder so (gibt ja auch noch 
andere...) oder man setzt sich mit dem englischen Text auseinander.
Da es sich um Fachenglisch handelt, ist der Wortschatz recht begrenzt.
Das sollte man mit einem Wörterbuch schaffen...

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.