SX-Decoder für ein Servo mit 8
Positionen
Die Idee zu dieser Funktion am SX-Bus stammt eigentlich von Dieter Sekunde, der
in seinen Neusilberblech-Ätz-Bausätzen auch eine Segmentdrehscheibe hat.
Zum Antrieb empfiehlt er ein exakt arbeitendes Servo, wovon reichlich im Handel
sind.
Auch SX-Decoder sind natürlich von diversen Herstellern fertig oder als Bausatz
zu haben.
Trotzdem musste ich herausfinden, wie so etwas auf der Basis meiner
AVR-SX-Module
zu realisieren ist.
Um die Bedienung von einem Handgerät am SX-Bus einigermaßen brauchbar zu
gestalten, habe ich wieder eine Halbkanal-Version getippt. Die jeweils unteren 3
Bit
im Nibble sind die binäre Positionsnummer, das 4. Bit ist das "Do_It_Bit", d.h.
erst
wenn dieses Bit gesetzt ist, wird die Position angefahren.
Entsprechend dem Anwendungsfall habe ich die zeitliche Auflösung des
Servoimpulses
auf 1 MikroSekunde festgelegt, was einer Auflösung von ca. 0,1 % entspricht. In
der
aktuellen Version ist der Servoimpuls 1 bis 2 MilliSekunden lang. Der
Standardbereich
ist 0,9 bis 2,1 mSek., wird aber nicht von allen Servos "vertragen".
Die Stellzeit ist von etwa 50 Millisekunden bis ca. 40 Sekunden für den
Gesamtweg
einstellbar. So können auch kleine Wege langsam gefahren werden. Meine Tests
haben gezeigt, dass "Preiswert-Technik" der Servos die hohe Auflösung nicht
bringt.
Die Auswahl an digitalen Stellzwergen ist aber groß, auch im Preis.
Die Servoposition bzw. das Steuerbyte der Basisadresse wird nach jedem
Stellvorgang
im EEPROM gespeichert. Der Speicherplatz wird nach jedem Reset des AVR-Tiny3213
gewechselt, so dass genügend Lebensdauer erreicht werden sollte.
Die Positionswerte sind 16 Bit Zahlen, die als Timerwerte im 16-Bit Timer1 des
Tiny die
Impulsdauer mit Prescale 8 bestimmen. Die Stellzeit habe ich wie beim 4-fach
Servodecoder
vom SX-Takt abgeleitet und hat deshalb 50uSek Ticks. Die minimale Stellzeit für
den Gesamthub
von 1000 Schritten ist also 50mSek, ein Wert der kaum von einem Servo erreicht
wird.
Die Parameter des Decoders sind in insgesamt 24 Byte des EEPROM abgelegt,
weitere
100 sind für die Datenbytes verwendet.
Die Programmierung erfolgt wieder auf den SX-Adressen 0 bis 5, wie beim
4-fach-Decoder.
Adr 000 Halbbyte-Information 0 für Lo Nibble 128 für Hi
Adr 001 ist der Befehlskanal, im Lo Nibble die
Positionsnummer, im Hi die Befehlsnummer
Adr 002 Basisadresse + Speicherbit 128
Adr 003 Lo_Wert des 16 Bit Positionswertes
Adr 004 der Fahrzeitwert in % von 40 Sek.
Adr 005 Hi_Wert des 16 Bit Positionswertes
Zusätzlich verwendet der Decoder das Bit 5 (32) auf Adresse 106, dem
Zustandskanal der Zentrale.
An diesem Bit erkennt die Parametriersoftware auf dem PC den Programmiermode des
Decoders, der mit einer Taste eingeschaltet wird.
Das XP-PC-Programmier-Programm:
Zwischenzeitlich habe ich die MS-MFC-Programmierung für Windows ad acta gelegt,
weil das
wesentlich bequemer und übersichtlicher in C# für .NET2 zu erledigen ist.
Die Bedienung ist nicht besonders komplex und vermutlich wieder nicht
"Narrensicher". Das macht aber Nix,
weil sie nicht für "Solche" gedacht ist.
Nach Wahl der COM-Daten kann das Lesen gestartet werden und die Listbox mit den
Decoderwerten
gefüllt werden. Die aktuelle Position wird aus dem übertragenen Datenbyte der
Basisadresse abgeleitet
und als "selected" angezeigt. Wenn die Positionsanzeige grün hinterlegt ist ist
der Schieberegler sofort
wirksam, d.h. das Servo folgt mit der gewählten Geschwindigkeit "online". Für
die Feineinstellung können die
Pfeiltasten <- und -> verwendet werden.
Mit Click in die ListBox wird der Schieberegler für diese Position wirksam und
der Wert in der Liste "hängt"
am Schieber. Nicht das Servo, was durch die Hintergrundfarbe Rot in der
Positionsanzeige signalisiert wird.
Dort bleibt auch der Wert unverändert, wie die Position des Servos.
Der neue Wert wird erst am Servo wirksam, wenn der Fahr-Button geclickt wird,
oder mit Doppelclick auf den
selektierten Listenwert. Die sofortige Wirksamkeit des Doppelclicks, ohne vorher
selektiert zu haben, das
verhindert C# managed Code und meine bescheidenen Softkünste. Nun ja!
Fahrzeitwahl und Halbkanal-Knöpfe wirken auf der Stelle, die neue Adresse muss
bestätigt werden.
Ebenso der Speicherbefehl an den Decoder zum Sichern der aktuellen Daten.
Mit den Bitstellen der Basisadresse kann man steuern, sie wirken aber nicht auf
die Positionswahl zurück.
Hardware:
Wie üblich habe ich die Entwicklung und meine Tests auf dem STK 500 gemacht. Das
Decoderprogramm
läuft aber auch auf dem Platinchen des 4-fach-Servo-Decoders mit den bekannten
Versorgungsproblemen.
Kann aber sein, dass ich demnächst einen Lösungsvorschlag machen kann.
Die Decoder Dateien zum Testen sind:
serv_pos_8.asm
serv_pos_8.hex
serv_pos_8.eep
Das PC-Programm maile ich gerne auf Anfrage.
Jonathan Bohmer, Februar 2009
Zur Übersicht ..\Startseite.htm