Erklärung der Betriebssoftware

Übersicht

Die Software des Mikrocontroller Labs besteht aus drei Teilen:

  • Der Grafikcontroller bietet eine High-Level-Schnittstelle, um verschiedene Grafiktypen auf den Bildschirm zu bringen. Diese kann vom Hauptcontroller mittels serieller Befehle angesprochen werden.
  • Der Touchscreen- und Tastaturcontroller sendet Informationen über die Eingaben an den Hauptcontroller. Der Touchscreen meldet sich dazu per Hardware-Interrupt, die Tastatur wird durch einfaches Polling abgefragt. Die Tasten werden softwareseitig entprellt.
  • Um beide Informationen zu brauchbaren Funktionen zu verknüpfen, benötigt ein Programm auf dem Hauptcontroller Bibliotheken, die diese Funktionen bereitstellen. Damit wird das Entwickeln für das Lab ähnlich einfach wie für den Arduino – mit der Zugabe einer intelligenten, schnellen grafischen Schnittstelle, die man nicht mehr selbst bauen muss.

Die einzelnen Modi

Der Grafikcontroller bietet insgesamt 14 verschiedene Funktionen:

  • Terminalmodus – Zeichen werden hintereinander am Bildschirm ausgegeben. Farbe und Hintergrundfarbe können festgelegt werden, ebenso die Ausgabeposition. Zur Wahl stehen drei Fonts, von denen der mittlere der zum Lesen angenehmste ist. Mit ihm können 16 Zeilen a 40 Zeichen ausgegeben werden. Durch die Wahl der Ausgabeposition können auch einfache Textbildschirme umgesetzt werden.
  • Balkengrafik – hier können ein bis acht Balken in zweihundert Stufen dargestellt werden. Die Farben der Balken können insgesamt oder einzeln festgelegt werden. Die Zeichengeschwindigkeit ist lediglich durch die serielle Schnittstelle (19.200 Bit/s = maximal 300 Aktualisierungen aller acht Balken pro Sekunde) limitiert.
  • Messwerte – hier wird ein Raster auf den Bildschirm gezeichnet, das von links nach rehts durch übergebene Werte überschrieben wird (Wertebereich 0..200). Wenn die Zeichnung ganz rechts angekommen ist, beginnt sie links wieder. Auch das Raster wird eimmal neu gezeichnet, so dass man die aktuelle Zeichenposition leicht erkennen kann. Die Farbe des Verlaufs ist einstellbar, außerdem kann unterhalb der Grafik ein Text dargestellt werden. Diese Funktion ist damit für Langzeitmessungen gut geeignet, da sie 256 Messwerte speichern kann. Die maximale Aktualisierung liegt bei 2400 Hz / 2400 Werte pro Sekunde, womit man schon ein einfaches Oszilloskop bauen kann.
  • Menue – eine typische Menüdarstellung mit Überschrift (schwarz auf weißem Grund) und maximal fünf Auswahlwerten, die per Touchscreen oder Tastatur (Rechts-Links-OK) ausgewählt werden können. Der ausgewählte Eintrag wird hervorgehoben dargestellt. Hierzu wurde in der Bibliothek eine spezielle Funktion „Show_Menu“ geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt.
  • Bildschirmtastatur für Texteingabe – ein Tastenfeld mit 26 Zeichen und 10 Ziffern, dazu zwei Schaltern für „OK“ und „Abbrechen“. Wozu auch immer man Text eingeben mag – hier ist die Möglichkeit dazu. Ungelöst ist bisher noch die Frage mach Groß-Kleinschreibung und dem Leerzeichen. Hierzu wurde in der Bibliothek eine spezielle Funktion „Show_Keyboard“ geschaffen, die nach ihrem Aufruf mit dem eingegebenen Wert zurückkehrt. Der 3D-Effekt entsteht übrigens einfach dadurch, dass zwei Seiten der Knöpfe weiß und zwei schwarz gezeichnet werden – beim gedrückten Knopf sind es genau die jeweils entgegen gesetzen Seiten.
  • Bildschirmtastatur für Zahleneingabe – wie oben, aber nur zur Eingabe von Zahlen. Zusätzlich kann man angeben, in welchem Bereich die Zahlen liegen sollen. Eine Prüfung findet noch innerhalb der Funktion statt. Hierzu wurde in der Bibliothek eine spezielle Funktion „Show_Keyboard“ geschaffen, die nach ihrem Aufruf mit dem eingegebenen Wert – innerhalb der zulässigen Grenzen – zurückkehrt.
  • Bildschirmtastatur ohne Beschriftungen – man kann das Keyboard auch selbst beschriften und dann auswerten. Dazu sind in der Bibliothek Funktionen zur Reaktion der Knöpfe beim Drücken und Loslassen vorhanden. Ich habe in die Beispielanwendung einen einfachen Taschenrechner eingebaut, der das Prinzip zeigt: Die Knöpfe werden von der Grafikbibliothek und dem Touchscreen gesteuert, aber Beschriftungen und die ganze Arbeit dahinter muss das Hauptprogramm selbst besorgen. Dank ein paar guter String-Float-Konverterfunktionen, die zum AVR-Standard gehören, gelingt das aber mit wenig Aufwand.
  • Messagebox – eine Dialogbox, die ein Fenster darstellt mit Überschrift (in doppelter Schrifthöhe) und drei Zeilen. Man kann außerdem aus den folgenden Schaltflächen wählen: OK/Abbrechen, Ja/Nein, Zurück/OK/Weiter, Zurück/Weiter, OK. Hierzu wurde in der Bibliothek eine spezielle Funktion „Messagebox“ geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt.
  • 8fach-LED-Bildschirm – ein Bildschirm, der acht farbige Rechtecke horizontal anordnet und dazu die Ausgabe eines Textes oberhalb erlaubt. Dieser Modus orientiert sich an den 8 LEDs des MC6400-Originals. Die „LED“ können aber in rot, gelb, grün, blau und weiß oder in Kombination oder Regenbogenfarbe leuchten.
  • 3fach-LED – ein Bildschirm in Ampelanordnung und -farbe, der drei farbige Rechtecke vertikal anordnet. Dieser Modus orientiert sich an den 3 farbigen LEDs des MC6400-Originals.
  • Farbpalette – zeichnet Rechtecke mit Farbwerten absteigend von 255..0. Der Touchscreen liefert in diesem Fall Koordinaten, so dass die angetippte Farbe leicht bestimmt werden kann.
  • Freie Grafiken zeichnen – ein schwarzer Bildschirm, auf dem wahlweise (auch gefüllte) Rechtecke, Linien und Punkte dargestellt werden können. Um Texte ausgeben zu können, kann zwischendurch in einen Terminalmodus geschaltet werden (siehe oben). Farben können festgelegt oder über die eingebaute Farbpalette (siehe oben) ausgewählt werden.
  • Schieberegler – ein Modus, in dem ein Regler mit dem Wertebereich 0..199 gezeichnet wird und wahlweise durch die Knöpfe links und rechts, die Tastatur oder durch Antippen verschoben werden kann. Hierzu wurde in der Bibliothek eine spezielle Funktion „Slider“ geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt. Diese Funktion akzeptiert beliebige Bereiche und rechnet das Ergebnis des Schiebereglers automatisch um.
  • Touchscreen-Kalibrierung – dieser Modus dient einzig zur Kalibrierung des Touchscreens. In der Bibliothek findet sich dazu eine Funktion „Calibrate“, die – einmal aufgerufen – vier rote Ecken und Hinweise auf den Bildschirm zeichnet. Die Ecken müssen nacheinander angetippt werden und werden bei Erfolg grün dargestellt. Die Funktion prüft sehr genau auf Korrektheit der Ergebnisse, damit eine Fehlkalibrierung vermieden wird. Trotzdem Vorsicht! Die ermittelten Werte werden im EEPROM des Touchscreen-Controllers gespeichert, damit sie beim nächsten Einschalten wieder zur Verfügung stehen.

 Warum nicht noch mehr Grafik?

Die Frage, wie viele Grafikelemente man im Grafikcontroller ablegt, ist weniger eine Frage der Ideen oder der Kunst, sondern vielmehr eine des Platzes. Der benutzte Controller besitzt nur 8kByte Speicher zur Ablage von Programmen. Mit den jetzt implementierten Funktionen ist er zu 99% voll – ein paar Bytes habe ich noch übrig für Fehlerbehebungen. Ein paar weitere Bemerkungen dazu :

  • Das Original bot eine Funktion zur Darstellung von Bitmaps – darauf habe ich hier zunächst verzichtet. Die Funktion ist aber noch vorhanden.
  • Ebenso vorhanden, aber abgeschaltet sind ein paar Terminalfunktionen wie das Löschen des aktuellen Zeichens, der aktuellen Zeile usw.
  • Farben können nur mit einem Byte-Wert geändert werden. Es sind aber ausgeklammerte Funktionen vorhanden, mit denen Farben auch als RGB-Wert übergeben werden können.
  • Der benutzte Font ist stark reduziert – alle Sonderzeichen bis #32 ab #127 sind weggelassen, die deutschen Sonderzeichen sind an unüblichen Plätzen (was die Schriftroutine intern korrigiert). Allein das brachte eine Ersparnis von einem halben kByte.

Der Einsatz eines anderen, größeren Mikrocontrollers wäre wahrscheinlich möglich. Man ist dabei aber auf jene beschränkt, die ein externes RAM ansteuern können. Und zudem muss die Größe des internen Speichers (RAM) vom externen abgezogen werden, da insgesamt nur 64 kByte gleichzeitig adressiert werden können. Das ist auch der Grund, warum die Grafikauflösung nicht 256×256, sondern nur 256×252 Pixel beträgt – das interne TAM mit 1 kByte muss abgezogen werden.

Beispiele

Die folgenden Grafiken zeigen einige der möglichen Funktionen

Modus 1 Modus 2 Modus 3

(Wird fortgesetzt)

Zurück zur Hauptseite

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.