Calliope, verschiedene Echtzeituhren und MicroBlocks

Ich freue mich sehr, euch eine universelle Ansteuerung für verschiedene Echtzeituhren mit MicroBlocks zeigen zu können. Bei vielen Experimenten und Langzeitmessungen mit dem Calliope mini sollen Datum und Uhrzeit als Größen verfügbar sein und zusammen mit anderen Messwerten auf einem Display angezeigt oder aufgezeichnet werden. Die Uhrzeit kann als Parameter einen Wecker auslösen oder eine Messung starten. Eine Echtzeituhr (Real Time Clock) ist ein digitales Modul, bei dem die Zeit einmal eingestellt wird und anschließend batteriegepuffert weiterläuft. Mit einer Echtzeituhr ist die physikalische Zeit deswegen auch nach einem Neustart des Systems verfügbar.

In zwei Beiträgen Calliope, RTC DS1307 und MicroBlocks und Calliope, RTC PCF85063 und MicroBlocks hatte ich euch bereits zwei unterschiedliche Echtzeituhren vorgestellt und dafür auch zwei unterschiedliche Ansteuerungen programmiert. Gerade für Einsteiger und Nicht-Profis ist es aber schwierig, bei den vielen ganz unterschiedlichen Modulen und verschiedenen Herstellern den Überblick zu behalten. Ich habe deswegen eine universelle Ansteuerung entwickelt, die mit mehreren dieser Chips zurechtkommt.

Viele der Echtzeituhren werden über den i2c-Anschluss mit dem Microcontroller verbunden, und genau solche sind mit dem Calliope mini über den linken Grove-Anschluss A0 einfach zu verwenden. Die neue Ansteuerung funktioniert für die gängigen RTC-Chips DS1307, DS3231, PCF8523, PCF8563, PCF85063, RV1805 … und weitere könnten folgen. Die Ansteuerung erkennt selbstständig, welchen RTC-Chip ein Echtzeitmodul verwendet, und stellt die notwendigen Parameter in der Software automatisch ein.

Für den Informatik-Unterricht ist es übrigens eine besonders herausfordernde Aufgabe, verschiedene Echtzeituhren selber zu programmieren, die Unterschiede zwischen den Chips herauszufinden und programmtechnisch umzusetzen. Die entsprechenden Programmblöcke zum Schreiben und Lesen von i2c-Bausteinen sind in MicroBlocks verfügbar und sollen interaktiv für Experimente eingesetzt werden. Mit MicroBlocks können alle Baustein-Register direkt beschrieben und ausgelesen werden. Ein Compilieren und Übertragen eines Programms wie mit MakeCode, Python oder Arduino IDE ist bei MicoBlocks nicht notwendig. Befehlsblöcke werden direkt auf dem Microcontroller ausprobiert und zeigen unmittelbar dessen Reaktion oder die eines Zusatzchips.

Ganz im Sinne von Open Source kann bei MicroBlocks übrigens der Source-Code vieler Bibliotheken angezeigt und verändert werden. So ist auch die Bibliothek für die Echtzeituhren völlig offen. Alle inneren Programmstrukturen der Blöcke können analysiert, diskutiert, kritisiert und verbessert werden. Probiert es aus und schreibt von euren Erfahrungen.

1 „Gefällt mir“

Viel Erfolg wünsche ich euch oder euren Schüler/innen übrigens bei der direkten Programmierung der Register, beispielhaft hier mit dem RTC-Chip DS1307. Zuerst sieht der Programmablauf so aus, als ob das Programm erfolgreich die Register 0, 1 und 2 schreiben und lesen kann. Aber dann springt die Sekunde plötzlich direkt von 9 auf 16 um. Der Programmierer traut seinen Augen nicht … ein Fehler? Warum passiert das?

1 „Gefällt mir“

Ich bin mir nicht sicher, ob da was in microblocks nicht stimmt. Bei der Programmierung des Pakets für den Callibot tritt immer noch das Problem auf, dass er beim Beschreiben einer der RGB LEDs die linke vordere RGB-LED löscht.

Das Problem tritt in Makecode nicht auf. Man müsste mal mit nem Oszilloskop nachmessen was da nicht stimmt. Beschreibe mal nicht alle Register und teste dann. Oder teste mal mit einem anderen microcontroller!

Viel Erfolg!

Michael

Hi Michael,

nein, es ist kein Fehler von MicroBlocks! Und das Phänomen tritt mit jeden Microcontroller auf. Es ist eine Zahlenfolge aus dem Uhrenchip. Mir selber ist die Ursache für den Sekundensprung von 9 auf 16 klar, denn ich habe jetzt lange Zeit mit verschiedenen Uhrenchips experimentiert. Aber vielleicht mag ja jemand anderes auch knobeln.

Wenn man das Programm weiter beobachtet, gibt es kurze Zeit später einen Sekundensprung von 25 auf 32. Ich habe mir erlaubt, ein kleines Programm zu schreiben, dass die Registerinhalte solange sammelt, bis wieder die Null kommt und sich alles wiederholt. Ich denke, es ist eine wunderbar herausfordernde Aufgabe für den experimentellen Informatikunterricht.

Mir machen solche Überraschungen sehr viel Spaß!

Beste Grüße
Ralf

PS: Ein Blick ins Datenblatt zum Uhrenchip DS1307 verrät die Lösung!