Gesamtkonzept
Das Mikrocontroller-Lab besteht im wesentlichen aus drei Komponenten, die zusammenwirken:
- Der Haupt-Mikrocontroller (wie beim AVRNet6440 vom Typ ATMega644) soll vom Bastler programmiert und möglichst vollständig genutzt werden. Damit sollten möglichst alle Anschlüsse zur Benutzung zur Verfügung stehen. Natürlich ist dieses Ziel nicht vollständig zu erreichen, denn eine gewisse Interkommunikation mit Grafik und Eingabeelementen muss natürlich erhalten werden. Immerhin sind von 32 Ein- und Ausgängen letztlich 29 frei verfügbar.
- Der Grafikcontroller (in seinen Grundzügen bereits an anderer Stelle beschrieben) besteht aus einem Mikrocontroller vom Typ ATMega8515. Dieser Controller besitzt als spezielle Erweiterung ein RAM-Interface, mit dem der interne Speicher erweitert werden kann. Das dafür genutzte Modul hat ein Gesamtvolumen von 512 kByte, von denen hier immerhin die Hälfte tatsächlich genutzt werden – dazu später mehr. Damit kann eine Grafikseite komplett im Speicher abgelegt werden, so dass die Informationen nicht ständig neu erzeugt werden müssen, wie das beim Textmodul noch der Fall war. Damit erreicht man stabile Bilder und hat gleichzeitig noch viel Power für die Abarbeitung von Grafikbefehlen.
- Der Tastatur- und Touchscreen-Controller nimmt die Eingaben entgegen und verarbeitet sie. Damit eine gute Vorverarbeitung möglich ist, wird er mit dem Grafikcontroller gekoppelt. Dieser teilt ihm mit, ob gerade Elemente dargestellt werden, bei denen die Eingabe in Form von Feldern erfolgt (Tastaturen, Menüs, …) oder in Form von Koordinaten (Zeichnen, Schieberegler, …). Er kann auch die Übermittlung von Koordinaten ganz abschalten oder den Touchscreen in einen Kalibrierungsmodus versetzen, in dem dieser dann die eingegebenen Daten selbst verarbeitet und zukünftig genauer arbeitet. Man kennt das von den früheren „PDA“s, einer inzwischen ausgestorbenen und durch Smartphones ersetzten Gerätegattung, die regelmäßig bei Stromverlust solche Kalibrierungen verlangten. Mehr Infos zu Touchscreen-Controllern habe ich hier zusammengetragen.
Die Hauptplatine enthält darüber hinaus noch einen Wandler, der die Informationen des Grafikcontrollers (im RGB-Format, das man beispielsweise vielen Fernsehern über die SCART-Buchse einspeisen könnte) in das Composite-Video-Format wandelt. Dabei verliert die Grafik an Qualität, aber der verwendete Bildschirm hat nun einmal nur einen Composite-Video-Eingang.
Die serielle Schnittstelle
Die drei Controller sollen sich untereinander austauschen, und die beste Methode hierzu ist eine serielle Datenübermittlung, da sie (neben dem Massedraht) in einer Richtung mit nur einem Kabel auskommt. Die geschickten Kommandos sind Byte-orientiert, so dass man einfach Texte und Zahlen übermitteln kann. Allerdings hat diese Methode auch einen Nachteil: wenn der Empfänger das aktuelle Datenpaket nicht abholt, während schon ein neues gesendet wird, ist es verloren. Auch bessere Controller haben nur einen minimalen Puffer. Allerdings senden wir sehr langsam – gewöhnlich reicht die Zeit aller Controller locker, um die Daten abzuholen und zu verarbeiten.
Die Übermittlung sieht nun folgendermaßen aus:
- Der Hauptcontroller sendet seine Daten in Form von Bytes (Kommandos und Werte) an den Grafikcontroller. Dabei muss er natürlich genau wissen, in welchem Modus sich der Grafikcontroller befindet. Um das zu gewährleisten, wurde ein Ausstiegskommando definiert, das auf jeden Fall in einen definierten Zustand führt.
- Der Grafikcontroller übermittelt Informationen an den Tastatur- und Touchscreen-Controller. Obwohl auch hier eine serielle Verbindung möglich wäre, wurde hier eine direkte Kopplung zweier Ausgänge mit zwei Eingängen gewählt. Warum? Einerseits waren sie frei und ungenutzt, zum anderen übermitteln wir gerade einmal zwei Bits, also vier unterschiedliche Zustände („Sende Felder“, „Sende Koordinaten“, „Sende Nichts“, „Kalibriere Dich“).
- Der Tastatur- und Touchscreencontroller übermittelt seine Daten wiederum an den Hauptcontroller über die serielle Schnittstelle. Er liefert Infos, ob Knöpfe gedrückt sind (und entprellt sie per Software) und ob der Touchscreen berührt oder losgelassen wurde. Die Kommandos sind kurz – maximal drei Bytes (Kommando und x- und y-Koordinate) werden gesendet. Wenn nur Felder (also berührte Schaltflächen) übermittelt werden, reicht sogar ein einziges Byte.
Weitere Komponenten
Neben der Hauptplatine besteht das Mikrocontroller Lab hauptsächlich aus peripheren Komponenten:
- Die Spannungsversorgung kann durch die eingelegten Batterien (9V) oder ein angeschlossenes Steckernetzteil (12V) auf der Rückseite des Schaltpults erfolgen. Bei Nutzung des Steckernbetzteils wird die Batteriestromversorgung automatisch abgeschaltet. Daneben finden sich zwei weitere Spannungsregler an Bord, die der Einfachheit halber Fertigbausteine aus China sind und bei ebay als sogenannte „Step-Down-Converter“ zu finden sind. Man stellt den einen mit einem Potentiometer auf den gewünschten Spannungswert (hier 9 Volt) ein, es ist dann innerhalb eines gewissen Rahmens ziemlich egal, welche Eingangsspannung sie erhalten. Der andere Konverter liefert gleichzeitig 5V und 3,3V. Die 3.3V-Versorgungsspannung wird zunächst nirgends benötigt. Viele Sensoren arbeiten aber mit dieser Spannung. Warum keine klassischen Linearregler? Im Gegensatz zu den hier benutzten Spannungswandlern wird bei den Linearreglern die überschüssige Spannung in Wärme gewandelt (Ja, Spannung mal Strom mal Zeit), sie werden also warm oder heiß.
- Ein Stereoverstärker auf Basis des TDA1519-Bausteins schafft einen Line-In-Eingang für iPods oder andere Audioquellen. Der Platz auf der Bauplatte wird so nicht für ewig gleiche, platzverschwendende Verstärker auf TBA820M-Basis verschwendet. Er sitzt absichtlich auf einer getrennten Platine – ich wollte Einstrahlungen so weit wie möglich ausschließen. Der Stereoverstärker wird auf konventionelle Weise durch ein Dual-Stereopotentiometer geregelt – übrigens ein logarithmisches, das sich bei Audio besser verhält als ein lineares.
- Der Bildschirm ist ein Fertigbauteil aus China und wird geliefert mit 4-Draht-resistivem Touchscreen (leider ohne Verdrahtung, so dass man auf einem Flachbandkabel herumlöten muss) und zwei Composite-Video-Eingängen, die über eine Taste umgeschaltet werden können. Ein VGA-Eingang ist ebenfalls an Bord, wird hier aber derzeit nicht benutzt und auch nicht nach außen geführt. Die Auflösung des Bildschirms beträgt 480 x 272 Pixel bei einer Auflösung von 4,3″ in einem Format von 16:9. Bei der gewählten Auflösung des Grafikcontrollers mit 256×252 Pixel führt das dazu, dass die dargestellten Pixel auf dem Schirm nicht quadratisch sind. Anders gesagt: wenn man ein Rechteck vom Koordinatenpunkt 0,0 zum Koordinatenpunkt 10,10 zeichnen möchte, entsteht auf dem Bildschirm ein Rechteck, das in x-Richtung fast doppelt so lang ist wie in y-Richtung. Man muss das bei der Benutzung der Grafik bedenken. Der Bildschirm wird über seinen AV-Eingang mit der Hauptplatine verbunden und mit einem Vierdrahtkabel mit dem, Touchscreen-Controller. Welche Kabel welche Bedeutung haben, findet man beim ersten Anschließen schnell heraus.
- Ein SD-Kartenleser ist derzeit noch in Arbeit.
Mit an Bord sind auch ein ansonsten unbeschalteter Taster und ein 10-kOhm-Potentiometer, wie sie beim Basis-Lab-Schaltpult zum Einsatz kommen. Zwei Mini-Lautsprecher (immerhin 1W bei 8 Ohm) geben den Ton wieder.
Schaltbild
Das folgende Bild zeigt die Schaltung in ihrer ganzen Schönheit.
Hierzu ein paar Hinweise auf Besonderheiten:
- Das RAM des Grafikcontrollers ist für eine einzelne Seite viel zu groß – 64 kByte würden reichen. Aber solche Bausteine sind kaum mehr zu bekommen, daher wurde der kleinste erhältliche genutzt. Dieser besitzt drei Eingänge mehr als das Original in der Beschreibung auf microcontroller.net. Zwei davon wurden genutzt, um intern eine Umschaltung von ganzen Grafikseiten zu ermöglichen. Dann kann beispielsweise eine Zeichnung auf dem Bildschirm erhalten bleiben, während man eine neue Farbe auswählt. Damit nutze ich 4 unterschiedliche Seiten und effektiv nur die Hälfte des Speichers. Grundsätzlich könnte man das ganze auf 8 Seiten erweitern – der Mikrocontroller gäbe das noch her.
- Alle Mikrocontroller haben eigene Quarze. Das wäre prinzipiell nicht nötig, aber das Weiterleiten so hoher Frequenzen auf der ganzen Platine erschien mir kritisch. Die Quarze kosten auch nicht die Welt.
- Der zur Wandlung in das Composite-Signal eingesetzte AD724 benötigt neben einem 4,433-MHz-Quarz (Taktfrequenz des Farbträgers bei PAL) noch einen Kondensator. Im Datenblatt wird dieser als variabel zwischen 5pF und 30pF angegeben, und man sollte das ernst nehmen. Ich habe einen Festwert eingebaut, den ich nach Ausprobieren auf 6,8pF festlegen konnte. Wenn dieser Kondensator falsch dimensioniert ist, sieht man statt Farbe bloß ein graues und qualitativ schlechtes Bild.
- Die Farbe wird übrigens durch das Widerstandsnetzwerk am 74HC574 gebildet. Wenn man die Widerstände anders wählt, kommen andere Farben heraus. Durch andere Kombination der Eingänge kann man auch andere Zusammenstellungen der 256 Farben erreichen – meine Variante ist etwas blau-grün-stichig.
- Die Verbindungen werden komplett mit Steckverbindungen hergestellt. Das funktioniert bisher problemlos – außer bei der Anbindung des Interfaces der SD-Karte, weshalb ich meinen Eigenbau erst einmal wieder ausgebaut habe und nun auf ein (billigeres) Fertigmodul aus China warte, das für den Arduino designt wurde. Hier werde ich ergänzen, wenn damit Erfahrungen vorliegen.