Nachfolgend ist eine kompakte Ansteuerung für bis 3 Modellservos vorgestellt, die als USI/TWI-Slave über die TWI-Schnittstelle angesprochen wird. Als Hardware wird ein in AVR-GCC programmierter ATTiny25 benutzt. Die Servopositionen werden durch den Offset bezogen auf den Neutralpunkt (die Servo-Mittelstellung) definiert. Für jeden Servo kann unabhängig eingestellt und im Eeprom abgelegt werden: - die Mittelstellung des Servos (Neutralpunkt), - die Startposition des Servos nach dem Einschalten, - die Drehgeschwindigkeit des Servos. Weitere Beschreibung in der USI_Servo_Readme.pdf Michael S.
Sorry, da habe ich die falsche Datei erwischt. Der Programmcode steht in dieser Datei. mfg Michael S.
Hier noch ein Update. Ein Problem beim Timing trat auf, wenn die Impulslänge im Bereich von 256 ..257 * 8us lag: Dann war die ISR, die einen neuen Compare-Wert schreiben muss, zu langsam. Der Counter hatte bereits über den neuen Wert hinaus gezählt - und der Impuls verlängerte sich abrupt auf 4ms. Durch zeitliches Vorverlegen des Compare-Interrupts konnte das Problem beseitigt werden. Es zeigt allerdings auch eine Schwäche des Konzeptes, auf die hingewiesen werden muss: Der Aufruf von Interrupt-Routinen der USI-Schnittstelle kann dazu führen, dass der CompA-Interrupt mit geringfügiger Verzögerung zur Ausführung kommen. Die Folge ist, dass während einer TWI-Kommunikation sporadisch einzelne Impulse an den Servos länger ausfallen können als sie sollen. Zwar kann durch einen höheren CPU-Takt und durch die Codierung der USI-ISR's die Verzögerung minimiert werden, grundsätzlich zu vermeiden ist sie aber nicht. mfg Michael S.
Hallo, nur mal so als Denkansatz: hatte schon mal das selbe Problem wie du auch, daß der Timer nicht über 2ms hinaus gereicht hat. Wenn ich es dann so gelöst habe, wie Du es auch machst, einfach den Rest nochmal weiterzuzählen, war dort immer ein kleiner Ruckler merkbar. Ich habs dann so gelöst, daß ich den Timer 0,5ms zählen lies und dann erst den Rest bis zur gewünschten Impulsdauer. Somit hab ich bei jeder Impulslänge den gleichen Ablauf im Programm und hatte dann einen flüssigeren Ablauf. Gruß Gerhard
Hallo Gerhard, wenn ich Dich richtig verstehe, dann habe ich das Problem beim Überlauf im letzten Update genauso gelöst wie Du beschrieben hast. Ich habe mir den Übergang von 255 auf 256 mit dem Logic-Analyser angesehen, es sich keine "Ruckler" mehr erkennbar. mfg Michael S.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.