Geschwindigkeit berechnen

Gast #2176222
Lesenswert?
• ▲
▼
Hallo,
ich habe eine Frage bezüglich der Berechnung einer Geschwindigkeit.
Ich habe eine Zählerstand c, dieser wurde mit der Taktfrequenz von 12MHz 
und einem Prescaler von 1024 gezählt. Der Weg der zurückgelegt wurde 
beträgt 40cm. Wie kann ich nun am besten mit einem Atmega16 aus diesen 
Angaben die Geschwindigkeit berechnen, in km/h. Mit meiner Methode 
kommen nur unrealistische Werte heraus. Zum Schluss bräuchte ich den 
Wert als "string" in einem char-array, (ultoa). Es genügt eine 
Nachkommastelle, aber es wäre auch kein Weltuntergang wenn auf einen 
ganzen Wert gerundet wird. Ich hoffe ihr habt die Fragenstellung 
verstanden und könnt mir helfen.

MfG.: Benjamin
Gast #2176296
Lesenswert?
• ▲
▼
laiehoch10 schrieb:
> Mein Problem ist, ich kann mit C das irgendwie nicht berechnen. Ich
> weiss nicht wie ich richtig Floatingpoints vermeiden kann. Und wie ich
> die INT-zahlen am besten handhaben kann.

Dann zeige was du bisher gemacht hast. Die Meisten hier helfen gerne, 
aber lassen sich nicht gerne als Hausaufgabenlöser für Faule 
missbrauchen.
Gast #2176304
Lesenswert?
• ▲
▼
1
/*----Berechnung----*/
2
  if (k == 1 && m == 0)
3
   {               
4
     /*Zählerstand und Overflowzähler zusammenrechnen => Zeit zwischen INT0 und INT1
5
      mit Abstand zwischen Lichtschranken Multiplizieren.
6
      (overflow*256+Zählerstand)*(1/(FCPU/1024))=(overflow*256+zählerstand)*85 us = Durchlaufzeit
7
      Geschwindigkeit=Abstand der Lichtschranken*Durchlaufzeit
8
    */
9
    k = 0;              //weitere Berechnungen unterbinden
10
    counter = (overflow * 256) + TCNT0;    //Zaehlerstand berechnen
11
    times = counter * 85;        //Zeit in Sekunden Berechnen
12
    timeh = times / 36;          //Zeit in Stunden umwandeln
13
    timeh >> 8;              //6 Stellen für Sekunden und 2 Stellen für
14
    speed = timeh / distance;    //Berechnung der Geschwindigkeit und AUFrunden auf eine ganze Zahl
15
    speed >> 4;
16
    ultoa(speed,Speedt,6);
17
    strcat(Speedt," km/h");
18
    strcat(Speedt,"\0");
19
    lcd_init();
20
    _delay_ms(2);
21
    lcd_text(0,0,"Speed:");
22
    lcd_text(1,0,Speedt);
23
     }
Moderator (Firma: Titel) Persönliche Seite #2176308
Lesenswert?
• ▲
▼
laiehoch10 schrieb:
> Ich habe eine Zählerstand c, dieser wurde mit der Taktfrequenz von 12MHz
> und einem Prescaler von 1024 gezählt. Der Weg der zurückgelegt wurde
> beträgt 40cm.
v = s/t

> Ich weiss nicht wie ich richtig Floatingpoints vermeiden kann.
Das ist auch gar nicht dein Problem.

> Mein Problem ist, ich kann mit C das irgendwie nicht berechnen.
Das ist eigentlich ganz einfach. Du brauchst eine Division...

Ich mach dir mal kurz als Denksport deine Hausaufgaben:
Dein Zähler zählt in einer Stunde auf 42187500
42187500/h = 3600*12MHz/1024 = (3600*12000000)/1024*s
Wenn das gerade mal mit den 40cm = 0,0004km zusammentreffen würde,
dann hättest du also 0,0004 km/h.
Und die gesamte Formel lautet also
v = 0,0004km*(42187500/h)/c = (16875/c)km/h
Jetzt mußt du nur noch mit c=0 aufpassen...

Oder in C:
1
int v;
2
  if (c!=0) v=16875/c;
3
  else      v=999;

Und vor allem:
Nachvollziehen und KAPIEREN solltest du schon, was ich da gemacht habe.
(Firma: Schweigstill IT) Persönliche Seite #2176310
Lesenswert?
• ▲
▼
Das ist kein vollständiger Programmtext, sondern nur ein Fragment, aus 
dem sich nicht einmal die Variablendeklarationen entnehmen lassen.

Das, was sofort ins Auge sticht, sind die nutzlosen Anweisungen mit dem 
Schiebeoperator ">>", deren Ergebnisse nicht weiterverwendet werden.

Daher: C-Buch nehmen, lernen. Ggf. zunächst auf einem PC ausprobieren.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.