Im September war es dann soweit: Dirk, Jens und Thomas fanden sich ein, damit wir gemeinsam 4 Tage und Nächte lang Pizza essen, Cola trinken und basteln konnten.
Unser Ziel war es, dass am Ende jeder der vier Bastler einen fertigen Wortwecker mit nach Hause nimmt - also eine Uhr, welche die aktuelle Zeit in Form von Sätzen anzeigt. Dabei werden die Buchstaben durch einzelne LEDs mit entsprechendem Passepartout dargestellt.
Geplanter Funktionsumfang des Wortweckers:
- Anzeige der Uhrzeit
- Automatische Zeitstellung per Funkuhr
- Helligkeit der Leuchtdioden je nach Umgebungshelligkeit
- Weck-Zeit einstellbar
- Weck-Melodie definierbar
Als „Gehirn“ der Uhr wählten wir einen Arduino Uno .
Arduino Uno mit Funkuhr-Modul
Insgesamt sind pro Wecker 112 LEDs verbaut, welche alle einzeln angesteuert werden möchten. Da der Arduino natürlich nicht über so viele Ports verfügt, muss noch eine entsprechende Schaltung zwischen Arduino und LEDs eingesetzt werden. Kern dieser Schaltung sind bei unserem Projekt 14 Stück TPIC6C595 Schieberegister pro Uhr.
Ohne Plan läuft nichts...
Da wir nicht nur ein reines Löt- und Bestückungs-Projekt durchführen wollten, entschieden wir uns für die Verwendung von Lochrasterplatinen statt geätzte Platinen zu designen. Eine Wahl, welche wir bei einem „nächsten Mal“ sicher überdenken würden ;-)
Tag 1
Los ging es am ersten Tag mit der Programmierung des Arduino, wobei dieser Tag eigentlich nur ein halber war, da wir erst am späten Nachmittag begannen und zu diesem Zeitpunkt auch erst zu dritt waren.
Während Dirk und Thomas die LED-auf-Worte-Übersetzung und die Beschickung des Schieberegisters vorbereiteten, konnte ich mich mit dem Auslesen des Funkuhr-Modules befassen.
Dirk und Thomas programmieren die Schieberegister
Was mich zugegebener Maßen an den Rand des Wahnsinns getrieben hat. Der verwendete Funkuhr-Empfänger ließ sich nicht korrekt auslesen und verweigerte jede sinnvolle Zusammenarbeit. Einer Stunde und viele Test-Programme später probierte ich ein zweites Exemplar aus, und – aha – dieses funktionierte dann augenscheinlich. Also war wohl der erste Empfänger kaputt. Am nächsten Tag funktionierte dann aber auch dieser zweite Empfänger nicht mehr bzw. nur noch sehr sporadisch.
Am Ende stellte sich per Zufall heraus, dass das Notebook den Empfang der Uhr störte: Der Abstand der Uhr zum Notebook bestimmte, ob diese ein (funktionierendes) Zeit Signal empfangen konnte oder halt nicht.
Impressionen vom Schieberegister-Test-Arbeitsplatz
Tag 2
Der zweite Tag startete mit den Arbeiten an der ersten Platine. Die Aufgaben waren die Verteilung der Bausteine und die optimale Verdrahtung der Lochrasterpunkte als Ersatz für Leiterbahnen. Im Nachhinein betrachtet liegt die Anzahl an Drähten und Bauteilen pro Platine wahrscheinlich knapp an der Grenze (oder auch darüber), was man noch per Lochraster machen kann oder sollte.
... verlötet, und gemessen
Nachdem Jens und Thomas die erste Platine fertig bestückt und verlötet hatten, ging es an das Hardware-Debugging. Prima war dabei, dass Jens sein Oszilloskop mitgebracht hatte, denn die Schaltung verhielt sich überhaupt nicht so wie erwartet.
Auch hier zeigte sich nach langem Suchen, dass wir – wie schon bei der Funkuhr – einem Phantom nachgejagt waren.
Gut dass Jens sein Oszilloskop dabei hatte
Arduino und die Arrays
Offenbar initialisiert ein Arduino Programm ein Byte-Array auf dem Heap mit Nullen, während es auf dem Stack den Speicher bereit stellt wird, jedoch der vorherige Inhalt der betroffenen Speicherzellen unverändert bleibt. Das frühe Testprogramm mit ausschließlich statischem Array funktionierte daher wunderbar. Für den Test der fertigen Platine hingegen waren die identischen Code-Zeilen bereits in Methoden ausgelagert worden und verhielten sich daher anders. Aber wer soll so etwas erahnen? Da liegt es näher, nach Fehlern auf der umfangreich verdrahteten und verlöteten Platine zu suchen... und das dauert dann durchaus mal mehrere Stunden.