Entwicklungsvarianten - Teil 2 (PCB)
Variante 1.x
Hauptkomponente des Entwicklungssystems MUC-Butler ist die gleichnamige Leiterplatte in der aktuellen Version 1.4. Das PCB hat eine Größe von 165mm x 140mm. Zunächst muss erst mal der Multimeter-Durchbruch entlang der perforierten Kanten mit einer Laubsäge ausgesägt und sauber entgratet werden. Danach erfolgt schrittweise die Bestückung. Das verlangt einige Erfahrungen und Fertigkeiten im Umgang mit SMD-Bauelementen und das entsprechende Equipment. Es gilt Bauformen 0603 und IC-Gehäuse mit 0,65mm Pitch zu verbauen. Hier noch mal die Gesamtansicht und der Übersichtsplan dieser Baugruppe. Im Anschluss werden ich Schritt für Schritt den Aufbau und die Wirkungsweise der Einzelkomponenten erläutern.
Stromversorgung
Die Versorgunsspannungszuführung erfolgt über ein Steckernetzteil 6VDC bis 12VDC. Eine Strombelastbarkeit von 1A ist ausreichend. Zur Einspeisung ist eine Hohlsteckerbuchse 5mm/2,1mm vorgesehen. Über den Hauptschalter gelangt die Eingangsspannung an einen LDO. Diese erzeugt die Schienenspannung von 5V. Ein weiterer LDO erzeugt daraus 3,3V. Dieser befindet sich unter dem MCU-Modul. Mit diesen Spannungen werden Komponenten versorgt, die explizit dafür ausgelegt sind. Des Weiteren gibt es noch die Spannung „PW„. Diese kann entweder 3,3V oder 5V annehmen (z.B. der I²C-Bus). Das ist abhängig vom verwendeten Zielsystem und wird durch das Modul festgelegt. Dazu ist PW auf dem Modul fest mit einer der beiden Spannungen verdrahtet. Ich erläutere das noch mal konkret bei der Beschreibung der MCU- bzw Board-Module.
PW wird auch durch das kleine Multimeter angezeigt. Dieses wird von der PCB-Rückseite in die vorgesehene Öffnung eingeführt und mit dem Board verschraubt oder verklebt. Auch die Verlötung der Anschlüsse erfolgt auf der Rückseite.
Ich empfehle, erst mal nur alle Komponenten der Spannungsversorgung zu bestücken und diese dann zu testen. Dabei ist zu beachten, dass Jumper 5P-Sys erst mal offen bleibt. Nach Zuschaltung der Betriebsspannung muss an dessen linken Pin 5V anstehen. Ist das gegeben, kann der Jumper gesetzt werden. Damit wird das gesamte PCB versorgt. Wenn man jetzt den Pin PW an der linken Buchsenleiste des MCU-Modul-Steckplatzes nacheinander mit den Pins 3,3P und 5P verbindet, müssen diese Werte am Multimeter angezeigt werden. Erst wenn das funktioniert, sollte mit der weiteren Bestückung fortgefahren werden. Ich empfehle von „unten nach oben“ zu bestücken. Das heißt, erst die SMDs einlöten, dann die großen Bauelemente.
Schalter und Taster
Hier handelt es sich um eine Reihe verschiedenster Eingabekomponenten.
Als erstes wären da 8 Stück Mikrotaster. Diese erzeugen Low-Signal (GND-Potential) im gedrückten Zustand.
Darunter ist ein Block mit vier DIP-Schaltern angeordnet. Hier können feste Schaltzustände erzeugt werden. Betätigter Schalter bedeutet Low-Signal.
Beide Schaltergruppen sind über die gemeinsame Buchsenleiste SW zugänglich.
Weiterhin steht ein BCD-Schalter zur Verfügung. Auch hier erzeugt ein geschlossener Schalter Low-Signal. Bei allen soeben beschriebenen Schaltern ist der offene Zustand nicht definiert. Hier müssen über die Firmware im Zielsystem die Pullups der Eingsanspins gesetzt werden!
Die vier Signale für die Schalter a bis d sind an die Buchsenleiste BCD geführt.
Als letzte Schalterbaugruppe ist ein Drehimpulsgeber vorhanden. Dieser stellt 3 Signale an IMP bereit.
IR-Sensor, Potentiometer, Buzzer
Zur Bereitstellung einer analogen Eingangsspannung ist ein 10kOhm-Potentiometer vorgesehen, das über die Buchse Poti zugänglich ist. Über Rin wird die Spannung eingespeist, mit der das Poti betrieben werden soll. An Rout wird die Schleiferspannung abgegriffen. Diese kann also einen Wert zwischen Rin und GND annehmen. Dabei muss der Anwender selber darauf achten, dass die erlaubte Spannung am angeschlossenen Pin des Zielsystems nicht überschritten wird!
Ein IR-Sensor TSOP1738 ermöglicht die Kommunikation mit einer Fernbedienung. Der Sensor wird fest mit 5V versorgt. Das Ausgangssignal wird auf einen Wert von ca 3,3V geteilt, der sowohl die Kommunikation mit 3,3V- als auch 5V-Systemen zulässt. Der Anschluss erfolgt an IR.
Über den Anschluss Beep kann ein aktiver Piezoschwinger angeschlossen werden. Bei einem High-Signal an Beep ertönt ein entsprechender Ton.
LEDs, RESET
Erweiterunsport
Der Erweiterungsport ist eine 2 x 16polige Präzisionsbuchsenleiste. Sie ist vorzugsweise für die Aufnahme eines 2,2″ TFT-Displays mit dem weit verbreiteten ILI9340C-Treiber optimiert. Es kommuniziert über einen SPI-Bus.Dieses Display kann mit 5V Betriebsspannung versorgt werden, benötigt aber unbedingt 3,3V-Pegel zur Kommunikation. Deshalb wurden Levelshifter für die Signalleitungen vorgesehen. Dadurch wird das Display automatisch von Zielsystemen sowohl mit 3,3V- als auch mit 5V- Pegeln angesteuert.
Das Display wird in die hintere Buchsenreihe eingesteckt. Die vordere Reihe ist für die Jumperkabel gedacht. Das erste, linke Pin (VCC) muss dabei in die erste „schwarze“ Buchse gesteckt werden, so wie in der Abbildung dargestellt. Pin 2 ist GND. Diese Versorgungsleitungen müssen mit der „roten“ bzw. „weißen“ Buchse über Jumperkabel gepatcht werden. Die SPI-Signale werden an den „grünen“ Buchsen angeschlossen. Sie werden über die schon erwähnten Levelshifter zu den TFT-Pins geführt.
Um hier versetztes Stecken zu vermeiden, sollte man sich die Buchsenleiste farblich kennzeichnen, so wie im Bild dargestellt.
Dieser Port kann aber auch für eigene Erweiterungsmodule wie OLED-Displays oder auch Aufbauten auf Universalleiterplatten genutzt werden.
LCD-Display
Eine weitere Option zur Textausgabe bietet das weit verbreitetes LCD-Display mit HD44780-Treiber. Es kann jeweils 16 Zeichen in 2 Zeilen darstellen. Es ist so konfigurierbar, dass es entweder über 4bit parallel oder den I²C-Bus angesteuert werden kann.
Die Betriebsspannung liegt fest auf 5V. Es kommt dabei aber auch problemlos mit 3,3V-Pegeln klar.
Um des Display mit Betriebsspannung zu versorgen, ist der Jumper LCDpower zu stecken. Das ist der einzige liegende Jumper auf dem Board, sodass er auch bei gestecktem Display zugänglich bleibt.
Die Hintergrundbeleuchtung wird mit dem Jumper LCD-Blgt konfiguriert. Bei on ist diese ständig an. Bei prog kann sie über Firmware gesteuert werden. Das funktioniert allerdings nur bei I²C-Ansteuerung über den Port P3 des Expanders.
Unter dem LCDpower-Jumper liegt ein kleiner Einstellregler zur Kontrasteinstellung.
Die direkte Paralellansteuerung erfolgt über die Buchsenleiste LCDlines I²C-mode. Die entsprechenden Signalleitungen sind dort bezeichnet. Diese Anschlüsse sind direkt mit dem LCD verbunden. Bei dieser Form der Ansteuerung sind alle sechs Jumper neben der Buchsenleiste zu ziehen.
Bei Ansteuerung über I²C sind die Jumper zu setzen und alle Leitungen an der Buchsenleiste LCDlines I²C-mode zu entfernen!
Die Basisadresse des I²C-Expander ist 0x20. Sie kann mit den Jumpern A0…A2 im Feld I²C-Expander bis 0x27 konfiguriert werden.
EEPROM, DAC und der I²C-Bus
Eine weitere Komponente die über I²C angesteuert wird, ist ein EEPROM der Serie 24Cxxx. Für diesen Speicher sind zwei Plätze auf dem MCU-Butler vorgesehen. Unter dem LCD-Display kann entweder ein SOIC8-Gehäuse direkt aufgelötet werden oder man nutzt links daneben den IC-Sockel, um eine DIP-Variante dieses Bauteils einzustecken. Es versteht sich von selber, dass immer nur eine Variante möglich ist. Die Modifikation der I²C-Adresse erfolgt an den Jumpern E1 und E2, im Bereich I²C-EEPROM.
Auch über den I²C-Bus ansteuerbar ist ein 12Bit DAC vom Typ MCP4725. Er ist über Aout im Bereich DAC, unter dem MCU-Sockel, rechts neben der TFT-Steckleiste zugänglich. Die Adresseinstellung kann an A0 vorgenommen werden.
Zwischen TFT-Sockel und DAC ist der Bereich I²C für die zentrale Einspeisung von SCL und SDA, also den Busleitungen, vorgesehen. Diese Signale sind zusätzlich auch an das MCU-Modul geführt und können dort direkt von Modulen genutzt werden. Eine Anbindung über Jumperleitungen ist allerdings die flexiblere Lösung.
SCL und SDA sind über 4,7kOhm Pullup-Widerstände an PW geführt. Der Bus arbeitet also automatisch mit 3,3V oder 5V, je nach Vorgabe durch das Steckmodul.
Mikro SD Kartenleser
Alle SD-Karten verwenden grundsätzlich eine 3,3V-Schnittstelle. Deshalb ist VDD fest mit 3,3V verbunden. Die vier SPI-Pins sind über einen Levelshifter geführt, sodass an den Eingangsbuchsen im Bereich mikro SD-Card sowohl 5V- als auch 3,3V-Signale angelegt werden können. Die Einstellung erfolgt wieder automatisch über das Modul des Zielsystems.
Mitunter sind auch auf TFT-Displays Steckplätze für SD-Karten vorhanden. Diese können natürlich auch verwendet werden. Der TFT-Steckplatz ist ja an allen „grünen“ Buchsen auch mit Levelshiftern ausgestattet (siehe dazu TFT-Display-Port).
Hierzu sind aber unbedingt die Herstellervorgaben zu berücksichtigen.
USB serial interface
Dieses Interface ist für die serielle Kommunikation des Zielsystems mit dem PC gedacht. Als Hauptanwendung ist hier der Datenaustausch mit einem Monitor-Programm zu nennen. Es lässt sich aber auch zur Bootloader Programmierung verwenden, wenn das Zielsystem das unterstützt. Die Verbindung zum PC erfolgt über ein USB-Kabel mit Mikro-USB-Stecker an den MCU-Butler. Auf dem Board ist ein FT232RL als USB/TTL-Wandler verbaut. Dazu muss auf dem PC ein entsprechender Treiber installiert werden. Windows 10/11 bringen den von Haus aus mit.
Die Spannungsversorgung des Interfaces erfolgt ausschließlich über das USB-Kabel vom PC. Er ist mit dem Board nur an GND angebunden. Der Signalpegel kann im Bereich USB/serial per Jumper zwischen 3,3V und 5,V eingestellt werden. Es wird empfohlen, immer den kleineren Wert einzustellen. Auch 5V-Systeme kommen in der Regel damit klar. Ansonsten muss der Anwender selber sicherstellen, dass eine 3,3V-MCU nicht mit 5V-Pegeln „erschlagen“ wird.
Die beiden seriellen Signale liegen fest an den Buchsen mit den Bezeichnungen MTX und MRX an und können bei Bedarf auch per Jumper direkt zum Modul-Steckplatz durchgeschaltet werden. Die Bezeichnung M vor RX/TX soll verdeutlichen, das sich das Signal auf die M-CU bezieht. Das heisst, MTX wird mit TX und MRX mit RX des Zielsystems verbunden.
Die richtige Funktion des seriellen Interfaces kann leicht mit einem Terminalprogramm überprüft werden. Dazu sind MTX und MRX mit einem Jumperkabel zu brücken. Die Eingabe von Text im Eingabebereich des Terminals muss nach dem Absenden dann auch im Ausgabebereich erscheinen (Loop-Test). Der Datentransfer wird auch durch die beiden LEDs angezeigt.
AVR Flashtool USBasp 2
Dieses Flashtool ist die Umsetzung des open source Brenners USBasp 2 von Thomas Fischl auf dem MCU-Butler. Er ist ein in-circuit Programmer für AVR-Controller der Serien ATtiny und ATmega. Dieser eigentlich als USB-Stick gebaute Programmer ist weit verbreitet und aus China für wenig Geld zu beziehen. Ich habe ihn als integralen Bestandteil des MCU-Butlers fest auf dem Board eingebunden.
Es gibt zwei Möglichkeiten der Implementierung. Entweder man baut die Schaltung um einen ATmega 8 herum mit neuen Bauteilen auf oder man besorgt sich einen entsprechenden Programmierstick, lötet alles ab und setzt die Bauelemente einfach auf dem Butler-Board wieder neu auf. Ich empfehle den zweiten Weg. Das ist in der Summe preiswerter und außerdem ist der Controller bereits mit der richtigen Firmware programmiert. Ich habe die Schaltung nur dahingehend verändert, dass ich TVS-Doppeldioden für den USB-Schutz eingesetzt habe.
Die vier ISP-Signale habe ich über die vier Jumper im Bereich USBasp 2 an die Buchsen des Modulsteckplatzes geführt. AVR-Module werden das zu schätzen wissen 🙂 . Werden diese Leitungen nicht gebraucht, ist der gesamte Jumperblock zu ziehen.
Zur externen Verwendung des Programmiertools ist auch eine MICROMATCH-Buchsenleiste vorgesehen. Das ist mein „persönlicher Quasistandard“ den ich auf allen meinen AVR-Boards zum externen Flashen als Programmierschnittstelle verwende. Den kann man also auch weglassen. Sollte jemand daran Gefallen finden und ihn doch verwenden, dann bei externer Programmierung auch hier die 4 Jumper ziehen. Am Pin 5 kann das externe Zielsystem mit 5V versorgt werden. Dazu ist der Jumper V-Target zu setzen. Ist das nicht erwünscht, dann bitte offen lassen.
Zur Modifikation des Flashtools sind zwei Jumper vorgesehen. Jumper sp dient zum Update der eigenen Firmware. Er ist im Normalbetrieb offen zu lassen.
Der Jumper slow ist für den langsamen Programmierbetrieb zu setzen, wenn fabrikneue AVRs geflasht werden sollen. Die haben standardmäßig eine Taktteilung von 1:8 voreingestellt und lassen nur eine langsame Kommunikation zu. Nach Deaktivierung des Dividors im FUSE-Bereich, kann man mit diesen Controllern dann auch wieder „fast“, also mit offenem Jumper, kommunizieren.
Der Anschluss zum PC erfolgt über ein USB-Kabel mit Mini-USB-Stecker. Die Betriebsspannung erhält der Programmer ausschließlich über dieses USB-Kabel.
ST-Link V2
Auch für Controller(boards) von STmicroelectronics stellt der MCU-Butler ein passendes Programmiertool bereit. Dafür wird der ST-Link V2 verwendet. Der USB-Stick ist als Kaufteil zu erwerben und erlaubt neben der reinen Programmierung auch das Hardwaredebugging im Zielsystem. Es wird in eine 2x4polige abgewinkelte Buchsenleiste eingeschoben und mit einer Klammer am Board fixiert.
Auch hier werden die Programmierleitungen über Jumper zum Modulsteckplatz geführt (rechts neben der Buchsenleiste der ST-Link). Bei Nichtverwendung sind diese zu ziehen.
Steckplatz MCU-Modul
Hier nun die letzte und schon oft angesprochene Komponente auf der Platine – der Steckplatz für die MCU-Module bzw. Board-Module.
Er besteht aus zwei Präzisionsbuchsenleisten, an der jede Menge Signale anliegen. Die können über entsprechendes Moduldesign an das Zielsystem angebunden werden. Um das zu erleichtern, sind auf beiden Leisten alle wichtigen Signale und Spannungen durchgebrückt. Das ist aber letztendlich nur ein Angebot. Ob man das nutzt, ist dem Anwender selber überlassen. Lediglich die GND-Anbindung ist obligatorisch.
Für die Erstellung der Module ist letztendlich die Kenntnis der Anschlussmöglichkeiten, die Einhaltung des Footprints und die äußeren Abmaße entscheidend. Darauf gehe ich aber erst näher im Teil 3 ein.
Zusammenbau und Zubehör
Damit ist die Platine komplett aufgebaut. Alle Komponenten sollten mit Beispielprogrammen getestet werden. Das setzt natürlich voraus, dass man auch schon ein MCU-Modul zur Verfügung hat. Am einfachsten lässt sich dazu ein ATmegaX8-Modul verwenden, oder ein Board-Modul mit einem Arduino-Nano. Wie das gemacht wird, zeige ich im Teil 3.
Vorher sollte man das Butler-Board jedoch noch mit zwei Breadbords komplettieren. Das erweitert den Funktionsumfang noch mal beträchtlich. Dort können eigene Schaltungen aufgebaut und/oder fertige Erweiterungen eingebunden werden.
Dazu habe ich eine Acrylplatte in der Größe 170mm x 220mm x 5mm verwendet. Die Platine wurde dazu im oberen Bereich mittels Distanzhülsen aufgeschraubt. Die beiden Breadbords wurden zusammengesteckt und darunter aufgeklebt. Anschließend verbindet man die Stromschienen der Breadboards mit den Betriebsspannungsanschlüssen auf dem MCU-Butler-Board. Dazu sind ganz unten die Lötflächen GND, 3,3Pout und 5Pout vorgesehen. GND liegt an allen blauen Stromschienen an. Auf die beiden oberen roten Schienen habe ich 5P gelegt. Die unteren roten Schienen habe ich grün übermalt und dort die 3,3V angeschlossen.
Neben den Distanzhülsen sind noch einige andere Kunststoffteile notwendig, die ich mit einem 3D-Drucker erzeugt habe:
4 Distanzhülsen
1 TFT-Stütze
1 Halteklammer für ST-Link
1 Abdeckrahmen für Digitalanzeige
Variante 2.x
Die Entwicklungsvariante 1 war einige Jahre erfolgreich im Einsatz. Dabei kristallisierten sich Stärken und Schwächen heraus. Der Trend bei der Entwicklung von Mikrocontrollern und Boards geht immer mehr zu niedrigen Betriebsspannungen. Mittlerweile sind 3,3V nicht mehr die Ausnahme, sondern die Regel. Unter Berücksichtigung aller Erkenntnisse habe ich mich entschlossen, ein neues Board als Version 2 zu entwickeln. Dabei sind folgende Änderungen und Neuigkeiten eingeflossen:
- Hervorstechendstes Merkmal ist der Wegfall der 7-Segmentanzeige für die Systemspannung. Dafür wurde ein Betriebsspannungsmonitor mit einer Ein-/Ausschaltsteuerung, implementiert. Die gewählte Systemspannung „PW“ wird groß angezeigt. Zusätzlich werden die Eingangsspannung Uin, sowie die beiden erzeugten Betriebsspannungen 3P3 und 5P gemessen und angezeigt. Die Zu- bzw. Abschaltung der Systemspannung erfolgt über zwei Taster. Das alles wird durch eine Controllerschaltung mit einem ATmega328 realisiert. Das Flashen erfolgt über einen ISP-Buchse auf der Platinenrückseite.
- Das serielle Interface arbeitet mit festem 3,3V-Pegel. Das funktioniert auch problemlos bei 5V-Controllern.
- Die Anzahl der Taster wurde auf 6, die der einfarbigen LEDs auf 4 reduziert. In der Praxis hat sich gezeigt, dass das völlig ausreichend ist. Dafür wurde mehr Platz für die Einschaltsteuerung gewonnen.
- Die Pegelwandler vor den SD-Karten-Anschlüssen wurden entfernt. Die Kommunikation erfolgt ohnehin fast nur mit 3,3V-Controllern. Bei 5V-Anbindung können die vorhandenen, frei zugänglichen acht Pegelwandler benutzt werden.
- AVR-Programmer und serielles Interface wurden mit USB-C Buchsen ausgestattet.
- Das LCD-Display ist fest an den I²C-Bus angeschlossen. Dadurch vereinfacht sich die Datenübertragung deutlich und es werden I/O-Pins eingespart.
- Auch der ST-Link V2 wurde aus Platzgründen vom Board entfernt. Dafür wurde einen platzsparender Wannenstecker verbaut, in den bei Bedarf der Debugger senkrecht eingesteckt werden kann. Hier wurde das Pinning der neuen Version berücksichtigt ( GND an Pins 5 und 6).
- Der IR-Sensor wurde durch eine kleinere Bauform ersetzt.
- Vor der Stromversorgungsbuchse wurde eine USB-A Buchse platziert. Sie dient als 5V-Spannungsversorgung für diverse externe Geräte (z.B. Multitester).
- Der Erweiterungsport wurde flexibler gestaltet. Die Anschlüsse sind nicht mehr durch Signale und Betriebsspannungen vorbelegt. Dafür wurde unmittelbar davor ein Powerport platziert, von dem aus die benötigten Signale gepatcht werden können.
- Vorn rechts wurde eine 3polige Stiftleise mit GND angeordnet. Diese können als Bezugssignal für externe Messgeräte (Oszilloskop) genutzt werden.
- Letztendlich wurde auch die Handhabbarkeit des MCU-Butlers verbessert. Es hat sich als sinnvoll erwiesen, wenn das Board schräg auf dem Arbeitsplatz steht. Dafür wurden vorn und hinten unterschiedlich hohe Füße verbaut. Außerdem wurde ein ausklappbarer Aufstellbügel aus einem Möbelscharnier auf der Rückseite angebaut. Die Grundplatte selber habe ich aus beidseitig mit Aluminium kaschiertem Kunststoff gefertigt und die Alu-Teile mit GND verbunden.
- Die diversen Umbauten benötigen auch neue 3D-Druckteile. Die Abdeckungen für das LCD-Display und Betriebsspannungsmonitor werden nach erfolgreichem Funktionstest aufgeklebt. Da bei der Einschaltsteuerung verschiedene Taster mit verschiedenen Knopfformen verwendet werden können, gibt es hier unterschiedliche, alternative Kappen als 3D-Vorlagen.
Die Änderungen sind den Fotos und Bauunterlagen zu entnehmen. Dort ist auch die Firmware für die Steuerung zu finden. Sie wurde mit VScode/PlatformIO erstellt. Alle notwendigen, zum Projekt gehörenden Unterlagen sind zu gegebener Zeit auch auf meiner GitHub-Seite präsent. Ansonsten können sie auch hier geladen werden.
