Das Scannermodul für den KC85 - M051

DasErstellt: 15.02.2017 sogenannte Scanner-Modul wurde vor fast 20 Jahren, zwischen 1998 und 2001 vom KC-Club entwickelt. Es ist sowohl hardware- als auch software-seitig eine herausragende und beeindruckende Entwicklung. Federführend bei der Entwicklung waren Ralf Kästner und Enrico Grämer.
Zur damaligen Zeit hatte ich meinen KC85 schon längst vergessen, obwohl er immer einen Ehrenplatz hatte und deutlich sichtbar im Schrankfach stand. Erst 2009 erwachte das Interesse an der alten Technik erneut und auch das M051 sollte in die entstehende Sammlung integriert werden. Jedoch war es nicht mehr erhältlich.

Anfang des Jahres 2016 erwachte im Robotrontechnik-Forum erneut das Interesse am Scanner-Modul.
Anfängliche Zweifel, daß sich genügend Interessenten finden werden, zerstreuten sich schnell. Auch Bedenken, was die Verfügbarkeit von "abgekündigten" Bauteilen anbelangt, konnten ausgeräumt werden.
So wurden von Kai Oelscher die notwendigen Atmel-Controller programmiert zur Verfügung gestellt und ich kümmerte mich um die Beschaffung aller anderen "exotischen" Bauelemente, insbesondere der GAL und der 7-poligen Mini-DIN-Buchse für den I²C-Anschluß.
Enrico Grämer wollte verständlicherweise kein zweites Mal die ganze Organisation der Bestellungen und des Versands ganzer Bausätze übernehmen. Er hatte diese Prozedur schon viele Male hinter sich.
Ich selbst hatte eigentlich gar kein rechtes Interesse mehr an dem Modul, war aber sehr gern bereit, alles Organisatorische zu übernehmen, damit das Projekt nicht eventuell noch daran scheitern sollte.

Enrico Grämer begann mit dem Re-Layout der Platine. So wurden einigen Bauteile versetzt und optimiert angeordnet, für die Sicherung wurde eine SMD-Alternative geschaffen und eine optionale LED zur Anzeige der intakten Sicherung wurde implementiert. Wer diese LED aktiv verwenden möchte, muß etwas Phantasie entwickeln, damit sie durch die Modulblende von Maik Trompter hindurch sichtbar und dabei die Blende nicht zerstört wird. Der Einsatz von Diodennetzwerken in SIL-Form wurde aufgrund der Verfügbarkeit solcher nicht umgesetzt. Das Platinen-Layout berücksichtigt diese jedoch.
Kai Oelscher fing damit an, alle Informationen einzusammeln, die zur Programmierung des Controllers notwendig sind und Maik Trompter begann damit, die Daten für die Herstellung einer stabilen Modulblende aus Aluminium, welche extrem originalgetreu aussieht, aufzunehmen.

Es war von Anfang an klar, daß es vom Projektbeginn bis zur Auslieferung der fertigen Bausätze ein langer Weg werden wird, zumal der Start in das Frühjahr fiel und bei einigen Beteiligten damit die Gartensaison beginnt.

Im Oktober 2016 wurde das Testmodul aufgebaut und erfolgreich in Betrieb genommen.
Zunächst wurden die Scanner-Schnittstelle und danach der serielle Port getestet.
Der Test der Scanner-Schnittstelle erfolgte mit dem Programm UniPic (in der Version 2.1) von Ralf Kästner und die serielle Schnittstelle wurde mit den WTOOLS (in der Version 1.4) von Ralf Kästner und den MTOOLS (in der Version 1.4) von Frank Dachselt getestet.
Als letztes wurde die I²C-Schnittstelle geprüft. Mario Müller stellte dazu freundlicherweise ein kleines Modul zur Verfügung, inklusive eines Programms zur Ansteuerung dieses.
Während der Tests war es sehr beeindruckend, die Programme WTools und UniPic im Einsatz zu erleben. Insbesondere Ralf Kästner und Frank Dachselt haben hier eine sehr gute Entwicklungsarbeit geleistet.

Mittlerweile hat Rolf Weidlich die Entwicklung des I²C-Anteils deutlich vorangetrieben und eine neue Firmware des Controllers bereitgestellt. Sein Antriebsgrund dafür war der Anschluß und die Verwendung eines Temperatursensors, zu der er auch eine Betriebssoftware für den KC85 entwickelt hat. Sowohl Firmware und Software, als auch die Dokumentation dazu sind im KC-Labor und auf der Homepage des KC-Clubs zu finden.

Maik Trompters Blenden trafen Mitte November 2016 ein und bis Ende Januar 2017 wurden alle Bausätze an ihre Empfänger verschickt.

Auch nach fast 20 Jahren, die seit der "Geburt" des Scanner-Moduls vergangen sind kann man sagen, daß das M051 seine Berechtigung in der Modullandschaft für den KC85 hat.
Es ist schon ein beeindruckendes Stück Hardware und obwohl der Einwand Einiger berechtigt ist, die der Meinung sind, daß es nicht dem Stand der Technik entspricht, Bilder am KC einzuscannen, ist es doch faszinierend dabei zuzusehen, wie in UniPic ein eingescanntes Bild wächst. Und wenn dieses dann noch auf dem grafikfähigen Drucker K6313 ausgedruckt wird, rundet es das Ganze ab.
Selbst werde ich kein eigenes Modul mehr aufbauen, da ich mich dem zuvor beschriebenen Einwand anschloß.

NachErstellt: 25.07.2017 dem nun fast ein halbes Jahr vergangen ist, habe ich meine Meinung, was den Aufbau eines eigenen Moduls anbelangt, geändert. Jedoch nicht, um in Zukunft Bilder am KC einzuscannen, sondern weil die Anwendung der I²C-Geräte fasziniert.
Als erster Test wurde das von Rolf Weidlich initiierte Thermomodul aufgebaut und in Betrieb genommen.
Nun soll in einem weiteren Schritt ein komplexerer Anwendungsfall umgesetzt werden. Angeschlossen werden sollen eine RTC, ein kombinierter Temperatur- und Feuchtigkeitssensor und ein Barometer. Die größte Herausforderung dürfte dabei das Barometer sein.
Die Werteregister der I²C-Geräte sollen über ein interruptgesteuertes CAOS-Programm ausgelesen und deren Werte in der obersten Bildschirmzeile zur Anzeige gebracht werden.
Aber das alles ist noch Zukunftsmusik. Zunächst erfolgt eine Einarbeitung in die I²C-Thematik unter Zuhilfenahme eines Arduino Uno.
Nur 10 Tage später wurde eine erste Testversion eines I²C-Steuerprogramms in Betrieb genommen. Das Programm arbeitet interruptgesteuert und verwendet dafür den CTC des M001. Die zum Einsatz kommenden I²C-Geräte sind eine RTC (DS3231), ein kombinierter Feuchtigkeits- und Temperatursensor (Si7021) und ein Luftdrucksensor (BMP280). Die beiden Sensoren sind am Bus 0 des I²C-Anschlusses des M051 angeschlossen; die RTC am Bus 1.

Nachdem einige Wochen des Studiums vergangen sind, konnte ich eine überarbeitete Version des I²C-Steuerprogramms entwickeln, nicht zuletzt dank der freundlichen Hilfe von Rolf Weidlich.
Das Äußere des Programmstarts wurde kompakter gestaltet. Die Abfrage des Si7021-Sensors (Feuchtigkeit, Temperatur) ist komplett implementiert. Das "Schwierigste" bei der Programmierung ist die Berechnung des eigentlichen Anzeigewertes. Ich verwende den Basic-Compiler des JKCEMU. Dieser beherrscht vorzeichenbehaftete 16-bit-Integerzahlen. Die vom Si7021-Sensor gelieferten Daten (Zahlen) sind jedoch größer. Daher wird zu einer speziellen Arithmetik gegriffen. Für die Feuchtigkeit ergibt sich damit die Einschränkung, daß unterhalb von 8% ein Wert von 0% angezeigt wird. Für die Temperatur ergibt sich für den Innenbereich keine Einschränkung. Der Genauigkeitsverlust bei der Feuchtigkeit beträgt absolut rund 0,1%, was bei einer Toleranz des Sensors von 2% akzeptabel ist. Die berechnete Temperatur weicht absolut um rund 0,2 °C ab. Auch dies ist akzeptabel. Die Temperatur wird mit einer Nachkommastelle angezeigt.
Für die Luftdruckmessung war zunächst der Einsatz des BMP280 vorgesehen. Dem Datenblatt können die notwendigen Formeln zur Ermittlung der Werte entnommen werden. Eine Berechnung der Werte mit dem Z80-Prozessor ist mit einem unverhältnismäßig hohen Aufwand verbunden, was letztendlich den Nutzen des Programms auf ein Minimum reduzieren würde.
Eine Recherche führte zum MPL3115A2 von Freescale. Dieser Sensor ist ähnlich akkurat wie der Bosch-Sensor, bietet aber noch erweiterte Funktionalität an. Das Beste aber: Er berechnet den Wert des Druckes intern und stellt diesen als vorzeichenlose 18-bit-Zahl zur Verfügung (zwei weitere Bit sind die Nachkommastellen). Diese Zahl stellt den Wert in Pascal dar. Da ein zu erwartender Luftdruck im Bereich von 900-1100 hPa liegt kann auf die beiden letzten Bit verzichtet werden. Der letztendlich mit einer Nachkommastelle berechnete Wert weicht um maximal 0,09 hPa ab.
Da der MPL noch nicht vorhanden ist, wird er zurzeit im Programm nicht berücksichtigt.

Aufgrund der Komplexität und Größe des Programms wurde es zweigeteilt. Der eine Teil initialisiert das ganze System (Module und Geräte) und der andere Teil ist die Interrupt-Serviceroutine (ISR). Die ISR wiederum läuft ab dem Bereich C000 und ist auf dem M041 plaziert.
Als Ausgabeeinheit ist mittlerweile ein LCD hinzugekommen, welches ebenfalls über I²C gesteuert wird. Dies wird durch einen Port-Expander-IC PCF8574AT ermöglicht. Da es sich um ein alphanumerisches Display handelt (Typ 2004A), ist die Ansteuerung sehr schnell. Der Port-Expander hat noch ein freies Port-Bit P3. Dieses wird zur Steuerung der Hintergrundbeleuchtung des LCD verwendet. Werden neue Werte ausgegeben, blinkt die Beleuchtung kurz auf.
Der MPL ist de-facto eingebunden, nur die Werteausgabe ist noch nicht umgesetzt.
Auf zwei Abbildungen sind die Sensoren-Box und das LCD zu sehen.

Mittlerweile steht das kleine Projekt kurz vor dem Abschluß. Die Sensorenbox wurde mit einem flexibleren Kabel versehen und geschlossen. Für das LCD wurde ein Gehäuse aus Acrylglas gefertigt. Um beide Einheiten räumlich getrennt aufstellen zu können, wurde ein Y-Kabel für den I²C-Anschluß des M051 gefertigt. Das Anfertigen eines Kabels ist immer eine kleine Herausforderung.

Im Download-Bereich befindet sich ein Archiv, daß alle Informationen beinhaltet, die während der Projektphase gesammelt wurden.

I²C-Programm - Entwicklungsabschluß

DieErstellt: 23.03.2019 Entwicklung des Programms wurde Anfang 2019 abgeschlossen. Am Meßverfahren wurde nichts geändert. Die Ausgabe der Werte auf dem Bildschirm findet nicht mehr statt. Das Programm existiert nun in drei Varianten.

  1. Eine sogenannte "stand-alone"-Variante, welche praktisch der Hauptvariante entspricht und die gemessenen Werte ausschließlich auf dem LCD ausgibt.
  2. Als kleine Spielerei ist es möglich, während der Bilderschau die I²C-Geräte Werte messen zu lassen. Dazu waren einige Anpassungen notwendig, die auf die Gegebenheiten des Programms zur Bilderschau eingehen.
  3. Diese Variante integriert den XY-Schreiber Endim 622.01. Damit wurde eine sinnvolle Kombination von Hard- und Software geschaffen. Die von den I²C-Geräten gemessenen Werte werden vom Programm verarbeitet und aufbereitet. Zur Ausgabe der Meßwerte auf dem LCD kommt nun noch die Ausgabe auf den XY-Schreiber. War schon die Berechnung der Anzeigewerte eine Herausforderung, so ist diese für den XY-Schreiber ungleich schwerer gewesen.
    Da alle Programme mit dem Basic-Compiler des JKCEMU entwickelt werden und dieser keine Fließkommaarithmetik beherrscht, mußte ein Algorithmus entworfen werden, welcher die Formeln zur Berechnung der Werte für den Koordinatenschreiber in Ganzzahlarithmetik abarbeitet. Letztendlich handelt es sich um Werte, welches das Modul M029 veranlassen, Spannungen an den beiden Ausgängen zu generieren. Der Endim 622.01 führt Schreibwagenbewegungen nur durch angelegte Spannungen aus, jeweils getrennt für die x- und y-Koordinate.

Allen drei Varianten ist die Aufteilung in einen Initialisierungs-, einen Funktions- und einen Startteil eigen. Variante 2 und 3 befinden sich auf einem M041, welches nicht im Schacht 8 des Grundgerätes steckt. Variante 1 integriert den Startteil in der Bilderschau, welche sich auf dem M041 befindet, daß als Autostartmodul gesteckt ist.

Das Archiv im Download-Bereich enthält jetzt auch den Quellcode der Variante 3.

M366-MP3/WAV
M366 - MP3/WAV
M004-Weather
M004 - Weather
SRNSCHAU
Kein schöner Land
M066-KLANG
M066 - KLANG
M041-2x16 KB EEPROM
M041 - EEPROM
ENDIM622
XY-Schreiber Endim
K 6304
Drucker K 6304
M030-Eprommer
M030 - Eprommer
CF-Kartenleser
CF-Kartenleser
M051-Scanner
M051 - Scanner
M365-JPG/TFT
M365 - JPG/TFT