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)
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
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.