Davon gehe ich auch aus.
Hatte noch nicht die Zeit, die Servo-Bibliothek mit eigener Timer-Interrupt Steuerung zu ersetzen, hab das aber noch vor, da mir die Lib. sowieso zu ungenau unterteilt... Du könntest dich evtl. mal mit den Timern für Atmegas beschäftigen ..
Das hatte ich schon befürchtet... PS leider ist das Pin Mapping limitiert und du musst vermutlich einige Pins umplanen ..
Klar, das "gesamte" Programm.
Ja. Ich denke, wir können uns darauf einigen, dass durch die Unterbrechungen der ISR die Befehle in der Hauptschleife (bzw. "Main") weniger oft ausgeführt werden (können)... Deine Interpretation, dass Dein Programm ".. nur circa halb so schnell läuft.. " [ist] falsch.
Das wusste ich nicht. Wo finde ich die Datei?.. Die Länge [der ISR] kann aus der "meinfile.lls"-Datei abgeleitet werden. ..
Klar, Multithreading muss mit nur einem Prozessorkern hintereinander ablaufen... der Controller kann vom üblichen Programmablauf nur jeweils einen Schritt abarbeiten ..
Sollte auch kein Problem darstellen, wenn man bedenkt, dass die ISR hier nur jeweils einen Pin setzt oder rücksetzt. Es sollten sogar mehr als zehn Servos möglich sein, da die 50 Hz normalerweise nicht so kritisch sind... einen Kontroller der maximal zehn Servos bedient ..
Es sollte auch möglich sein, beides mit einem Timer abzuarbeiten, also Pulse und Pausen - ich hab mir das für meine zukünftige Ansteuerung überlegt. Das System ist ansonsten gleich:.. "Servotimer" - nennen wir ihn ST0 [...] dazu ein Timer ST1, der die Länge des Pulses begrenzt. ..
Puls1, Pause1 (ausrechnen), Puls2, Pause2 (ausrechnen),... die Pause muss so berechnet werden, dass (Puls+Pause)*6=20 ms ergibt, da ich momentan maximal sechs Servos verwende.
Man könnte die Restzeit alternativ auch hinten dran hängen, dann sollte Puls+Pause jeweils 2 ms lang sein, wobei - wie schon angemerkt - die angestrebte Frequenz nicht so wichtig ist.
Interessant wäre daher auch noch folgender Versuch (ebenfalls mit einem Timer):
Puls1, Puls2, ...Puls6, 11 ms Pause.
Nach meiner Rechnung schwankt die Frequenz dann zwischen 43,5 und 58,8 Hz. Ich denke, das sollte noch problemlos funktionieren. Hat sowas schon einmal jemand versucht?
Das ist richtig. Die Routinen nutze ich normalerweise nur für unwichtige Sachen in der Hauptschleife. Für zeitkritische Anwendungen nutze ich auch gerne Timer, die Variablen hochzählen, um genauso eine Art Boardtimer zu erhalten, mit dem man wiederum durch Flags Teile im Hauptprogramm starten kann, um die ISR möglichst kurz zu halten... Übrigens sind diese waitms- oder delayxx-Routinen böse Bremsen ..
Nebenbei, Archie sieht nach einem sehr interessanten Projekt aus!
Lesezeichen