Text-Modul

Im folgenden wird ein Universalmodul zur Anzeige von Text auf Bildschirmen vorgestellt. Das Modul hat darüber hinaus noch ein paar Funktionen erhalten, die es zu einem leicht einsetzbaren Zähler, einem Frequenzzähler und einem Timer machen.

IMG_5242 IMG_5241

Ein paar Grundlagen

Wenn man mit einem Mikrocontroller der AVR-Serie eine Grafikkarte bauen möchte, benutzen möchte, hat man mit vielen Einschränkungen zu kämpfen. Insbesondere ist dessen Taktrate mit 20 MHz so gering, dass die Zeit kaum genügt, alle Bildpunkte einer Zeile anzusteuern. Hochauflösende Bilder sind auf diese Weise also nicht möglich. Für die Ansteuerung eines PAL-Bildschirms (720×576 bei 25 Hz) oder per Standard-VGA (640×480 bei 60 Hz) mit Texten genügt dessen Performance jedoch; es bleibt sogar noch etwas Zeit für zusätzliche Aufgaben. Ich fand  auf den Seiten des russischen Bastlers Ibragimov Maxim Rafikovich eine passende Grundlage für meine Arbeiten.

Zu Details und Grundlagen von AVR-Grafik geht’s hier auf einer Unterseite.

Auflösungen

Das ursprünglich von Rafikovich vorgestellte Konzept diente natürlich in erster Linie dazu, Monitore oder Fernseher anzusteuern. Für die Philips-Bildröhren geht es schon zu weit – mehr als 12  Zeichen und 3 Zeilen sind dort kaum zu entziffern (6105), weil der Bildschirm einfach zu klein ist. Das hier vorgestellte Modul ist daher mehrfach umschaltbar – im BRE-Modus zeigt es große Schriften mit wenig Zeichen pro Zeile, im Monitor-Modus hingegen die maximal mögliche Anzahl Zeichen an. Es sind nun folgende Auflösungen möglich:

  • FBAS
    • 48 Zeichen in 20 Zeilen
    • 48 Zeichen in 10 Zeilen (doppelte Höhe)
    • 25 Zeichen in 5 Zeilen
    • 13 Zeichen in 2 Zeilen (die optimale Auflösung für die BRE)
  • VGA
    • 24 Zeichen in 20 Zeilen
    • 24 Zeichen in 10 Zeilen (doppelte Höhe)
    • 12 Zeichen in 5 Zeilen
    • 12 Zeichen in 2 Zeilen (die optimale Auflösung für die BRE)

Das Bild zeigt die möglichen Auflösungen dargestellt auf einem PC-Monitor. Die beispielhafte Darstellung der Zeichen ist im hier dargestellten Modul abrufbar als Demonstrationsmodus.

Auflösungen

Funktionen des Moduls

Die Erzeugung der Grafik lastet den Mikrocontroller nicht vollständig aus. Er wurde daher um ein paar Funktionen erweitert, die ihn universell einsetzbar machen, ohne dass jedes mal die Programmierung geändert werden muss. Dazu ist ein interruptgesteuerter Eingang vorhanden, der auf negative Flanken (Low) reagiert. Dazu kommt ein Ausgang, der beim Eintreten bestimmter Ereignisse auf High geht.

  • Terminal – über eine serielle Schnittstelle können Zeichen übergeben werden, die dann auf dem Bildschirm dargestellt werden. Dieser Modus wird hauptsächlich in der Zusammenarbeit mit anderen Mikrocontrollern genutzt werden.
  • Frequenzzähler – der Eingang des Moduls wird dabei als Zähler benutzt, der für genau eine Sekunde Impulse entgegen nimmt. Die Maximalfrequenz ist nicht sehr hoch, ein leichtes Flackern zeigt schon bei kleinen Frequenzen, dass der Mikrocontroller an seine Leistungsgrenzen kommt. Durch die Nutzung von externen Vorteilern kann aber der Bereich erweitert werden. Das Modul berücksichtigt dies, indem es den gewählten Vorteiler einstellbar macht und bei der Ausgabe der Frequenz gleich berücksichtigt. Es sind Vorteiler mit 1:1 (kein Vorteiler), 1:64, 1:256 und 1:1024 einstellbar. Damit können dann Frequenzen von bis zu 2MHz gemessen werden.
  • Zähler – der Eingang übernimmt hier die Funktion eines Impulsaufnehmers. Es kann wahlweise aufwärts oder abwärts gezählt werden. Beim Erreichen bestimmter Vorgabewerte (Presets) schaltet der Ausgang auf High. Beim Aufwärtszähler sind dies wahlweise das Erreichen von 10, 100 und 1000 (der Zähler hält dann an); ein viertes Preset ermöglicht ein fortlaufendes Zählen. Beim Abwärtszählen sind die Presets 10, 100, 1000 und 10.000, der Zähler hält dann bei 0 an. Der Zähler kann zurückgesetzt werden, indem der Eingang mindestens eine Sekunde lang auf Low geschaltet wird.
  • Timer – eine Zeit wird in Millisekunden gemessen, wahlweise aufwärts oder abwärts zählend. Durch Presets kann festgelegt werden, wann der Ausgang den High-Pegel annimmt. Die Presets hierfür sind 10 Sekuden, 60 Sekunden und 10 Minuten; beim Abwärtszählen beginnt der Zähler dann bei 10 oder 60 Sekunden bzw. 10 oder 60 Minuten und endet bei 0. Der Timer zählt, solange das Signal am Eingang auf Low steht. Ein Rücksetzen erfolgt bei der nächsten Low-Flanke, sofern diese mindestens eine Sekunde später erfolgt – ansonsten wird weitergezählt. Die angezeigten Millisekunden sind nicht zu 100% genau, da dem Mikrocontroller nicht genügend Zeit zur Verfügung steht. Ein Abruf erfolgt genau genommen nur etwa alle 5 ms.
  • Demo-Mode – in diesem Modus wird die aktuelle Darstellungsfähigkeit angezeigt. Dies ist einerseits die sichtbare Textauflösung (Zeichen x Zeilen) und dazu eine Auflistung aller Buchstaben und Zahlen.

Das Bild zeigt die drei Funktionen Frequenz, Timer und Zähler, einmal dargestellt auf einem PC-Monitor und einmal dargestellt auf der Bildröhreneinheit des 6105.

Monitorbilder

Aufbau des Moduls

Das Modul ist denkbar einfach aufgebaut, da sich die meisten Funktionen in der Software befinden. Außer einem Mikrocontroller der Serie ATMega328P finden sich nur ein paar Bauteile darauf, die die einzelne Signale des Controllers zu VGA und FBAS wandeln. Ein DIP-Schalter erlaubt die Einstellung des Grafikmodus, der Presets und der Funktion. Um keine Zeit für unnötige Schleifen zu verlieren, wurde auf eine ständige Abfrage der Schalterstellungen verzichtet. Wenn ein Modus geändert wird, ist daher zusätzlich der Reset-Taster zu drücken. Die Buchsen erlauben den Anschluss eines VGA-Kabels oder eines abgeschirmten Cinch-Videokabels.

Bildschirmfoto 2013-03-10 um 14.07.58 Bildschirmfoto 2013-03-10 um 14.08.08

Hinweis: die zwei gezeigten Layouts sind identisch; beim zweiten wurde jedoch auf den VGA-Adapter verzichtet. Statt dessen findet sich eine 10-Pin-Ausgangsbuchse mit den nötigen VGA-Signalen. Dies macht zwar einen Adapter erforderlich, vermeidet aber, dass beim Basteln Platz für den sperrigen VGA-Stecker reserviert werden muss.  Statt des ursprünglich vorgesehenen ATMega88 kommt der ATMega328P zum Einsatz. Er ist pinkompatibel, besitzt aber doppelt so viel RAM, was bei der gleichzeitigen Bearbeitung von Interrupts für die Grafik und für Timer/Frequenzzähler ein großer Vorteil ist.

Variante 2 mit Terminal

IMG_5193

Das Bild zeigt einen Aufbau mit dem Text-Modul, einem Vorteiler und dem VGA-Modul, das hier als einfacher Frequenzgeber mit bis zu 250 kHz eingesetzt wird.

Quellcode und HEX-File: VGA_PAL_for_philips

Variante ohne Terminal

Der Prototyp wurde ohne speziellen Ausgang und ohne Terminalfunktion gebaut; die Belegung der einzelnen Ports ist geringfügig anders.

Layout - Variante 1 ohne Terminal Variante 1 ohne Terminal

Hier findet sich der Quelltext und das Hex-File für den Mikrocontroller (Variante ohne Terminal): VGA_PAL_for_Philips

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.