Forum: Mikrocontroller und Digitale Elektronik Projekt für 8051- Messung der Ballgeschwindigkeit


von Sebastian Köster (Gast)


Lesenswert?

Ich habe von meinem Dozenten folgende Aufgabe erhalten und keine Ahnung
von Tuten und blasen bzw. von Assemblerprogrammierung (in C++ und Java
sieht es dann anders aus:-)

Könnt ihr mir weiterhelfen?

Für ein Fußballprojekt soll die Geschwindigkeit des Balles gemessen
werden, Hierzu wurde ein Lichtschranke im Abstand von 1m aufgebaut.
Erstellen sie ein Programm zur Messung der GEschwindigkeit. Verwenden
sie für die Messung Port 4. Richten sie Ihre Programm so ein, dass nach
Start (Taste Start) die Messung beginnt, wenn ein Signal am 1. Empfänger
der Lichtschranke auftrittt.

Zur besseren Absicherung des Ergebnisses wiederholen sie die Messung
mehrere Male und bilden darüber einen MIttelwert.

Das Ende der Messreiehe wird durc Betätigten der Taster Stopp
ausgelöst.
Speichern sie Ihre Ergebnisse (einzelne Messergebnisse und MIttelwert)
im exteren Specher ab der Adresse 9000H.
Eine Auflösung von 1 km/h wird erwartet. Berechnen sie die Messzeit
hierzu und geben sie Grenzwerte an. Die ANzeige des Ergebnisses
(Mittelwert) erfolgt über ein Display. Die Befehle hierfür werden
vorgeben.

Messbedingugen:

Messbeginn: Taste Start( PortPin 4.0) betätigt
Lichtschranke EMüfänger 1 PortPin 4.1
Lichtschranke Empänger 2 PortPin 4.2
Messung der Geschwindigkeit nach Auslösung Empfänger
Geschwindigkeitsauflösung 1 km/h
Anzeige Display
Ende der MEssung durch Taste Stopp PortPin 4.3
Mittelwertbildung nach der Anzahl der Messungen

von Schoasch (Gast)


Lesenswert?

Welchen µC musst du verwenden?
Wie sieht die Hardware aus? ISt die schon fertig oder musst die auch
noch machen?
Kennst du das Buch"Mikroprozessortechnik"?Ich glaube da ist so ein
ähnliches Beispiel in ASM drin.

von Sebastian Köster (Gast)


Lesenswert?

Nein das Buch kenne ich nicht ich mus denn INtel 8051 verwenden. Das
ganze ist eine reine fiktive Programmierung. Sprich wir programmieren
mit Keil µVision3

von Rahul (Gast)


Lesenswert?

Andreas Roth "Das Mikrocontroller Kochbuch" - sozusagen die deutsche
Bibel der 8051er.

In welchem Bereich liegen denn so die Geschwindigkeiten eines
Fussballs?

von Andreas B (Gast)


Lesenswert?

Interessantes Projekt, hört sich nicht allzu schwer an.

BTW: Ich denke die Frage nach dem Buch ist nicht gestellt worden, weils
Schoasch so interessiert ob du es kennst, sondern eher um dich darauf
hinzuweisen es auch zu lesen...

Gruß Andreas

von Karl heinz B. (kbucheg)


Lesenswert?

Das Ganze ist eine Variante einer Frequenzmessung

Lichtschranke1 öffnet ein fiktives 'Tor', Lichtschranke 2
schliesst es wieder. Während das Tor geöffnet ist, werden die
Impulse einer bekannten konstanten Frequenz gezählt (Hinweis:
zb. ein Timer generiert sowas). Nachdem sich das Tor wieder
geschlossen hat, wird abgelesen wieviele Pulse seit dem
Öffnen des Tores vergangen sind, daraus (wir kennen ja die
Frequenz) ergibt sich, wieviel Zeit vergangen ist und daraus
lässt sich wiederum die Geschwindigkeit berechnen.

Wenn du also alles was du hier um Forum und am Web zum Thema
Freqenzmessung findest, dann sollte dich das in die richtige
Richtung bringen. Aber Achtung: Es gibt 2 gängige Methoden zur
Frequenzmessung, dich interessiert nur die Methode die ein
'Tor' mit Zälung einer bekannten Frequenz einsetzt.

von Rahul (Gast)


Lesenswert?

Das ist doch eher eine Periodendauermessung.
Das "Tor" ist doch egal.
Man misst die Zeit zwischen zwei Impulsen, und muß die dann in eine
Frequenz/Geschwindigkeit umrechnen.
Würde die Controller-Familie nicht schon feststehen (und in der
Überschrift genannt sein), dann würde ich einen Mega-AVR mit ICP
vorschlagen. So mußt du es halt zufuß machen...
Mit dem Kontakt der ersten Lichtschranke startet man einen Timer, mit
dem Kontakt der zweiten hält man ihn wieder an. Gleichzeitig zählt man
die Anzahl der Schüsse und bildet den Mittelwert. Anzeige: aktuelle
Geschwindigkeit, Durchschnittsgeschwindigkeit, Anzahl der Schüsse. Dann
braucht man nur noch eine Taste, die die Anzeigen auf Null zurücksetzt,
um eine neue Runde zu starten.

Warum machen (wollen es)die Leute das immer so kompliziert...

von Rahul (Gast)


Lesenswert?

Nachtrag:
Frequenzmessung, wäre, wenn man für eine gewisse Zeit (z.B. 90 Minuten)
2 Tore aufmachen würde und dann die Anzahl der Flanken, die der Ball
erzeugt, wenn er von vor der Torlinie hinter diese bewegt wird, zählen
würde und dann diese Ereignis-Anzahl durch die Zeit teilen würde. Eine
Art Torfrequenz würde man dann haben...

von Sebastian Köster (Gast)


Lesenswert?

DIe GEschwindigkeiten eines Fußballes leigen zwischen 10 und 180 km/h
wenn ich auf die sichere Seite gehe liegt diese Seite bei 200 km/h

von Manos (Gast)


Lesenswert?

"Dozent" klingt irgendwie nach Studium... Und da bekommt Ihr Aufgaben
gestellt, deren Grundlagen noch nie behandelt wurden? :)

"Zur besseren Absicherung des Ergebnisses wiederholen sie die Messung
mehrere Male und bilden darüber einen MIttelwert."
Den möchte ich sehen der den Ball immer mit der gleichen
Geschwindigkeit  schießen kann^^

Aber das Prinzip sollte eigetlich klar sein...
Ball kommt durch erste Lichtschranke - Zeitmessung beginnt
Ball kummt durch zweite Lichtschranke - Zeitmessung endet
Entfernung zwischen den beiden Lichtschranken ist bekannt
Entfernung/Zeitdifferenz = m/s = viola :)

Mittelwert=Summe der Zeitdifferenzen/Versuche

Der Rest ist Software die Du am besten selber schreiben (und verstehen)
solltest für den Fall, dass der Dozent auf die dumme Idee kommt Fragen
zu stellen was in dieser oder jener Zeile gemacht wird...

von Manos (Gast)


Lesenswert?

"ist eine reine fiktive Programmierung"
Ich denke die Programmierung ist reell,
nur das Projekt ist fiktiv /* Klugscheiß ende */ :)

"Sprich wir programmieren mit Keil µVision3"
Aber Du bist Dir sicher dass es in Assembler sein soll?

von Sebastian Köster (Gast)


Lesenswert?

Na es soll für den Intel 8051 sein und wir Programmieren mit Keil
µVision 3

Also sprich der Mikroprozessor soll programmiert werden.

von Rahul (Gast)


Lesenswert?

Sehe ich das richtig? 200km/h sind für den Lichtschranken-Abstand 18ms
und 10km/h 360ms?
Da langweilt sich der Controller aber ziemlich...
Sollte aber mit der OVerflow-Auswertung problemlos machbar sein...
Viel Erfolg!

von Andreas B (Gast)


Lesenswert?

"Also sprich der Mikroprozessor soll programmiert werden."

Wie jetzt? Fiktiv oder nicht?

von Sebastian Köster (Gast)


Lesenswert?

Ja genau, der Mikroprozessor. Es wird nirgendswo real angewendet. Es
wird lediglich mit der Software getestet. Es ist ein fiktives Problem!

von Andreas B (Gast)


Lesenswert?

Sorry, aber wenn es ein fiktives Problem ist, wozu willst du dann den
Mikrocontroller programmieren, da reicht auch simulieren...

einen Mikrocontroller zu programmieren find ich persönlich eher
ziemlich real.... /* nitpick ende */

von Sebastian Köster (Gast)


Lesenswert?

Ob ich das jetzt Programmiere und auf den Prozessor draufschmeise oder
ob ich das Simuliere ist doch jetzt Pfennigfuchserei - Das Problem ist
doch ein ganz anderes!

von Rahul (Gast)


Lesenswert?

>Das Problem ist doch ein ganz anderes!
Genau!
Hast du schon einen Plan, wie du das lösen willst?

von Thorsten (Gast)


Lesenswert?

So wie Rahul das geschrieben hat passt das schon.
Interrupt bei Lichtschranke 1:
Timer starten
Interrupt bei Lichtschranke 2:
Timer stoppen
Timerwert im Speicher ablegen
Register inkrementieren um die Anzahl der Messungen aufzunehmen

Die Geschwindigkeit hast du dann ja aus der bekannten Entfernung der
Lichtschranken wie es Manos geschrieben hat.

Zur Mittelwertbildung die abgelegten Werte ab der Anfangsadresse
auslesen und aufaddieren.
Danach noch durch die Anzahl der Messungen (inkrementiertes register)
teilen und fertig.

von Ingo (Gast)


Lesenswert?

Schreibs in C, wenn ihr schon Keil verwenden dürft. Wird wahrscheinlich
einfacher für dich, wenn du schon C++ und Java kannst. Der Simulator
von Keil funktioniert ganz gut, wobei ich mich frage, wie du eine
fiktive Displayausgabe programmieren willst (UART? Parallel? ...)

von Hornet (Gast)


Lesenswert?

Was ohne Lichtschranke. Habe mal mit dem Entwickler geredet. Das geht
Schall aber genauer wollte er es nicht erklären.

http://www.unitron.ch/kickstar.html

von Sebastian Köster (Gast)


Lesenswert?

Das bringt mir halt nichts ich kann ja die Vorgaben nicht einfach
umkrämpeln - Sprich mir ist Lichtschranke vorgegeben. Und auf der Seite
steht ja nichts von ProgCoder oder?

von Manos (Gast)


Lesenswert?

Wenn Du möglicherweise jetzt doch mit C und nicht Assembler
programmieren darfst - gibt es dann jetzt noch Verständnisprobleme zu
Deiner Aufgabe oder meinst Du das reicht schon für einen
Programmierversuch? Wenn nicht - wo genau sind noch Unklarheiten?

@Hornet
Der "Kickstar" ist aber leider kein fiktives Projekt :D
Ich denke mal, dass das System über den Doppler-Effekt mißt.
Es gibt auch noch andere Messverfahren (z.B. Radar oder Laser) aber
hier war halt nach der simpelsten gefragt.

von Sebastian Köster (Gast)


Lesenswert?

Na ich denke für einen ersten Programmierbeginn reicht es, werde mich
ansonsten wieder melden. Fühle mich hier relativ kompetent beraten ;-)

Vielen Dank!

von Rahul (Gast)


Lesenswert?

>Fühle mich hier relativ kompetent beraten

Danke für die Blumen...

von Gernot F. (gernotfrisch)


Lesenswert?

Das ist natürlich völlig an der Praxis vorbei, weil der Ball ja dadurch
immer genau mit seiner Mittelachse durch die Lichtschranke sausen
müsste. Die Rundung des Balls würde sonst das Ergebnis verfälschen.
Klar, oder?
Man könnte eine Lichtschranken"mauer" aufbauen, aber dann ist immer
noch der Ball-flug-winkel von Bedeutung, der das Ergebnis bei 0° <->
45° um faktor 1.42 verfälschen würde.
Also, Theorie + lernen: fein
Praxis: untauglich

von Rahul (Gast)


Lesenswert?

@Gernot:
Man könnte auch einfach die Lichtschranken so dicht beieinander
positionieren, dass der Fehler nicht ins Gewicht fällt. Dann würde sich
der Mikrocontroller auch nicht so langweilen...
Da das sowieso nur eine Programmieraufgabe ist, ist der Sinn / die
Praxis wohl eher unwichtig.
Man hätte als Beispiel auch eine Kanonenkugel nehmen können. (das mögen
Pazifisten aber nicht so gerne...)
Oder Hamster, Lemminge ...

Wenn es einfach nur darum geht, sich als Übung mit einem Problem zu
beschäftigen, dann ist der praktische Nutzen / die praktische Funktion
eher nebensächlich, oder?

von Gernot F. (gernotfrisch)


Lesenswert?

Wie schnell stürzen die Lemmings von der Klippe? Cool! Ich wollt's ja
nur gesagt haben. Nicht das nacher einer kommt und meckert ;)

von Manos (Gast)


Lesenswert?

"Wie schnell stürzen die Lemmings von der Klippe?"
Im Vacuum würde er mit 9,81 m/s beim Fallen beschleunigen. Da die
Klippen auf unserer Erde für gewöhnlich noch in der Atmosphäre befinden
wird hier der Fall durch die Luftreibung gebremst bis zu einem v-max wo
dann die Größe und Gewicht des Lemmings wieder einen Einfluß drauf
haben  - siehe auch Fallschirmspringer (Lemminge mit Rucksack^^).

von Rahul (Gast)


Lesenswert?

9,81m/s²

>Lemminge mit Rucksack
Das sind doch eher Base-Jumper, oder?
Ich dachte auch eher an Hamstertreten...

von Moinsen (Gast)


Lesenswert?

So Leute, nun mal im Ernst: Man legt ja das High Byte und das Low Byte
des timers im speicher ab, aber wie bekommt man dann aus dieser zeit
km/h wenn der lichtschranken abstand 1 Meter ist?? Hab nämlich dasselbe
Problem da ich eine Geschwindigkeitsmessung für meine Rennbahn baue.

von Die meisten Elche (Gast)


Lesenswert?

Na, der Timer wird doch mit einer gewissen Frequenz getaktet, oder?

Nehmen wir mal einen Takt von 1 kHz an, dann entspricht ein Zählerstand
von 1 einer Messdauer von 1 ms.

1 m in 1 ms entspricht 1000 m in 1 s

Das ist recht schnell, nämlich 3600 km/h

Ein Zählerstand von 10 entspricht folglich 360 km/h, einer von 100
läuft dann auf 36 km/h hinaus, und einer von 1000 entspricht einem
Fußgänger mit 3.6 km/h

Eine Rennbahn (Carrera?) wird wohl irgendwo im Bereich des Fußgängers
liegen. Solange der Zähler in einer Messung nicht überläuft, ist alles
in Ordnung. Bei 1 kHz Takt würde der Zähler erst nach mehr als einer
Minute überlaufen - das schafft fast schon eine Weinbergschnecke.

von Norbert (Gast)


Lesenswert?

Hi,

Wie jetzt?

Du hast die Zeit gemessen.
Du hast die Strecke.
Geschwindigkeit ist Strecke/Zeit.
Ist Dir nicht ganz klar wieviel m ein km ist?
Oder 8µs-Einheiten im Timer und Du weisst nicht wie Du das in Stunden
umrechnest?
Wo ist das Problem?

Gruß,
Norbert

von Klaus L. (kllei)


Lesenswert?

Hallo Sebastian,

einen Teil Deiner Aufgabe habe ich in meinem Tacho Projekt für den
89C2051 (8051 kompatibel) schon gelöst, und auch ein paar Erklärungen
dazu geschrieben. Ist in Assembler geschrieben, aber vielleicht hilft
Dir das ja weiter.

http://www.mikrocontroller-projekte.de/RC-Elektronik/Tester/Tacho/Tacho.html

Der Geschwindigkeitsbereich ist bis 255 Km/h.

Das Projekt von mir ist allerdings schon etwas älter, verschone mich
bitte von Programmierungsanfragen, ich hab schon ewig nichts mehr für
8051 gemacht ;-) ...

Viele Grüße,
Klaus

von Moinsen (Gast)


Lesenswert?

Der Mikrocontroller wird mit einer Taktung von 12 MHz getaktet. Wie
setzt sich dann die Rechnung zusammen???

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

Der "klassische" 8051 teilt die Taktfrequenz durch 12...

Für solche Sachen ist das "Mikrocontroller Kochbuch" von Andreas Roth
gut...

von Manos (Gast)


Lesenswert?

Sofern Du den vollen Takt auf dem Timer hast (ohne Teiler) ersetzt Du
einfach in obiger Rechnung die 1kHz durch 12MHz. Wichtig ist natürlich,
dass der Timer nicht überläuft bei der Messung.

Sollten Deine Lichtschranke nicht 1m auseinanderstehen (davon gehe ich
mal aus) mußt Du auch diesen Wert entsprechend anpassen.

Willst Du den Wert noch was schönrechnen kannst Du auch noch den
Modellmaßstab mit einbeziehen (z.B. Geschwindigkeit x 32 bei Carrera
Universal)

von Moinsen (Gast)


Lesenswert?

Kann mir das mal bitte jemand erklären?? Wenn ich einen Takt von 12Mhz
habe und mein Timer 50000µs zählt bis der Interrupt kommt.

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

>Kann mir das mal bitte jemand erklären?? Wenn ich einen Takt von >12Mhz
habe und mein Timer 50000µs zählt bis der Interrupt kommt.

Was soll man dir da erklären?
Wie schon erwähnt: viele 8051er teilen die Oszillatorfrequenz durch 12
(deswegen auch 12MHz-Quarze).
Intern läuft das Ding dann mit 1MHz. Wenn man den Timer entsprechend
konfiguert (anhand irgendwelcher Bit in irgendwelchen Registern...),
dann wird dieser Timer mit 1MHz betrieben. Somit dauert ein Überlauf
65,536 ms bei einem 16Bit-Timer.
Wie du auf die 50000µs kommst, müsstest du uns erklären.

von Moinsen (Gast)


Lesenswert?

das mit den 50,000ms ist ja ganz einfach indem ich den timer einfach
vorlade und zwar th0 mit 3c und tl0 mit af dann steht der timer auf
15535 und läuft dann bis 65535, das sind dann 50ms.

von Karl heinz B. (kbucheg)


Lesenswert?

> Kann mir das mal bitte jemand erklären?? Wenn ich einen Takt
> von 12Mhz habe und mein Timer 50000µs zählt bis der
> Interrupt kommt.

Ich geh mal aus dass du meinst: ... und mein Timer bis
50000 zählt bis der Interrupt kommt.

Nun ja. Das ist Grundschulmathematik. So nach dem Muster
1 Apfel kostet 1 Euro, wieviel kosten 25 Äpfel.

Also: Bei 12 Mhz und einem Teiler von 12, zählt dein Timer
in 1 Sekunde bis 1000000. Wieviel Zeit ist also vergangen, wenn
er nur bis 50000 zählt?

    1000000  ......   1 Sekunde
      50000  ......      x
   -----------------------------
              1 * 50000
         x = ------------- = 0.05 Sekunden
               1000000

D.h. der Ball braucht 0.05 Sekunden um eine Strecke von
1 Meter zu durchfliegen.

Grundkurs Physik:
                       Weg         1
    Geschwindigkeit = ------   = ------ = 20 m/s
                       Zeit       0.05

Jetzt noch die Umrechnung von m/s auf km/h

             20 * 3.6  = 72 km/h

von Karl heinz B. (kbucheg)


Lesenswert?

> das mit den 50,000ms ist ja ganz einfach indem ich den timer
> einfach vorlade

Woher weisst du denn, mit welchem Wert du den Timer vorladen
musst.

Machs doch nicht so kompliziert:
Wird die erste Lichtschranke betätigt, beginnt der Timer
bei 0 zu zählen. Wird die zweite Lichtschranke betätigt,
wird der Timer wieder gestoppt.

von Moinsen (Gast)


Lesenswert?

ja ok, aber wie bekomm ich dann die ms weil der timer ist ja in high und
low byte geteilt.

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

Wenn du ihn als unsigned int (16bit breites Datendingsbums) ausliest,
hast du es... dann mußt du dich nur noch mit 16bit-Arithmetik
auseinandersetzen...

von Manos (Gast)


Lesenswert?

Die nachvollziehbarste Methode wäre einfach die 8 Bit aus dem
High-Register * 256 + dem Low-Register in eine min. 16 Bit breite
Variable.

In C gibt es auch schnellere Methoden mit shiften, aber auf Zeit kommt
es in dieser Auswertung nicht an.

von Moinsen (Gast)


Lesenswert?

wie bring ich dann das high * 256 wieder in ein 16 bit register?

von Gernot F. (gernotfrisch)


Lesenswert?

unsigned long i16 = (high <<8)+low;

von Gernot F. (gernotfrisch)


Lesenswert?

ach!
unsigned short (oder besser: int_16t)

von Moinsen (Gast)


Lesenswert?

und wie sieht das in assembler aus?

von Gstina (Gast)


Lesenswert?

son scheiß mann !!
da checkt ma gar nix!!!

von Manos (Gast)


Lesenswert?

*ja, sachlich richtig, hätt ich nicht schöner ausdrücken können*

@Gstina
Wo drückt denn der Schuh? Lass uns doch teilhaben an Deinem Problem...
Wir kauen das gerne noch mal Durch wenn Du uns sagst, wo Du nix checkst
- aber eigentlich dachte ich die Logik wäre soweit klar gewesen...

von MisterOgrinste (Gast)


Lesenswert?

ne wir können dir nicht weiterhelfen!

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.