Hi,
ich habe gestern mal ein bischen rumexperimentiert. Das Problem war
folgendes:
Bei 4 MHz AVR-Taktfrequenz und 1ms Servo-Impuls (von ganz rechts bis
ganz links) möchte ich schon die vollen 8 BIT Auflösung des Timers haben
(-> 255 Servoschritte). Dies bedeutet das der Zähler auf 0,001s /
1/4.000.000Hz = 4000 zählen müsste. Da er nur 8 BIT hat, brauche ich
einen Teiler von 4000 / 256 = 15,.. = 16. Dummerweise bietet der Zähler
aber nur einen Teiler von 8 :-(
Ich habe es erstmal so gelöst, daß ich mit Teiler 8 arbeite und die
Interrupt-Routine einfach 4x aufrufe... (2x um 1ms zu erzeugen und 2x
für die Zeit für das Servo (0-1ms) ) :-)))
Die (in diesem Beispiel) 18ms bis zum nächsten impuls bekomme ich dann
über den Teiler 1024 (0,018s / 1/4000000Hz)
Das funktioniert gut. Was mir nicht gefällt, ist die Tatsache, daß wenn
man von zwei oder drei oder gar mehreren Servos ausgeht, die
Interrupt-Routine ganz schön kompliziert wird. Ich müßte ja für jedes
Servo quasi zuerst 1ms ausgeben und dann Servo-spezifisch den Impuls
verlängern. Hätte also 8 (bei 8 Servos) Interrupt-Routinen oder eine mit
einem gigantischen "if case" ......
Frage:
In C löst man sowas mit einer Routine und einem Zeiger ! Wie macht man
einen Zeiger auf eine Tabelle (mit Werten für die Servos) in Assembler ?
Wie legt man die Werte für die Servos in dieser Tabelle (RAM?) ab ?
Wer hat Anregungen ?
Gruß
UBoot-Stocki