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