Zitat Zitat von lokirobotics Beitrag anzeigen

Bei jedem Refresh wird eine Routine angestoßen, die den Inhalt der Servotabelle einfach auf die Ports schmeißt. In der Tabelle sind die Übergangszeiten (sprich von der aktuellen Zeile zur nächsten), sowie die Pin Signale kodiert. Wie du selber sagst, ist die kürzeste Zeit 0,75ms, die Längste 2,25ms. Das ist eine Differenz von 1,5ms. Bei den von dir vorgegebenen Zeitintervallen wäre die maximale Abarbeitungszeit der Tabelle 1,5ms. (Eintrag eins ausgeben, 1,5ms warten, Eintrag zwei Ausgeben, return).
Die Idee klingt gut. Der µC hätte ja nicht viel zu tun sonst, da stört es nicht weiter wenn mal 1,5ms nix passiert denke ich mir.

Was mir noch gar nicht klar ist, wie Du die Zeit mißt wenn Du jetzt, sagen wir Servo 1 ein Positionssignal von 1500µs schicken willst? Zählst Du da einen Timer mit?

Kann ich mir das so Vorstellen: Die Routine wird aufgerufen und alle Pins wo Servos drauf hängen gehen auf High. Dann läuft ein Zähler im Hintergrund mit. Sagen wir erster Servo 1000µs zweiter Servo 1500 µs. Sobald der Timer auf dem Wert ist der 1000µs entspricht wird der erste Pin auf Low geschaltet. Und wenn der Zählerwert den 1500µs entspricht wird der nächste Pin auf Low gesetzt. So ungefähr?

Wie frägst Du das ab? Mit if? Case? Bekommst Du da keine Zeitprobleme beim Zählerstandvergleich? Wie gesagt dauert 1µs ja gerade mal 16 Takte bei 16Mhz Taktung.

Du hast ja nicht zufällig ein C-Codeschnippsel für mich von der Routine?

LG