MCU-Butler - Teil 1 (Einführung)
In der Elektronik läuft nichts mehr ohne Mikrocontroller. Sie vereinfachen und verschlanken das Schaltungsdesign wesentlich. Funktionalität wird zu gunsten der Hardware in die Firmware verlagert. Schier unermesslich ist die Typenvielfalt an Bauelementen. Die Hersteller buhlen um die Gunst der Kunden mit kleinen EVAL-Boards, die das Schaltungsdesign vereinfachen sollen. Die sind fast immer ziemlich spärlich, meistens nur mit einer LED und einem Taster ausgerüstet. Das reicht gerade für ein „Hallo World“-Progrämmchen. Ziel ist, dem Entwickler Appetit auf mehr zu machen, aber mit dieser Konfiguration ist „mehr“ nicht drin. Für ernsthafte Entwicklungen taugen die in den seltensten Fällen. Außerdem kocht jeder Hersteller sein eigenes Süppchen und der Umstieg auf andere Systeme gestaltet sich oft schwierig.
Hier begann mein Denkansatz für die Entwicklung eines universellen, systemübergreifenden Entwicklungssystems für „programmierbare Bauelemente/Baugruppen“ – ganz allgemein. Ich verwende im weiteren Verlauf die Begriffe Zielsystem oder MCU, obwohl letzteres nicht ganz korrekt ist und nicht die gesamte Bandbreite der Möglichkeiten widerspiegelt. So lassen sich theoretisch auch CPLDs, FPGAs und selbst komplexe Systeme wie der allseits beliebte Raspberry Pi einbinden. Dieses von mir MCU-Butler genannte System lässt wirklich kaum Wünsche offen. Der MCU-Butler ist offen für zukünftige Entwicklungen und kann beliebig um weitere Komponenten erweitert werden. Realisiert wird das alles durch einen modularen Aufbau und strikte Aufteilung in verschiedenen Funktionsebenen.
Anhand des nebenstehenden Schemas möchte ich die Funktionsweise kurz erläutern.
Herzstück ist das Board MCU-Butler . Es vereint die Grundfunktionen (gelb) sowie das Modul-Interface (grün).
Dessen Hauptfunktion ist die Bereitstellung diverser Ein- und Ausgabekomponenten, die an die MCU angebunden werden können. Das sind z.B. verschiedene Schalter, LEDs, Displays. Es gibt auch bidirektionale Bauteile wie Kartenleser, EEPROM,… Letztendlich sind auf dem Board auch Bus-Systeme wie I²C oder SPI vorhanden, an die eine MCU andocken kann.
Viele Komponenten sind über Jumper konfigurierbar. Baugruppen, die nur mit 3,3V versorgt werden dürfen, können über bidirektionale Levelshifter angebunden werden und so auch problemlos auch mit 5V Systemen kommunizieren.
Des Weiteren sind Baugruppen zur systemrelevanten Datenkommunikation zwischen MCU und dem PC vorhanden, wie z.B. Flashtools.
Über einen integrierten AVR-kompatiblen Programmer (USBasp) können AVR-Controller direkt mittels ISP-Mode programmiert werden. Auch für ST-kompatible Prozessoren ist eine Kommunikation mit einem ST-Link V2-Stick vorgesehen. Für beide Programmieroptionen muss nicht eine einzige zusätzliche Verbindungsleitung hergestellt werden. Selbstverständlich können auch die Programmiermöglichkeiten genutzt werden, die fertige Controller-Boards von Haus aus mitbringen. Meistens sind dafür eigene USB-Buchsen vorhanden (z. B. Arduino-Boards).
Viele Controller bieten die Möglichkeit einer Bootloader-Programmierung über die serielle Schnittstelle. Dafür wurde ein USB/serial-Interface integriert. Das kann alternativ auch für Software-Debugging über die serielle Schnittstelle genutzt werden.
Das MCU-Board kümmert sich auch um die Betriebsspannungsbereitstellung. Dazu werden zwei Schienenspannungen von 5,0V und 3,3V erzeugt. Je nach Anforderungen des Zielsystems, wird die Betriebsspannung automatisch ausgewählt und angezeigt. Zur externen Stromversorgung reicht ein Steckernetzteil mit einem 6…12V/1A Gleichspannungsausgang.
Das eigentliche Zielsystem, der Mikrocontroller oder ein Mikrocontroller-EVAL-Board, wird über das Modul-Interface mit dem Grundboard verbunden. Diese Schnittstelle ist als Steckplatz mit zwei Präzisionsbuchsenleisten ausgeführt. An deren Pins liegen die wichtigsten internen Verbindungen (Betriebsspannung, AVR-SPI-Leitungen, ST-Link-Leitungen, externer Quarz, Reset-Schalter) bereits an.
Eine detaillierte Beschreibung der Funktionen erfolgt im Teil 2.
GND und die beiden Schienenspannungen sind mit einem zweiteiligen Breadboard fest verbunden. Diese Boards sind für weitere, externe Aufbauten gedacht. Beide Komponenten, (MCU-Butler-Board und Breadboards) sind zusammen auf einer stabilen Kunststoffplatte montiert.
Jedes Zielsystem muss so ausgeführt sein, dass es mechanisch auf diesen vorgegebenen Steckplatz passt, mit einer Betriebsspannung von 3,3V oder 5V arbeitet und wenigstens über GND angebunden ist. Das sind eigentlich schon die einzigen Randbedingungen, die sie im Bezug auf den MCU-Butler erfüllen müssen.
Die im Schema „blau“ gekennzeichnete Ebene beschreibt die Aufsteckmodule. Ein MCU-Modul trägt nur einen einfachen Prozessor. Auf Board-Modulen hingegen wird ein weiteres prozessorspezifisches EVAL-Boards (violett) aufgesteckt. Das sind solche Minibaugruppen wie Arduinos, ESP-Bords, „Blue Pill“, u.s.w.. Der Anwender muss sich also nur um ein passendes Aufsteckmodul für sein spezielles Zielsystem kümmern. Ich habe mittlerweile ca. 20 Module für diverse Anwendungen entwickelt. Diese werden im Teil 3 näher vorgestellt.
Ganz links auf dem Board ist ein Steckplatz für Erweiterungen, wie Displays oder Universalleiterplatten vorgesehen. Diese werden im Teil 4 vorgestellt.
Wie erfolgt nun eigentlich die Verbindung zwischen den I/O-Komponenten und dem Zielsystem? Neben der Nutzung der bereits fest verdrahteten Signalleitungen, werden externe Verbindungen über Jumperkabel hergestellt. Dazu sind an allen Pins, auf den Modulen und auf dem MCU-Butler-Board, Präzisionsbuchsenleisten verbaut. Mit einfachen Steckverbindungen kann also binnen kürzester Zeit die gewünschte Hardwarekonfiguration zusammengesteckt werden.
