Vom MCS-51-Assembler bis zum M5Stack-ESP32
Meine kleine Mikrocontrollergeschichte

Stand  8. August 2020

Begonnen hatte es vor mehr als 20 Jahren, als ich Mikrocontrollerbausteine und die sich mit ihnen  durch kleine selbst erstellte Softwareprogramme ergebenden vielfältigen Möglichkeiten "entdeckt" hatte. Waren es zu Beginn die in Assemblersprache zu programmierenden Bausteine der MCS-51-Serie, so erfolgte später ein Umstieg auf die weit verbreiteten ATMEL-AVR-Chips unter Verwendung der Programmiersprache "BASCOM". Gegenüber Assembler vereinfachte sich die Programmerstellung dadurch deutlich und machte sich vorallem dann bemerkbar, wenn z.B. etwas anspruchsvollere mathematische Kalkulationen durchzuführen waren. Der nächstfolgende Schritt bestand dann in einem Umstieg auf die Entwicklungsumgebung "ARDUINO-IDE" unter Verwendung der Sprache C++, was auch eine Weiterverwendung der vertrauten ATMEL-Hardwarekomponenten erlaubte.

Nachdem alle mir vorschwebenden Projekte in den letzten Jahren auch mit den vertrauten Hard- und Softwarekomponenten realisierbar waren, verlor ich die Neuentwicklungen auf dem Gebiete der Mikrocontrollerbauelemente etwas aus dem Auge. So hatte ich mir zwar auch einmal ein paar Bausteine der Serien ESP12 und ESP8266 zugelegt, aber nie die dringende Notwendigkeit gesehen, sie auch praktisch einsetzen zu müssen. Unlängst stiess ich nun aber auf die Serie: "ESP32" mit ihren erweiterten Möglichkeiten, wie z.B. auch WiFi- und Bluetoothfunktionalität. Nachdem es hierzu aber jede Menge Literatur und Beschreibungen im Internet gibt, möchte ich auf ihre Kenndaten hier nicht näher eingehen. Was mich letztendlich aber zu ihrer Nutzung bewegte, war die Möglichkeit, die von der Arbeit mit ARDUINO vorhandenen Softwarebausteine grösstenteils weiterverwenden und die Ergebnisse dann über die vertraute IDE auch wieder zum Prozessor hochladen zu können.

 
Abb.1

Meine vorerst letzte "Entdeckung" waren nun die Bausteine der Serie "M5Stack" ( Abb.1 ). Gerade mir als absolutem "Mechanikmuffel" kam dabei zugute, dass man mit ihnen auch etwas umfangreichere ESP32-Projekte realisieren konnte, ohne dabei irgendwelche Mechanikarbeiten ausführen zu müssen und dennoch zu durchaus ansehbaren Ergebnissen kommen konnte. 

Herzstück der Serie ist die M5Stack-Basiseinheit ( Abb.2 ). Sie wird in einem quadratischen Platikgehäuse mit u.a. ESP32-Prozessor, 320x240 Pixel-TFT-Farbdisplay, 110mAh-Akku, Ladevorrichtung , NF-Verstärker mit 1W-Lautsprecher, SD-Kartenslot,  Grove-I2C-Port, 30pol. Anschlussleiste und Bodenplatte geliefert. Eine USB-Buchse des Typs "C" dient dabei der externen 5V-Versorgung und Programmierung. Ansteckbar an die Basiseinheit ist ein reichhaltes Sortiment an verfügbaren Zusatzbausteinen. Dazu gehören z.B. ein 650mAh-Akku ( die Kapazität des in der Bodenplatte der Basiseinheit untergebrachten internen Akkus ist für längeren Betrieb nicht ausreichend ), frei bestückbare Prototypenboards, GPS-Boards, LoRa-Boards u.v.a.


Abb.2

Um erste praktische Erfahrungen mit der M5Stack-Basiseinheit sammeln und auch etwas über eventuelle Besonderheiten der verwendeten Sourcecodes lernen zu können, suchte ich nach einem geeigneten Projekt und stiess dabei im Internet auf die folgende Seite aus Japan: https://macsbug.wordpress.com/2017/12/26/gps-clock-with-m5stack/.

         
Abb.3a-c   Ansicht der GPS-Navigationsdaten und Uhrzeit
( Fotos Abb.3b-c: P. Scheuermann )

Mithilfe eines zusätzlich erforderlichen GPS-Moduls aus der M5Stack-Serie erlaubte sie nicht nur die Auswertung und Anzeige der wichtigsten Navigationsdaten, sondern gestattet per Tastendruck auch eine Anwahl zwischen entweder analoger oder digitaler Uhrendarstellung.
Nachdem der Original-Quellcode an die Zeitzone von Japan angepasst war, erforderte es einige kleinere Änderungen, um ihn stattdessen auch für den Einsatz in unserern Regionen tauglich zu machen. Danach kann jetzt zwischen "MESZ" und "MEZ" gewählt werden, wobei die entsprechende Auswahl vorerst allerdings nur direkt im Quellcode vorgenommen werden kann. Für später ist hier noch eine tastengesteuerte Umschaltung vorgesehen.

Zum Anzeigen der Uhrzeit benötigt das verwendete GPS-Modul ( Ublox NEO-M8N ) kein GPS-FIX, sondern nur ein Minimum an Satellitenempfang. Interessant ist, dass im GPS-Modul dabei offenbar auch noch eine interne Uhr gestartet wird, sodass die Zeitanzeige auch noch nach Ausfall des Satellitenempfangs bzw. Betrieb ohne GPS-Antenne ( mit vermutlich etwas reduzierter Genauigkeit ) weitergeführt wird. 

Derzeit existiert auch noch ein kleiner Bug: Er bewirkt, dass in den beiden ersten Stunden nach Mitternacht ( bei MESZ-Betrieb ) jeweils noch das Datum des Vortages angezeigt wird. Vorschläge zur Beseitigung dieses ( m.E. bei genauer Hinsicht nicht ganz trivialen ) Problems nehme ich aber gern entgegen.  

Auch bei der Auswahl der dargestellten GPS-Parameter habe ich mir einige Änderungen gegenüber der Originalversion erlaubt. Dabei sind einige m.E. aber leicht verzichtbaren Ausgaben entfallen. Hinzugekommen sind stattdessen eine Anzeige der Anzahl jeweils ausgewerteter Satelliten, HDOP-Werte und eine Darstellung der Batteriekapazität. Diese Anzeige erlaubt zwar nur eine Abstufung in  25%-Schritten, erwies sich aber bei Betrieb aus dem internen Akku als sehr nützlich.

Der modifizierte Quellcode kann hier heruntergeladen werden: http://www.kh-gps.de//GPS_Macsbug_EU_3.zip
NEU: Eine weitere mit einem M5Stack realisierte Anwendung findet sich auf meiner Seite:  http://www.kh-gps.de/Lora-Decoder_OE.htm