Erste Versuche auf dem Steckbrett
Tatsächlich habe ich noch keinen ESP8266-01 verbaut, sondern eine wesentlich einfacher zu handhabende NodeMCU. Erstens kann man diese bequem auf einem Steckbrett verwenden (für den ESP8266-01 sind die beiden Pinreihen zu nah beieinander), zum anderen auch viel einfacher programmieren: USB Kabel dran und fertig. Aber prinzipiell sollte das keinen Unterschied machen.
Von der Software der Cistercian Clock ist auch nicht sehr viel übrig geblieben, allenfalls der Web-Server zum Einstellen der Parameter. Das NTP-Server Gedöns habe ich rausgeschmissen, da es bereits in den Kern-Bibliotheken enthalten ist. Auch das ganze Geraffel zum Thema Sommerzeit/Winterzeit konnte ich getrost dem Kern überlassen. So blieb dann hinterher genug Luft, um die Formeln für die Berechnung des Mittags, der Tageslänge und der Dämmerungen zu hinterlegen. So weiß die Schaltuhr nun genau, wann eine Dämmerung beginnt, und wann sie aufhört.
An die NodeMCU habe ich einen Dallas DS1820 nebst Pull-Up Widerstand zur Temperaturmessung angeschlossen. Die Beispielprogramme im Netz hatten leider immer einen katastrophalen Systemcrash zur Folge. Als ich nicht mehr auf das Ende der Messung wartete, blieb der Absturz aus. Vermutlich schert sich die Bibliothek nicht um die Beruhigung des Watchdogs, der pflichtgemäß einen Reset auslöste, weil man ihn zu lange nicht beachtet hatte. Jetzt verwende ich eine Interrupt-Routine mit einem Timer, an dessen Ende ich die Messung starte, um sie zu Beginn des nächsten Interrupts auszulesen. Das wars dann.
Ferner habe ich ein zweizeiliges LCD an die NodeMCU angeschlossen, welches zu Beginn die erhaltene IP Adresse anzeigt, und anschließend das Datum, die Uhrzeit und die Temperatur. Wenn die NodeMCU jetzt noch ein paar freie Pins für die vier Schaltausgänge hätte, wäre ich an dieser Stelle schon beinahe fertig. Aber nöööö....
Der ATTiny2313 war fix programmiert, ich ließ ihn auch aus Bequemlichkeit einfach auf seinem internen 1 MHz RC-Oszillator laufen. Damit war die Wahl der Baudrate natürlich nicht mehr ganz so einfach, aber 4800Bd sollten genau genug machbar sein (1,7 Promille Abweichung). Ich habe die Source in der NodeMCU also auf 4800Bd eingestellt und den ATTiny2313 so programmiert, dass eintreffende Zeichen einen Interrupt auslösen. Dort gebe ich das Zeichen dann einfach aufs Display aus. Bei 4800Bd können 480 Zeichen/s übertragen werden: Für das Display allemal ausreichend.
Während ich die NodeMCU mit der Arduino IDE programmiert habe, verwendete ich für den ATTiny einfach ein älteres Skelett für den avr-gcc mit einem guten, alten Makefile. So schön die IDE auch sein mag, aber vom Speichern der Source bis zum Ende des Hochladens in nicht einmal einer Sekunde ist auch eine feine Sache.
So aus reiner Neugierde wollte ich mal wissen, womit die Arduino IDE eigentlich beim Compilieren so ihre Zeit verbringt, da ich eine halbe Minute für etwa 8 C++ Files doch ein wenig übertrieben hielt. Als ich in den Einstellungen die Compiler-Ausgaben einschaltete konnte ich sehen, dass jedes Mal, wenn ich eine Änderung in der Source mache, die IDE alles neu übersetzt, und mit alles meine ich, wirklich alles: Die ganzen Bibliotheken werden ebenfalls alle neu übersetzt. Okay, dafür ist es dann wieder schnell.
Jetzt braucht es noch ein Protokoll, damit nicht alles, was über die serielle Schnittstelle geht (die ja auch als Debug-Leitung zur IDE verwendet wird), auch auf dem Display erscheint. Außerdem noch ein paar vordefinierte Befehle, um die vier Ausgänge (an denen momentan vier LEDs hängen) ein- oder auszuschalten. Fortsetzung folgt.
Keine Kommentare:
Kommentar veröffentlichen