ServoMaster
Dieser Code nutzt eine veraltete Version der avr-libc. Ich habe den Code lange nicht mehr überarbeitet, weshalb er mit einer modernen avr-lib und einem neueren Compiler nicht ohne weiteres zu übersetzen ist.
Aufgabe: 20 Servos steuern. Wie das? Ein kommerzielles Produkt ist der SD20. Ein programmierter PIC, der noch einen 4MHz Resonator benötigt. Das geht noch besser! ServoMaster unterstützt 20 Servos, wird über I2C angesteuert und benötigt keine externen Bauteile mehr. Möglich macht das ein Atmel Mega8 mit dieser Software. Ein paar Verbesserungsideen finden sich bei mikrocontroller.net.
Makefile
servomaster.c
servomaster_flash.hex
Schnellanleitung
- Flash-File herunterladen
- Programmiergerät anschließen
- Fuses setzen (HFUSE=0xD9, LFUSE=0xE4)
- Hex-File flashen
Mit den Fuses wird der interne RC-Oszillator auf 8MHz eingestellt. Hier lauert auch eine böse Falle, im Forum von mikrocontroller.net ist immer wieder von "gekillten" AVR-Prozessoren zu lesen. Wer sich das programmieren nicht zutraut, der schicke mir eine .
Die I2C-Adresse ist fest eingestellt auf 0xC2. Soll diese geändert werden, dann muß alles neu kompiliert werden. Im Prinzip verhält sich der ServoMaster wie ein I2C-EEPROM. Die Belegung der Register zeigt die folgende Tabelle:
| 0 | Version-Code (1) |
| 1-20 | Servoposition 8-bit |
| 21 | Delta |
| 22 | Offset High |
| 23 | Offset Low |
| 24 | Repeat |
| 25-127 | RAM |
Die Werte Delta, Offset und Repeat sind per default so eingestellt, daß der kürzeste Impult 1ms, der längste Impuls 2ms lang ist. Die Wiederholrate beträgt 20ms. Eine Anpassung an die angeschlossenen Servos ermöglicht einen längeren oder auch kürzeren Stellweg. Die Verkürzung der Wiederholzeit soll manchmal zu schnelleren Reaktionen führen. In der Praxis habe ich das noch nicht beobachtet.
Mit dem Feld Offset wird der kürzeste Impuls festgelegt. Delta sind dann die Abstufungen von zwischen dem längsten Impuls (Offset + 255 * Delta) und dem kürzesten Impuls (Offset + 0 * Delta).
ServoTester
Zum Testen des ServoMaster und zur Demonstration der Anwendung des ServoMaster kann der ServoTester verwendet werden. Das Programm ist in einen Atmel Mega8 zu flashen, der I2C-Bus mit dem ServoMaster zu verbinden und die serielle Schnittstelle an den PC anzuschließen.
Makefile
main.c
console.c
console.h