S88 Monitor/Interface

Ausgehend von den in Teil1 beschriebenen Grundlagen habe ich ein S88 Interface mit Anzeigefunktion entwickelt, welches an einen PC angeschlossen und dort die dokumentierten Befehle des bekannten HSI88 von Lttfinski Datentechnik emulieren kann

Beschreibung

Bei Preisen von 1,50Euro für eine AVR-MCU (Mega 48, Reichelt, Juli 2006) macht es allerdings nicht mehr soviel Sinn, dafür TTLs einzusetzen. Schon der Verdrahtungsaufwand ist nicht zu unterschätzen, wenn man keine vorgefertigte Platine hat. Diese MCus haben genug Pins und Leistung, um die LED-Anzeigen direkt anzusteuern und daneben die TTL-Logik in Software abzubilden.
Für die Software-Entwicklung verwende ich Bascom. Da ist sicherlich noch eine Menge Optimierungspotiental, aber so bin ich in kürzester Zeit zu einer funktionierenden Software bekommen. Wenn der Code nicht mehr in die 4KB eines Mega48 passt, nehme ich einfach für 15Cent mehr einen Mega8 mit der doppelten Kapazität, anstatt stundenlange Assembler-Sitzungen abzuhalten.

Herausgekommen ist eine Schaltung, in der neben den Anzeigeelementen nur noch ein AVR Mega8 und der RS232-Treiber benötigt wird. Ein Reset-Taster startet das Programm bei Bedarf neu, mit einem weiteren Taster kann das gerade anzuzeigende Modul geändert werden. Die aktuelle Modulnummer(1-32) wird in der 2-stelligen 7-Segmentanzeige angezeigt, die Einzel-LEDs zeigen die Zustände an den zugeordneten Rückmeldern.

Der AVR wird in Standard-Beschaltung mit externen Quarz betrieben, um die Datenübertragsraten zum PC abzusichern, welche über einen MAX232N aus der Bastelkiste die richtigen Pegel liefert. Die Anzeige wird im Multiplex-Verfahren mit 4 Digits(2 Digits mit Einzel-LEDS, 2 für die 7-Segmentanzege) mit ca. 100 Hz betrieben.
Über die serielle Schnittstelle kann die Anzahl der tatsächlich am Strange hängenden Module eingestellt werden. Die Abfragedauer wird damit veringert.

Die Software verfügt über einen HSI-88-Modus, welches versucht, exakt das veröffentlichte Protokoll abzubilden, (Stand Mai 2006). sowie einen Standard-Modus mit zusätzlichen Kommandos zur Steuerung der Anzeigen und des Ausgabeformates.(siehe Beschreibung) Alle Parameter werden im internen EEprom abgelegt.
Die Module werden mit einer Taktfrequenz von ca. 6khz abgefragt und im Sram abgespeichert. Bei jedem einlesen wird geprüft, ob eine Änderung gegenüber dem letztem Einlesevorgtang vorliegt und entsprechend den eingestellten Parametern gemeldet.

Schaltplan (gezeichnet mit Splan)
Schaltplan

PortB0-5 sowie PortC4/5 bilden die Segmente a-h, PortC0+1 steuern Transistoren(Mosfets) der Digits der 7-Segmentanzeige, PortC2+3 die der Transistoren für die Einzel-LEDS.
PortD0+1 handelt die RS232-Schnittstelle, PortD2 liest das S88Data-Signal, D3erzeugt das S88Clock-Signal,D4 das S88Load(PS)-Signal und D5 das S88Reset-Signal.
PortD6 fragt den Zusand des Tasters ab.
Die Reset-Schaltung an PortC6 entspricht den Standard-Vorgaben.

Entgegen der dargestellten Schaltung In meinem Prototyp habe ich die 7-Segment-Anzeige eine gerade verfügbare VQE23 mit gemeinsamer Kathode eingesetzt. Die Anzeigen sind mit Rechteck-LEDs abwechselnd rot und grün wie die Tasten bei der Intellibox realisiert. Die Digit-Treiber werden über 200mA-NPN-Transistoren aus der Bastelkiste realisert, die Segmente werden vom AVR direkt getrieben.
Normalerweise soll man ja Anzeigen mit gemeinsamer Anode verwenden,weil Standard-ICs nur gegen Low treiben. Die Mega-AVRs lassen sich jedoch auch im High-Betrieb mit 20mA pro Port belasten, so das keine extra Treiber notwendig sind. Dazu müssen allerdings in der Software die auszugebenden Zignale für die Segmente invertiert werden.

Zunächst wurde die Anzeige auf einem Protobed aufgebaut und an ein STK500-Entwicklungskit angeschlossen.

Die Module wurden genauso wie im Test mit der Intellibox angeschlossen. Wie man erkennt, werden hier wie erwartet die 2. und 4. LED aktiviert.
Dabei konnten wichtige Erfahrungswerte für die Dimensionierung der Timer, der Vorwiderstände und der Software-Struktur gewonnen werden. So wurde z.B. habe ich festgestellt, das der gleichzeitige Betrieb von Anzeige und RS232 nur über kurze Interupts möglich ist und dafür mindestens ein 8Mhz-Takt nötig ist, was den Einsatz der AVR-Mega-L-Bausteine problematisch macht.

Im weiteren Verlauf habe ich 2 getrennte Lochraster-Leiterplatten für die Anzeige und das Prozessor-Board aufgebaut, um das Prozessorboard auch unabhängig vom Einsatz als S88-Interface nutzen zu können. Normalerweise gehört natürlich alles auf eine Platine. So aber sind dort auch noch Anschlüsse für ein LCD-Display und I2C-komponenten drauf, die z.Z. nicht benötigt werden.
Als Stromversorgung kann auch ein 5V-Steckernetzteil (wie für GPS-Mäuse) direkt verwendet werden (ohne Regler), weil diese schon intern geregelt sind (Vorsicht, lieber vorher ausmessen!)
Ich habe sehr gute Erfahrungen mit den Netzteil von Horter&Kalb gemacht.

Aufbau auf dem Protoboard

Darstellung der Boards mit Lochmaster-Zeichnungen

Einschränkungen/Bemerkungen/Erweiterungen

Es wird erstmal nur ein S-88 Strang ausgewertet. Es stehen in der einfachen Schaltung keine freien Prozessor-Pins mehr zur Verfügung. Man könnte die Segmentreiber-Pins auch noch als zusätzliche Eingangspins verwenden, wenn man die Segmente über ein Latch puffert. Dazu müssen alle Pins der S88-Busse bis auf die Data-Leitung parallel geschaltet werden. Die Dataleitungen kommen an ein zusätzliches Schieberegister/Latch, welches nach jedem S88Clock ausgelesen werden muss.

Für einen Strang mit max. 32 Module a 16Pins braucht man 64Byte RAM zum Einlesen und die gleiche Menge, um den letzen Zustand festhalten und um feststellen zu können, welche Pins haben sich geändert. Das Programm selbst braucht ca. 256Byte Sram. Ein AVR-Mega48 hat 512Byte Sram, hat also max. Platz für einen weiteren Strang. Verzichtet man auf die "hat sich geändert"-Funktionalität, könnte man doppelt so viele Stränge anschliessen. Ein ATMega640 mit 8kSram intern ist dabei vorerst das Maximum, oder man verwendet einen ATMega8515 mit externem 32k-Sram.

Schaltplan und Quellcode(Bascom) verschicke ich auf Anfrage zur privaten Nutzung.

Teil 1S88 Grundlagen
Teil 2S88 Monitor/Sniffer mit AVR
Teil 3S88 Sniffer mit AVR
Teil 4Weichenlagedetector mit S88 Rückmelder
Teil 5RCLink emuliert TD-88/Inter10

Index
Disclaimer
© 2009-2010 Thomas Dreßler
Alle Rechte vorbehalten
letzte Änderung 25.04.2010