Forum: Mikrocontroller und Digitale Elektronik Berechnung Schleife


von Sebastian (Gast)


Lesenswert?

Hallo,

kann mir jemand bei der Berechnung der Schleife für 10 Millisekunden 
helfen?
Wie berechne ich möglichst genau den Reloadwert. Muss ich jetzt erst in 
Assembler übersetzen und dann schauen wie lange ein Scheifendurchlauf 
ist? Wenn ja, kann mir jemand sagen wie ich das mache.

1
void warte_10ms (unsigned char wiederholungen)                  // Zeitschleife 10ms interner Oszilator 7.3728MHz
2
{
3
  unsigned char uc_schleife;
4
  unsigned int ui_schleife;
5
6
  for (uc_schleife = 0; uc_schleife < wiederholungen; uc_schleife++)
7
  {
8
    for (ui_schleife = 0; ui_schleife < 0x????; ui_schleife++);            // "ui_schleife" von 0 bis 65535 "0x???? fuer 10ms"
9
  } 
10
}

Danke!

von Peter II (Gast)


Lesenswert?

Sebastian schrieb:
> kann mir jemand bei der Berechnung der Schleife für 10 Millisekunden
> helfen?

vermutlich niemand. Du hast nicht einmal geschrieben für welche CPU das 
werden soll.

Es gibt eigentlich auf allen üblichen Plattformen schon fertige Sleep 
Funktionen - warum nimmst du die nicht?

Wenn du es wirklich selber machen willst/muss würde ich einen Timer 
verwenden - aber dafür müsste man die Hardware kennen.

So einfach wie du es gemacht hast geht es nicht, weil je noch 
Optimierung etwas anders rauskommt.

von Eric B. (beric)


Lesenswert?

Da du keinerlei Angaben machst über den Prozessor, verwendeten Compiler 
usw kann ich nur sagen dass deine leere Schleife vom Compiler 
wahrscheinlich komplett wegoptimiert wird und es ziemlich egal ist 
welcher Wert da hingeschmissen wird.

EDIT: Peter II -> High five

von Sebastian (Gast)


Lesenswert?

Entschuldigung, hatte ich vergessen.
Ich habe ein STK500 mit einem ATmega8 bestellt und will AVR-Studio 
benutzen.

Grüße

von Peter II (Gast)


Lesenswert?

Sebastian schrieb:
> Entschuldigung, hatte ich vergessen.
> Ich habe ein STK500 mit einem ATmega8 bestellt und will AVR-Studio
> benutzen.

dann nimmt etwas fertiges.

http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html

(aber eine Wartzeit ist meist keine gute Idee, das wirst du früher oder 
später merken, der Zeit kann die CPU nicht weiter machen und das will 
man nicht).

von Sebastian (Gast)


Lesenswert?

Okay, vielen Dank. Ich werde mir das anschauen und versuchen zu 
verstehen. Das ist natürlich kompfortabel wenns da schon was fertiges 
gibt. Jetzt muss ich nur noch verstehen wie man das einbindet und was da 
dann genau passiert. Ich dachte, wenn ich mir das mit Berechnung der 
Zyklen selber baue, wäre es das genauste und dazu noch fürs Verständnis 
gut.

Peter II schrieb:
> (aber eine Wartzeit ist meist keine gute Idee, das wirst du früher oder
> später merken, der Zeit kann die CPU nicht weiter machen und das will
> man nicht).

Manchmal ist es aber doch notwendig einfach zu warte, oder? Zum Beispiel 
bei Timings von einem Bauteil am I2C.

Grüße

von Peter II (Gast)


Lesenswert?

Sebastian schrieb:
> Manchmal ist es aber doch notwendig einfach zu warte, oder? Zum Beispiel
> bei Timings von einem Bauteil am I2C.

aber da geht es meist nur im Mikro oder Nano Sekunden

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.