Hey Leute!
Ich veruche jetzt schon seit einiger Zeit eine Funktion in "C" zu
schreiben, die mir hundertstel Sekunden in das Format
"hh:mm:ss,hundertstel" umwandelt.
Leider war ich bis jetzt vollkommen erfolglos dabei...
Die Ausgabe soll in einen String übergeben werden, um diesen dann
seriell zu übertragen...
etwa so:
Das ganze sollte dann so aussehen:
> 1. 01:23:34,56> 2. 01:23:35,67> 3. ...........
Eine weitere Variante die ich auch noch benötigen würde, wäre dann die
differenz anzeigen zu lassen:
> 1. 01:23:34,56> 2. +00:00:01,11> 3. ...........
Ich hoffe ihr könnt mir bei meinem Problem weiterhelfen...
lg Patrick
PS: Ich verwende CVAVR und einen Mega8
Was waren deine Ansätze bis jetzt? Kann ja nicht sein, dass du garnix
hinbekommen hast.
Kannst ja mal mit Stück Papier 3999 Sekunden in h:m:s umwandeln, im Kopf
halt.
David W. wrote:
> Was waren deine Ansätze bis jetzt? Kann ja nicht sein, dass du garnix> hinbekommen hast.>> Kannst ja mal mit Stück Papier 3999 Sekunden in h:m:s umwandeln, im Kopf> halt.
Ich hab mich mal etwas mit EXCEL gespielt und hab dort mal
herumgerechnet (mit einfachen WENN und ODER) - das hat aber auch nicht
so geklappt...
also bei deiner Rechnung sollten 01:06:39 herauskommen, wenn ich mich
nicht verrechnet habe...
lg
Tja, aber in C bekomme ich das nicht so auf die Reihe, wie wenn ich das
Händisch mache...
Das was Sonic geschrieben hat, verstehe ich nicht so ganz - um ehrlich
zu sein...
lg
Recht einfach:
- Start der Messung: Timer1 =0, Timer1 starten
- Output-Compare-INT zählt im Millisekundentakt hoch
- im INT werden Sekunden, Minuten, Stunden und Tage hochgezählt
(einzelne Variablen)
- Stop der Messung: Timer1 stoppen
- Zählerstand Timer1 auslesen, 2000 entspricht 1ms bei 16MHz
d.h., Auflösung beträgt 1/2000 ms
Jetzt kann gerechnet werden.
Also ich bekomme einen Wert von einem anderen Mikrocontroller per TWI
übertragen. Diesen Zahlenwert möchte ich jetzt "einfach" aufspalten also
ich denke mal genau umgekehrt als bei deiner Lösung...
Ich bekomme beispielsweiße den Wert 3999 übertragen und möchte diesen
umwandeln lassen, damit ich dann eben eine Anzeige "hh:mm:ss,ff"
erhalte...
lg
sorry..
ich meinte 3999000 hundertstel...
also ich habe mir das so berechnet:
Stunden=Hundertstel/3600000
Minuten=Hundertstel/60000
Sekunden=Hundertstel/1000
Stunden=1,110833333 ==> 1h
aus den Nachkommastellen erhalte ich die Minuten:
0,110833333*60=6,65 ==> 6min
aus den Nachkommastellen erhalte ich die Sekunden:
0,65*60=39 ==> 39s
Daraus erhalte ich dann 01:06:39,000...
Jetzt brauch ich nur eine Funktion dafür in C...
Gibt es einen Befehl, mit dem ich nur die Nachkommastellen einer Zahl
verwenden kann? - also die stelle vor dem Komma vernachlässigen kann?
lg
3999 % 60 = 39 (s)
3999 / 60 = 66
66 % 60 = 6 (min)
66 / 60 = 1
1 % 24 = 1 (h)
1 / 24 = 0
0 % 30 = 0 (d)
Bei 1/100 musst du natürlich noch nen %100 /100 davorsetzen.
% = mod = Rest bei einer Division
/ = Ganzzahldivision, schneidet also die Dezimalen nach dem Komma ab
(ohne Runden)
@ Patrick F.:
Irgendwo mußt Du ja Deine Zeit herbekommen, oder ?
Wo soll das ganze denn laufen µC oder PC oder Armbanduhr ?
Nehmen wir mal ATMEL Mega8 µC an:
1
ISR(TIMER0_OVF_vect)
2
{
3
4
// time in second/100
5
timetick++;
6
if(timetick==39)
7
{
8
timetick=0;
9
hundertstelsekunde++;
10
}
11
12
//compute time
13
if(hundertstelsekunde==100)
14
{
15
hundertstelsekunde=0;
16
if(++second>59)
17
{
18
second=0;
19
if(++minute>59)
20
{
21
minute=0;
22
if(++hour>23)
23
{
24
hour=0;
25
}
26
}
27
}
28
}
29
30
}
31
32
33
voidinitTimer0(void)
34
{
35
TCCR0=(1<<CS00);// Full 1MHz
36
}
OK ist nicht ganz genau da 10000/256=39,0625 sind und nicht 39 aber das
Prinzip ist klar !
Mit einem Baudratenquarz der auf die Zweierpotenzen eingestellt ist
kannst Du's ganz exakt ausrechnen !
Wo liegt das Problem ?
> Gibt es einen Befehl, mit dem ich nur die Nachkommastellen> einer Zahl verwenden kann? - also die stelle vor dem Komma> vernachlässigen kann?
Om Gottes willen nicht mit Flieskomma rechnen. Das
brauchst du nicht.
Alles was du brauchst sind in C / und %
/ Division zweier Zahlen
% Rest der bei der Division entsteht
( So wie in der Grundschule: Eine Mutter hat 3 Kinder und
7 Äpfel. Wenn jedes Kind gleich viele Äpfel bekommt, wieviele
Äpfel bleiben dann der Mutter übrig.)
Bsp: 95 Sekunden sind wieviele Minuten und Sekunden
95 % 60 -> 35
95 / 60 -> 1
95 Sekunden sind also 1 Minute und 35 Sekunden
4876 Sekunden
14876 % 60 -> 56 Sekunden
14876 / 60 -> 247 Minuten
|
+---------------+
v
247 % 60 -> 7 Minuten
247 / 60 -> 4 Stunden
4876 Sekunden sind also
* 4876 Sekunden
* 247 Minuten und 56 Sekunden
* 4 Stunden und 7 Minuten und 56 Sekunden
Warum immer division durch 60.
Weil 1 Minute 60 Sekunden hat
Weil 1 Stunden 60 Minuten hat
Wenn du auch noch Tage brauchst, dann dividierst du
die Stunden klarerweise durch 24.
Und um von Hunderstelsekunden auf Sekunden zu kommen
ist das eine Division durch 100
Karl heinz Buchegger wrote:
>> Gibt es einen Befehl, mit dem ich nur die Nachkommastellen>> einer Zahl verwenden kann? - also die stelle vor dem Komma>> vernachlässigen kann?>> Om Gottes willen nicht mit Flieskomma rechnen. Das> brauchst du nicht.>> Alles was du brauchst sind in C / und %>> / Division zweier Zahlen> % Rest der bei der Division entsteht> ( So wie in der Grundschule: Eine Mutter hat 3 Kinder und> 7 Äpfel. Wenn jedes Kind gleich viele Äpfel bekommt, wieviele> Äpfel bleiben dann der Mutter übrig.)>>> Bsp: 95 Sekunden sind wieviele Minuten und Sekunden>> 95 % 60 -> 35> 95 / 60 -> 1>> 95 Sekunden sind also 1 Minute und 35 Sekunden>>> 4876 Sekunden>> 14876 % 60 -> 56 Sekunden> 14876 / 60 -> 247 Minuten> |> +---------------+> v> 247 % 60 -> 7 Minuten> 247 / 60 -> 4 Stunden>>> 4876 Sekunden sind also> * 4876 Sekunden> * 247 Minuten und 56 Sekunden> * 4 Stunden und 7 Minuten und 56 Sekunden>> Warum immer division durch 60.> Weil 1 Minute 60 Sekunden hat> Weil 1 Stunden 60 Minuten hat>> Wenn du auch noch Tage brauchst, dann dividierst du> die Stunden klarerweise durch 24.> Und um von Hunderstelsekunden auf Sekunden zu kommen> ist das eine Division durch 100
Vielen Dank!
Genau dannach habe ich gesucht...
Jetzt sollte ich es schaffen...
lg Patrick