-
ja ich weiß, sorry war schlecht formuliert.
Ich wollte sagen:
Wenn ich aber 80ms nicht das machen will, was in den Klammern steht, dann das in den klammern abarbeiten, was ca. 0,5ms dauert, und dann wieder 80ms lang die Klammer überspringen will.
Ich weiß ja nicht wie lange das abarbeiten dauert, 0,5ms sind nur geschätzt.
lg Christoph
-
Das Problem das du jetzt hast, ist mir nicht klar. Riesenlange Funktionen stören natürlich.
In 10msec machst du bei 8MHz Takt immer noch 80000 Programmschritte. Da kannst du eine Menge abarbeiten.
-
immer wenn ich jetzt "warte" schreibe, meine ich nicht nix tun wie in einer _delay_ms funktion, sonder was anderes tun, zB fahren, andere entfernungswerte abarbeiten, geschwindigkeiten berechnen, usw...
- Nachdem ich den Befehl zum drehen gegeben habe, warte ich bis die neue position erreicht ist
- dann warte ich 80ms
- dann lese ich den AD-wert ein und berechne die entfernung (dauert angenommen 1ms)
- dann arbeite ich das restliche programm ab (i2c ausgaben, eingaben, fahren, andere entfernungswerte abarbeiten, geschwindigkeiten berechnen, usw...)
Das dauert vll auch ein paar ms.
Dann ist der zaehler sagen wir bei 85.
- es wird wieder der Befehl zum drehen gegeben
- es wird gewartet, bis die position erreicht ist (ca. 100ms)
Der zaehler ist beim wert 185.
- jetzt sollte er 80ms warten, das tut er aber nicht, weil die Abfrage lautet:
if(Zähler >=80)
{ lese AD-wert ein und berechne entfernung
}
...und zähler ist bei 185, also >=80
er liest also gleich den neuen AD-wert ein, obwohl er 80 ms warten sollte.
lg Christoph
-
Naja, so geht es natürlich nicht,
if(Zähler >=80)
{ lese AD-wert ein und berechne entfernung
Zähler = 0;
}
Dieses Zähler=0; gehört natürlich auch da hinein, war für mich aber selbstverständlich.
Genau so wie du ein Flag zurücksetzen musst, wenn es abgerufen wird.
-
ahh ja stimmt sorry ich war wohl gestern ein bischen gestört...
lg christoph