Mikrocontroller lehren effizientes programmieren

  • Mahlzeit!

    Wie hatten es ja kürzlich erst von der guten, alten Zeit, in der man die Hardware seines PCs noch persönlich kannte und entsprechend programmiert hat.

    Gestern musste ich dann schmunzeln. Ein Online-Bekannter von mir, mit dem ich mich viel über programmieren unterhalte, hat mir gestern von einem seiner Projekte erzählt, welches er seit einigen Jahren betreibt. Kern des Ganzen ist ein Arduino Nano wegen der Bauform, ein Display und eine ganze Reihe von Sensoren. Von Temperatur und Feuchtigkeit bis Blitzdetektoren, CO2, Windgeschwindigkeit und keine Ahnung was auch sonst noch. Mit einem Pi Pico oder ESP32 wäre das so gar nicht so schwer zu realisieren. Aber mit dem Nano rennt man da schnell in zu wenig Speicher oder Rechenleistung. Aber, man kennt das ja. Das Projekt wurde eben auf einem Nano gestartet, da es zu Projektstart noch nichts ähnliches in der Grösse gab, da sind jetzt schon Tonnenweise Arbeitsstunden eingeflossen, da wirft man das nicht einfach weg und baut es auf dem Pico neu.

    Ich kenne den Nano auch und gerade wenn man da mittels Bibliothek ein Display ansteuert, kommt der Kleine sehr gerne ins Schwitzen. Das hat mich dann an den Atari VCS erinnert, auf dem es auf einmal Spiele gab, die schon rein von der Hardware unmöglich waren. Das Zauberwort heisst tricksen und genau das macht der auch.

    Der für mich normale Schritt, so etwas zu entwickeln wäre, erst alle Daten der Sensoren abrufen, die aufbereiten und auf dem Display anzeigen. Natürlich geht das, aber der kleine Nano stösst bei der Menge alleine wegen seines geringen Speichers da ganz schnell an seine Grenzen und das dann auch noch grafisch auf einem Display ausgeben, da schwenkt der Kleine gerne die weisse Fahne.

    Dennoch konnte ich mich in einem kleinen Video davon überzeugen, dass er eine flimmerfreie und schnelle Ausgabe auf seinem Display zustande gebracht hat. Mit Grafik. Der Code dahinter ist schon fast abartig gross. Anstatt alles auf einmal zu sammeln, liest er bei jedem Schritt immer nur ein Sensor aus, speichert die aufbereiteten Daten in einer Datei und wenn dann alle Sensoren abgefragt sind, wird im letzten Schritt die Datei ausgelesen und der Inhalt grafisch auf das Display gepinselt. Effizienz ist dabei echt gross geschrieben bei dem. Er betreibt einen ziemlich grossen Aufwand, um wirklich jedes mögliche Byte zu sparen. Ich will nicht wissen, wie viele Stunden er da in die Optimierung versenkt hat. Aller Wahrscheinlichkeit nach wäre ein Umstieg auf einen anderen Controller deutlich schneller gewesen. Aber nein, er wollte es mit dem Nano realisieren und hat es geschafft, was mich tief beeindruckt.

    Das Fazit ist aber klar. Er geht da den harten Weg und hat Erfolg. Von so etwas wie "Die Spezifikationen geben es nicht her", halten ihn nicht auf und er trickst so lange herum und optimiert so hart, dass es ja dann doch geht. Zugegeben, ich hätte auch gesagt, sein Vorhaben ist mit dem Nano nicht zu machen. Damit hätte ich mich aber geirrt. Es geht! Ich versuche ihn jetzt davon zu überzeugen, sein Vorgehen in einem oder mehreren Videos zu präsentieren, denn seine Erfahrung ist in meinen Augen Gold wert. Leider gehört er zur schüchternen Sorte und hat grosse Bedenken, denn wie er im Gespräch immer wieder betont hat "Wahrscheinlich kann das ein anderer besser und kritisiert ihn". Ja, er ist nicht gerade Kritikfähig. Allerdings kann ich in diesem Beispiel nur sagen, so etwas muss erst einmal jemand hinkriegen. Er hat da Wege eingeschlagen, auf die wäre ich im Leben nicht gekommen. Oder anders gesagt, auch wenn ich mich schon viele Jahre teils sehr intensiv mit den Mikrocontrollern beschäftige, gegen den sehe ich aus wie ein Schuljunge und sein Projekt hätte ich wahrscheinlich niemals auf einem Nano realisieren können. Er sieht seinen Code aber eher als Dirty und nicht vorzeigbar an. Er erinnert mich da an das typische Klischee von Frauen. Sehen top aus, kriegen immer Komplimente, finden sich aber hässlich. Genauso kann man seine Art mit seinem Code betrachten.

    Eigentlich macht er genau das, wofür mein Hirnfrei steht. Sein Hirn ist frei und lässt sich von Aussagen wie "Das geht nicht", "So etwas ist unmöglich" usw. nicht aufhalten.

    Mir zeigt das aber eines ziemlich deutlich. Wenn man wirklich lernen will, so effizient wie Möglich zu programmieren und Tricks zu finden, wie man etwas unmögliches dann doch realisieren kann, dann sollte man sich mit Mikrocontroller beschäftigen, gross denken und sich nicht aufhalten lassen. Natürlich nützt das aber nur dann etwas, wenn man auch auf dem PC mit C++ arbeitet. Mich motiviert das aber tatsächlich sehr. Ich habe schon einen Nano raus gekramt und aufs Brechbrett gesteckt. Mal schauen, was ich dem Kleinen alles antun kann. Ich hab auch schon eine Idee. Eine Datenbank. Ich will doch mal schauen, wie viel Daten ich mit dem kleinen Ding verwalten kann. Dazu nehme ich einfach das, was mein Stromzählerausleser so her gibt. Da liegen mir jetzt schon 2 Jahre fast durchgehend ausgelesene Daten vor. PHP kann das schon nicht mehr ohne erhöhen des Speichers verarbeiten. Da gibt es also sehr viel, wo ich optimieren und tricksen muss. Bin mal gespannt, wie weit ich das bringe.

  • Dieses Thema enthält 2 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!