Fürs Aufmachen von Threads gibts aber keine Prämien. Mach (bei Bedarf)
lieber hier weiter. Neue Threads zu alten Themen müllen nur unnötig das
Forum zu.
Nochmal zum Fernsteuerimpuls und zur PWM.
Du willst (für Servos) Impulse erzeugen, die 1ms...2ms breit sind
(H)und einen Abstand (L) von etwa 18ms...20ms haben (wie in einer
Funkfernsteuerung). Mit einer herkömmlichen PWM (Hardware) stellst du
mit Taktquelle, Vorteiler und Zählumfang die Frequenz ein (bzw.
Periodendauer). Mit dem Vergleichswert stellst du ein, wieviel Prozent
(oder besser: wieviele Teile des Zählumfangs) dein Ausgang H sein soll.
Für die Helligkeit einer Lampe oder das Tempo eines Motors würdest du
0%...100% brauchen. Für ein Servo würdest du bei Periodendauer von 20ms
5% (1ms)...10% (2ms) brauchen. Du hättest also innerhalb des
Stellbereiches von 1ms bis 2ms eine sehr grobe Abstufung (5% von 256),
da sich der Zählumfang der PWM auf die Periodendauer (20ms) bezieht.
Eine Impulserzeugung per Software wird von einem geeigneten Timer alle
20ms angestoßen. Daraufhin wird in der Timer-ISR alle 10µs ein Zähler
hochgezählt und mit dem Sollwert des Servos (100...200) verglichen.
Beim Start (0) wird der Impulspin auf H gelegt, bei Erreichen des
Sollwertes wieder auf L. Dabei wird der Zähler auf 0 gesetzt, der Pin
des nächsten Kanals auf H gesetzt und mit dem nächsten Sollwert
verglichen. Sind alle Kanäle durch, dann hält man die Impulserzeugung
an. Nach Ablauf der 20ms (Synchronisation) wird die Impulserzeigung
wieder mit dem ersten Kanal gestartet.
Bei 8MHz Taktfrequenz erfolgt der Timer-Interrupt alle 80 Takte, da
würde sogar noch etwas Rechenzeit für ein Hauptprogramm
(Impulsbreitenmanipulation) übrig bleiben.
...