Slotbaer / Carrera Digital 124/132 / CU Rundenzähler-Protokoll

Die nachfolgende Anleitung wurde mit grösster Sorgfalt erstellt. Trotzdem erfolgt der Nachbau auf eigene Gefahr und wir übernehmen weder Verantwortung noch Haftung für eventuell entstehende Schäden jedweder Art. Der
Umbau geht über den "normalen" Gebrauch hinaus, so dass Garantie- und Gewährleistungsansprüche erlöschen.

Hardware

Bei den Signalen an der PC-Unit Buchse handelt es sich um serielle Anschlüsse, die mit TTL bzw. CMOS kompatiblen Pegeln arbeiten.

Um mit einem Rechner kommunizieren zu können, muss man dem Rechner diese Signale zugänglich machen.

Weder PCs noch Macs haben dazu geeignete Anschlüsse. Moderne Rechner kommunizieren über die USB Schnitstelle mit externer Hardware.

Kabel Carrera's PC-Unit ist nichts anderes als genau so ein USB-TTL Seriell Converter.

Auf dem PC Zubehör Markt gibt es Tausende von billigen USB-Seriell Convertern. Diese verwenden allerdings RS232C Signal Pegel und dürfen deshalb auf keinen Fall an der CU verwendet werden.

Die Firma FTDI bietet ein Kabel, das die Verbindung zwischen einer TTL kompatiblen seriellen Schnittstelle und einer USB Schnitstelle herstellt. Das Kabel wird u.a. von der Firma Segor angeboten. Es gibt noch weitere günstigere Bezugsquellen. Google hilft da weiter.

Da das Kabel allerdings auf der seriellen Seite keinen passenden Anschluss hat, muss man das Kabel an diesem Ende mit einem passenden Mini Din 6 Stecker versehen. Mac und PC Treiber für das Kabel sind ebenfalls auf der Webseite von FTDI zu finden.

Nebenstehendes Bild zeigt die Anschlussbelegung.

Eine Alternative ist es eine PC-Unit des Carrera Race Management Systems und einen handelsüblichen USB - RS232 Konverter zu verwenden. Man macht aus dem TTL SIgnal der CU durch die alte PC-Unit ein RS232C kompatibles Signal und mit Hilfe des USB-Seriell Konverters aus dem RS232C kompatiblen Signal ein USB Signal.

Eine weitere Variante ist das Verbinden von CU und Rechner über ein Bluetooth Modul. Luftikus beschreibt ein solchen Projekt.

 

Die CU hat die Trafospannung an ihrem Stecker liegen und dummerweise auf dem Pin gegenüber Masse. D.h., wenn sie "Vorne" und "Hinten" beim Blick auf die Stecker oder Buchse verwechseln, wird die Masse des FTDI mit der Trafospannung verbunden und die serielle Schnittstelle des Prozessors wird mit einer Spannung von bis zu 22V verbunden. Das macht sie nicht mit und die CU ist schrottreif.
Also vor dem ersten Einschalten zweimal überprüfen.

 

Software

Die Verwendung des oben beschriebenen Konverters ist nur mit rechtmäßig erworbener Software gestattet. bei Weblegung gibt es, außer einer Testversion von iLap, noch keine zur CU kompatible Software. Aber die wird wohl nicht lange auf sich warten lassen.

Das Protokoll

Wie schon erwähnt handelt es sich um eine serielle Schnittstelle, eine asynchrone Datenübertragung im NRZ Verfahren. Die Übertragungsparameter sind 19200 Baud, 8 Bit, Keine Patität, 1 Stop Bit.

Die Kommunikation wird vom Rechner gesteuert, die CU sendet Daten nur als Antwort auf Anfragen.

Der Rechner muss also ständig Anfragen senden.

Es gibt Befehle zum Lesen und zum Schreiben von Daten.

Lesebefehle (Lesen von der Control Unit)

In allen nachfolgenden Beschreibungen sind Zeichen, die vom Rechner gesendet werden, rot und alle Daten, die von der CU gesendet werden, blau.

Der Rechner sendet ein Anführungszeichen gefolgt vom Befehlszeichen z.B. "0.

Nun antwortet die CU mit dem Befehlszeichen gefolgt von den Antwortdaten, einer Prüfsumme und einem abschliessenden $, z.B.: 05321;$.

Die übertragenen Daten sind entweder ASCII Zeichen oder sie stellen binäre Werte dar.

In unserem Besipiel ist die 5 das ASCII Zeichen 5.

Handelt es sich um einen binären Bytewert, so wird er durch zwei aufeinander folgendeZeichen dargestellt. Es werden nur jeweils die unteren 4 Bit jeden Zeichens verwendet. Innerhalb eines Bytes werden zuerst die niederwertigen 4 Bits übertragen und dann die höherwertigen Bits.

Werden längere Werte übertragen, so beginnt die Übertragung mit dem höchstwertigen Byte.

Die Prüfsumme wir ermittelt indem man die unteren 4 Bits aller Daten addiert, dabei die Überträge ignoriert und das Ergebnis mit $30 verodert.

Für unser Beispiel gilt:

  • Die Datenzeichen haben die die Werte $35, $33, $32 und $31.
  • $5 + $3 + $2 + $1 = $B.
  • Sollte die Prüfsumme mehr als eine Stelle umfassen, so wird nur die letzte Stelle verwendet und die anderen Stellen werden verworfen.
  • Die resultierende Prüfsumme $B wird mit $30 verodert und so ergibt sich $3B.
  • $3B entspricht dem ASCII Zeichen ;.

Kennt die CU einen Befehl nicht, so antwortet sie mit einem #.
Z.B.: "H#

Schreibbefehle (Schreiben zur Control Unit)

Der Rechner eröffnet wieder mit Anführungszeichen gefolgt vom Befehlszeichen.

Die CU antwortet mit der Wiederholung des Befehlszeichens.

Nun überträgt der Rechner die Daten gefolgt von Prüfsumme und $ genau wie oben beschrieben.

Die CU quittiert die Daten mit einem abschliessenden $.

Das ganze sieht dann z.B. so aus: "::??>$$

Befehlssatz

Der Befehlssatz der CU ist sehr klein. Und von den verfügbaren Befehlen verwendet man im normalen Betrieb nur 2. Der Befehlssatz der CU unterscheidet sich von dem des Rundenzählers. Dessen Befehlssatz ist hier beschrieben.

Die Minimalausstattung für einen Rundenzähler und Zeitmessprogramm auf einem Rechner

Für uns sind die Lesebefehle "0 (Null) und "? und der Schreibbefehl J iinteressant.

 

Befehl W Daten Beschreibung
"0 0 NNNNP$

Abfrage der Versionsnummer: Die 4 N sind ASCII-Zahlen, die die Versionsnummern von Hard- und Firmware angeben. P ist die Prüfsumme und die Übertragung wird mit einem $ abgeschlossen

Die Versionsnummer meiner CU ist 5321.

"? ? FBBBBBBBBGP$ Abfrage der letzten Zieldurchfahrt: Das F ist eine 4 Bit Binärwert zwischen 1 und 8, die der Fahrzeugnummer entspricht (7 = Ghostcar, 8 = Pacecar).
Die nachfolgenden 8 Zeichen bilden ein 32 Bit Binärwort. Dies ist der momentane Zählerstand eines Timers im Rundenzähler. Er läuft mit 1 kHz. Subtrahiert man zwei aufeinanderfolgende Werte für das selbe Fahrzeug, so erhält man die Rundenzeit in Millisekunden.
Das G gibt die Sensorgruppe an. Die Sensoren der Gruppe '1' bilden die Ziellinie. Die Gruppen '2' und '3' können z.B. für Zwischenzeiten verwendet werden..
Die Übertragung wird wie üblich mit Prüfsumme und $ abgeschlossen.
"? ? :TTTTTTVVSMBBAP$ Abfrage der letzten Zieldurchfahrt, aber es liegt keine neue Durchfahrt vor: Die Übertragung beginnt mit einem : was dem Binärwert für 10 sozusagen Fahrzeugnummer 10 entspricht. Daran kann man erkennen, dass es sich um ein Statuswort und keine Zieldurchfahrt handelt.
Die folgenden 6 Zeichen (T) sind die Tankstände für die 6 Fahrzeuge jeweils als 4 Bit Binärwert. Obwohl das Driverdisplay nur 8 Zustände kennt, werden 16 Zustände für jedes Fahrzeug unterschieden. $F bedeutet der Tang des Fahrzeuges ist voll - $0 er ist leer. Die Tankstände werden in der Reihenfolge der Fahrzeug Ids übertragen.
Die folgenden beiden Zeichen (V) sind bisher immer 0. Es kann sein, dass es sich um die Tankstände für Ghost- und Pacecar handelt, oder sie dienen einem Zweck, der sich mir noch nicht offenbart hat.
Das Startampelzeichen (S) nimmt die Werte 0 bis 9 an. 0 bedeutet, dass gerade ein Rennen läuft Eine 1, dass die Starttaste einmal gedrückt wurde und alle Leds leuchten. Wird die Starttaste ein zweites Mal gedrückt, zählt der Wert von 2 (1 Led leuchtet) bis 7 hoch, um dann auf die 0 zu wechseln. Im falle eines Frühstarts wird zuerst eine 8 und kurz danach eine 9 übertragen. Die Id des frühstartenden Fahrzeuges wird nicht übertragen.
Das nächste Zeichen (M) gibt den Tankmodus an. 0 - ausgeschaltet, 1- normaler Modus, 2 - Real Modus. Sollte in der Bahn ein Pitlane Adapter vorhanden sein, so wird 4 auf den entsprechenden Wert addiert. Ist ein Rundenzähler an die Rundenzählerbuchse angeschlossen, so wird 8 addiert.
Die zwei folgenden Zeichen (B) formen einen binären Bytewert, der eine Bitmaske bildet. Ist das der Fahrzeug Id zugehörige Bit gesetzt, so befindet sich das Fahrzeug in einer Pitlane mit Pitlane Adapter und kann tanken. D.h. nicht das es tankt, nur dass es tanken kann.
Das letzte Daten-Zeichen (A) ist entweder 6 oder 8, je nachdem ob der Position Tower 6 oder 8 Fahrzeuge anzeigen soll.
Die Übertragung wird wie üblich mit Prüfsumme und $ abgeschlossen.

 

 

Befehl W Daten Q Beschreibung
"J J BAWNP$ $

Senden eines Programmiedatenwortes:

Hiermit ist es möglich vom Rechner aus ein Programmierdatenwort über die Schienen zu schicken. Das Datenwort wird nur über die Schienen geschickt und beeinflusst interne Zustände und Daten der CU scheinbar nicht.

B und A bileden ein Byte im üblichen Carrera Format dessen untere 5 Bit dem befehl und dessen höchsten 3 Bit der Fahrzeugadresse entsprechen.

W ist der zum Datenwort gehörende Wert.

N gibt an wie oft das Datenwort wiederholt werden soll.

Möchte man die Runden- und Positionsanzeige zurücksetzen, so ist das das Datenwort $32C1 oder anders ausgedrückt Befehl, 6 Wert 9 an Fahrzeug 0.

BA wäre also 6 und der Wert 9. Als J Befehl ergibt sich: "J60910$.

Will man die Postition der Fahrzeuges 5 (gezählt ab 0), das an vierter Position liegt, übertragen, so ist dies:

Befehl 6, Fahrzeug 5, Wert 4.

BA ist also $A6 und W ist 4:

Das ist ein J Befehl in der Form: "J6:415$

Eine Liste der möglichen Programmierdatenworte findet sich in der Protolkollbeschreibung.

 

": : MMP$ $

Ignorieren der Zieldurchfahrten: Hiermit ist es möglich vom Rechner aus die Rundenzählung und Zeitmessung für einzelne Fahrzeuge zu verhindern. MM bilden ein Byte. Ist ein Bit gesetzt, so werden Zieldurchfahrten des jeweiligen Fahrzeuges ignoriert. Die Zeit läuft allerdings weiter. Bit 0 entspricht Fahrzeug 0 usw.

Die Startampel setzt die Maske auf $00 zurück, so dass alle Fahrzeuge gezählt werden.

"= = 1$ $

Rennstart: Hiermit wird der CU der Rennstart angezeigt. Die CU setzt die interne Uhr auf 0. Seltsam ist die Syntax. Der Befehl hat scheinbar keine Prpüfsumme, denn hätte er nur eine Prüfsumme, aber keine Daten so müsste die Prüfsumme 0 sein.