So, jetzt läufts.

Wahrscheinlich war alles nur Fehlbedienung des Progrämmchens. Mit Dezimalwerten gehts natürlich nicht, anschließend hab' ichs mit Hexwerten probiert und dabei aber vielleicht im ersten Byte die Bits für Start- und Stopkondition weggelassen, weiß ich nicht mehr so genau. Mit folgender Sequenz gehts jetzt:

1. Byte: C3 (Bits gesetzt für Start, Stop, und 3 folgende Datenbytes)
2. Byte: C2 (Adresse des SD20)
3. Byte: 1 (erster Servo)
4. Byte: 80 (ein etwa mittiger Wert für die Position)

und Hurra, es meldet 3 Bytes acknowledged und das Servo saust in die Position.

Ein weiterer Verdacht für die vorherigen Probleme: Spannungslage am USB. Der Laptop liefert schon 4,98V, aber nach dem zwischengeschalteten Hub sinds nur noch 4,63. Jaja, zur Entkopplung der vom Host gelieferten USB-Versorgungsspannung und der eventuell am Hub eingespeisten Spannung dient einfach eine (immerhin Schottky) Diode. Aber mit dem Einspeisen von 5V in den Hub gabs auch seltsame Effekte, so daß ich zwischendurch schon befürchtete, den USB-Port am Laptop zerschossen zu haben.

Mein Problem war auch, daß ich an den normalen IO-Ports des Warriors einige PNP-Transistoren hängen hatte, deren Emitter aber an von anderer Seite zugespeisten 5V hing. Warum diese PNP-Schaltung? Weil die Ports des Warriors im inaktiven Zustand von internen Pullups auf High gezogen werden, und im inaktiven Zustand diesen Ports kein Strom nach GND gezogen werden sollte. Nun aber das Problem: Die Differenz zwischen 4,6V (Warrior-Port High) an der Basis der PNPs und den externen 5,15V am Emitter reichte schon halb zum Schalten des Transistors, genau das, was ich nicht wollte. Nun hängen die Emitter auch alle an der USB-Spannung, die Funktion ist jetzt sauber, aber der USB des Hosts ist halt mit zusätzlich ca. 8mA belastet. Das Ganze nur mal so erzählt, vielleicht hat mal irgendjemand beim Blättern und Suchen nach seinem Problem hier einen Aha-Effekt.

Gruß
Tom.