(aus http://rn-wissen.de/index.php/RN-Con...per-Funktionen , unter Beschreibung von Port D)Zitat:
Durch entfernen des Motortreiber IC´s aus der Fassung, steht PD4 und PD5 zur freien Verfügung.
Würde ich mal versuchen...
Druckbare Version
(aus http://rn-wissen.de/index.php/RN-Con...per-Funktionen , unter Beschreibung von Port D)Zitat:
Durch entfernen des Motortreiber IC´s aus der Fassung, steht PD4 und PD5 zur freien Verfügung.
Würde ich mal versuchen...
Ich habe mir gerade einen 10-fach Servo Controller gebaut. http://stefanfrings.de/servocontroller/index.html
Dazu nutze ich einen Timer vom AVR im Fast PWM Modus mit zwei Compare Registern. Um die zwei direkten Ausgänge auf 10 zu erweitern, verwende ich nicht mehr die OCR Ausgänge, sondern eine Interrupt-Routine, die zwischen 2x5 Ausgängen multiplext. Jeder Komparator steuert immer abwechselnd einen von fünf Servos an.
Vielleicht magst Du von meinem Source abgucken. Den I2C-Teil in der Main-Loop kannst Du ja weglassen.
Sehr clever die 10-fach Ansteuerung. 18 Servos am Mega16:
https://www.roboternetz.de/community...l=1#post524912
Viele Wege führen zum Ziel.
Gruß
mic
P.S.:
Mit dem Timeing komme ich nicht zurecht: 4000000/64/256=244Hz oder 4ms Impulswiederholung und nur zwei Servosignale pro Zyklus?
Fast richtig. Der Timer hat einen 4ms Zyklus, das stimmt schon.
1. Zyklus: Servo 0 über Compare Register A + Servo 5 über Compare Register B
2. Zyklus: Servo 1 über Compare Register A + Servo 6 über Compare Register B
3. Zyklus: Servo 2 über Compare Register A + Servo 7 über Compare Register B
4. Zyklus: Servo 3 über Compare Register A + Servo 8 über Compare Register B
5. Zyklus: Servo 4 über Compare Register A + Servo 9 über Compare Register B
und dann wieder von vorne
Macht fast genau 20ms Intervall pro Servo, also 50Hz. Grafisch dargestellt sieht das so aus:
Servo 0: _/~\__________________/~\__________________/~\_
Servo 1: _____/~\__________________/~\__________________
Servo 2: _________/~\__________________/~\______________
Servo 3: _____________/~\__________________/~\__________
Servo 4: _________________/~\__________________/~\______
Servo 5: _/~\__________________/~\__________________/~\_
Servo 6: _____/~\__________________/~\__________________
Servo 7: _________/~\__________________/~\______________
Servo 8: _____________/~\__________________/~\__________
Servo 9: _________________/~\__________________/~\______
. . . . . . . . . . . . . |-------20ms---------|
In jedem Zyklus wedern die beiden Compare Register umgeschrieben, entsprechen der gewünschten Pulsbreite des Servos, der im nächsten Zyklus angesprochen wird. Im fast PWM Modus werden Schreibzugriffe auf die Compare Register verzögert aktiviert, nämlich in dem Moment, wo der Counter überläuft.
Wenn man einen zweiten Timer verwendet, kann man das Ganze auf 20 Motoren erweitern.
Wow. Doch sehr clever. Vielen Dank für die Details.
Gruß
mic