pxt-calliope-PCF85063-RTC Uhr-Modul

Bei den Erweiterungen im MakeCode befindet sich als letztes das RTC-Modul:

Ich habe dieses gekauft:

angeschlossen an A0 I2C und mit den Blöcken programmiert. Allerdings reagiert es nicht. Es wird die Zeit 00:00:00 angezeigt, das passiert aber auch wenn kein Modul angesteckt ist. Auch mit zwei verschiedenen neuen Knopfzellen geht nichts.

Ich finde kein Demo-Programm. Muss das Modul initialisiert werden, und wenn ja wie?

Oder gibt es noch ein anderes Modul und ich habe das falsche? Wo bekomme ich das richtige?

FG Lutz

Hallo Lutz,

leider laufen Uhrmodule mit dem DS1307 nicht auf dem Calliope mini da auf dem Calliope mini schon die I2C-Adresse des DS1307 belegt ist. Zur Zeit scheint das passende Modul nur bei Mouser oder Digikey lieferbar zu sein. Bis 50€ Bestellwert muss man allerdings 20€ Versandkosten bezahlen. Ab 50€ ist der Versand kostenlos.

Viele Grüße

Michael

Ich habe das Uhr-Modul von Mouser importiert und es funktioniert am Calliope. Wird das Modul am Calliope stecken gelassen wenn er aus ist, ist die Knopfzelle ganz schnell leer. Und lässt man es ohne Kabel liegen, geht die Uhr 1 bis 2 Sekunden am Tag falsch.

Für die weitere Entwicklung der Erweiterung (Blöcke) wünsche ich mir, dass auch ‚weekday‘ ausgelesen werden kann. Beim Stellen der Uhr muss man eine Zahl 0-6 eintragen, die man aber nicht zurück bekommt.

Viele Grüße
Lutz

Hallo Lutz,

falls Dein Seeed Studio Modul den PCF85063TP Chip hat, sollte diese Erweiterung funktionieren und die liefert jetzt auch den Wochentag als Text zurück:

Falls Du noch andere Funktionalitäten brauchst, implementiere ich die gerne.

Wichtiger Hinweis: Den PCF85063A - Chip unterstützt die Erweiterung nicht, die Codierung der Zeitanteile ist da etwas anders.

„High Precision“ ist der Baustein allerdings nicht, ist ja auch keine Atomuhr. Ich hatte die Uhr mal vor ca. 2 Jahren gestellt und die liefert mir aktuell 20 min Differenz zur aktuellen Zeit. Ich wollte den RTC Baustein ursprünglich für einen Datenlogger benutzen, es hatte sich aber aufgrund eines sowieso angeschlossenen GPS - Empfängers eine ganz andere Variante ergeben, die an Genauigkeit kaum zu übertreffen ist - dieser liefert natürlich die GMT Zeit mit.

Für einfache Experimente am Mini sollte der Baustein aber sicher reichen.

Ansonsten fallen mir für eine genaue Uhrzeit nur der Langwellen-Sender oder das Internet ein,
das habe ich aber noch nicht erforscht am Mini…

Gruß Raik

Hallo Raik,

vielen Dank für die Erweiterung. Der Wochentag wird bei mir jetzt angezeigt.

Gegenüber der Erweiterung, die bei makecode angeboten wird, fehlt mir „set clock output“. Diese hatte ich auf 1Hz gesetzt und die Lötstelle CLK mit einem Pin am Calliope verbunden. Dann habe ich jede Sekunde ein Ereignis, um die Zeitanzeige zu aktualisieren.

Oder kann man einen Ereignis-Block implementieren, der bei jeder Änderung der Sekunde aufgerufen wird?

Außerdem wundere ich mich, warum die „Teile“ als Text und nicht als Zahl ausgegeben werden. Es sind doch alles Zahlen, die ich aber erst von Text in Zahl umwandeln muss, um sie z.B. auf dem Uhr-Modul anzuzeigen.
Der Wochentag kann so ausgegeben werden, wie er beim Stellen der Uhr eingegeben wurde.

Viele Grüße
Lutz

Hallo Lutz,

gute Idee das mit dem Ereignis Block. Ich schaue mir bei Gelegenheit das andere Paket mal an.

Das mit dem return Type string hat zwei Gründe:

Zum einen wurde der Code entwickelt, als number gerade floating point werden durfte, vorher gab es nur Ganzzahlen und auch die passenden Operatoren. Deshalb auch der seltsam anmutende Code in DECtoBCD und BCDtoDEC. Der läuft nämlich auch in makecode v1.
String als return type ist da ganz einfach auch robuster und für die Darstellung sind die Vornullen auch gleich mit dabei.

Der zweite Grund ist, dass die gleiche Funktion auch den Namen des Wochentages liefern kann.

Mir ist schon klar, dass man string erst wieder wandeln muss wenn man rechnen will und die Vornullen gehören für diesen Anwendungsfall auch nicht rein. Ich werde ganz einfach eine zweite export Funktion anbieten.

Gruß Raik

Hallo Lutz,

ich habe gerade gesehen dass der Code des dl1ekm Paketes auf meinem Paket basiert und ich denke es wäre am besten wir entwickeln dort weiter. Das Paket funktioniert ja wohl auch mit dem PCF85063A - Chip und das mit dem Hardware Interrupt gefällt mir auch - wusste ich gar nicht dass das geht. Ich werde mal einen Request in git starten.

Gruß Raik

Hallo Raik,

über eine Weiterentwicklung der Erweiterung freuen wir uns natürlich. Die Version von dl1ekm
mussten wir in den letzten Updates der Beta leider entfernen, da keine MIT Lizenz hinterlegt ist (Add license · Issue #1 · dl1ekm/pxt-calliope-PCF85063-RTC · GitHub), Microsoft ist hier etwas strenger geworden als bisher.

Bei dir scheint die Lizenz ja hinterlegt zu sein, wir können daher ggf. auch gerne dein Repository verlinken.

1 „Gefällt mir“

Hallo Raik,

auf den Export als String müssen wir ja nicht verzichten. Ein zweite Export Funktion als Zahl wäre gut.

Der Hardware Interrupt ist auf dem Bild zu sehen. Ein Software-Ereignis-Block wäre allerdings besser, dann muss ich keinen extra Draht anlöten. Ich benutze Calliope in der Schule.

Lutz

Hallo Lutz,

schau Dir das aktualisierte Paket mal bitte an. Ich habe eine zusätzliche Funktion eingebaut, die die Anteile der Zeit als numerische Werte liefert. Der Event-Handler meldet sich immer zur vollen Minute. Ich habe beim Entwickeln festgestellt, dass die Sequenz zum Lesen der Zeit auf keinen Fall zweimal angesteuert werden darf, da gerät der Baustein durcheinander und man muss die Zeit neu stellen. Ich hoffe das abgefangen zu haben. Ansonsten habe ich versucht, die Rechenlast für den Mini zu klein wie möglich zu halten, aber doch die Umschaltsekunde auf die volle Minute zu erwischen. Es geht eben doch nichts über Hardware - Interrupt :wink:
Schau mal ob die Implementierung für Deinen Anwendungsfall hilft, ansonsten bauen wir gerne das Paket weiter aus.

Gruß Raik

2 „Gefällt mir“

Hallo Raik,
macht was es soll. Wenn ich in dem Minuten Ereignis die Zeit anzeige, ist die Sekunde immer 0. Ich dachte, man könnte die Rechenlast mit so einem Ereignis verringern. Wenn aber doch Polling nötig ist, wäre das auch mit Blöcken möglich und man könnte das Intervall dem Zweck anpassen. Für eine Uhr mit Sekundenanzeige reicht das Ereignis nicht.

Gegenüber der Original-Erweiterung fehlen die Blöcke Set clock output, Set interrupt, Set RTC type.

Mit Set clock output 1 Hz habe ich an der Lötstelle CLK den Hardware Interrupt abgegriffen und einfach mit einem Pin am Calliope verbunden. Siehe Bild.

Der andere Block Set interrupt geht nur auf 60 sec, 30 sec und off zu setzen. Habe ich nicht probiert.

Hast du diese Parameter vor-eingestellt? Bei mir blinkt eine LED an CLK und Minus munter 60 Mal bis das nächste Ereignis kommt. Wahrscheinlich hat sich das Modul, dass 1 Hz eingestellt ist, gemerkt, weil ich es mit der anderen Erweiterung zuvor so eingestellt hatte.
Wenn bei CLK immer 1 Hz raus käme, wäre das schon sinnvoll.

WEEKDAY funktioniert, wobei DAY die Zahl vom WEEKDAY ist und nicht vom Datum.

@asp.net
Ich habe in die Makecode-Erweiterungssuche den Suchbegriff „start“ eingegeben. Dadurch habe ich ein Erweiterungspaket für einen DS1307 gefunden. Vielleicht passt das auch zu dem Uhr-Modul (ich habe so eines gerade nicht zur Hand.)

LG FLANGE

Hallo Raik,

nachdem ich jetzt viele Tage versucht habe Daten vom CO2 Sensor mit Uhrzeit auf eine Speicherkarte zu schreiben, funktioniert das immer nur kurzzeitig und dann bleibt das Programm hängen. Die Hardware zusammen zu bauen ist kein Problem. Das Problem sehe ich bei der Software der Erweiterungen.

  1. Die von dir hier bereit gestellte Erweiterung für das RTC-Uhr Modul löscht ab und zu die Zeit und dann muss die Uhr neu gestellt werden. Das passiert auch wenn das Minuten-Ereignis nicht benutzt wird.

Die Erweiterung, die bei makecode unten als letzte abgebildet ist, hat es noch nicht geschafft die Zeit im Modul zu löschen. Allerdings in Zusammenhang mit sparkfun gator:log und der Erweiterung von der makecode Seite, kommt die Software vom RTC-Uhr Modul in einen Zustand wo sie 00.00.2000 00:00:00 zurück gibt, was aber nicht die Zeit im Modul ist. Nach Reset stimmt die Zeit wieder.

  1. Ich dachte, das RTC-Uhr Modul würde spinnen, weil es am I2C Bus hinter dem CO2 Modul angesteckt war. Der Fehler passiert aber auch ganz ohne das CO2 Modul mit der Uhr allein am Bus.

  2. sparkfun gator:log soll Daten auf die Speicherkarte schreiben und macht das auch mehrere Minuten lang. Interessant ist, dass der Fehler (nach ein paar Minuten hängenbleiben und ungültige Zeit liefern) nur passiert, wenn eine Speicherkarte rein gesteckt ist. Fehlt die Speicherkarte zeigt das Programm stundenlang die richtige Zeit an.

Es sieht nun so aus, dass der Code zum schreiben auf Speicherkarte nicht zurück kehrt und so das Ereignis nicht beendet wird und nicht wieder neu gestartet werden kann. Dann ist aber rätselhaft, wieso in der Uhr Anzeige nicht die letzte Zeit stehen bleibt, und stattdessen vom RTC-Uhr Programm 00:00:00 geliefert wird, obwohl das Modul normal weiter läuft. (Auch zu sehen an einer LED an CLK, die blinkt munter weiter im Sekundentakt.)

  1. Zur Anzeige der Zeit nutze ich das 4-Digit-Modul, ebenfalls mit der Erweiterung von der makecode Seite, die 25 LED und Funk habe ich probiert. Überall steht (nach dem Hängenbleiben) 00:00:00 drin.

Es sind also 3 Module angeschlossen:
sparfun gator:log an Pin 0,1,2
RTC an I2C (A0) und CLK an Pin 3
4-Digit-Display an Grove (A1)
Das CO2 Modul habe ich für den Test entfernt.

Ich habe es mit Calliope 1.3 und 2.0 probiert. Beide haben das gleiche Problem.

Workarounds wie im Code neu initialisieren oder zurücksetzen aufrufen haben keine Entspannung gebracht.

Vielleicht hilft ein anderes Modul zum speichern auf die SD Karte. Unter den makecode Erweiterungen sehe ich keine Alternative. Hier wurde zwar über einen Datenlogger diskutiert, aber ziemlich unübersichtlich und bevor ich Module aus dem Ausland importiere würde ich gern wissen welche Stecker passen, wo es angeschlossen wird. Und über den Anschluss mehrerer Module an I2C am Calliope habe ich auch noch nie etwas gelesen.

Als Spielzeug oder in einer Unterrichtsstunde mag es genügen, um das Prinzip zu zeigen. Über Nacht Daten aufzeichnen ist mir nach mehr als einer Woche Beschäftigung mit dem Thema nicht gelungen.

Viele Grüße
Lutz

Hallo Lutz,

danke erstmal für deine umfangreichen Tests.
Ich bin derzeit unterwegs und habe natürlich auch keinen Calliope dabei…
In der Woche ab 15.08. kann ich mich wieder mit dem Modul beschäftigen und bitte um etwas Geduld bis dahin.

Gruß Raik

Hallo Lutz,

kannst Du bitte einen Link auf Dein Programm bereitstellen?

Das macht die gemeinsame Fehlersuche sicher einfacher, insbesondere bei den Erweiterungen, die ich nicht kenne.

Einfach mit dem geladenen Programm in der Makecode - Titelleiste auf „Teilen“ drücken und dann in der erscheinenden Dialogbox den Knopf „Publish Project“ drücken.

Den dargestellten Link dann einfach kopieren und hier posten.

Danke.

Gruß Raik

Hallo Raik,

schön, dass du dich damit beschäftigen möchtest.

Ich habe es auf 2 Erweiterungen reduziert, die beide mit Bild bei den MakeCode Erweiterungen angezeigt werden. RTC-Uhr und gator:log mit Speicherkarte.

In der dauerhaft-Schleife habe ich eine Überwachung, die nach 90 Sekunden ohne Zeit-Änderung ein Software zurücksetzen aufruft. Danach geht es wider. Die Uhr geht noch richtig. Manchmal hängt es sofort wieder, normalerweise geht es aber nicht länger als 15 Minuten gut.

Stromversorgung über USB, aber am gator:log kommen nur etwa 2,7V an. Mit 4,5V Batterie (nur für gator:log an 3V3) funktioniert es auch nicht besser. Vom MP3 Modul habe ich die Erfahrung, dass Modul mit Speicherkarte an zu geringer Betriebsspannung scheitert.

Hängen bleibt es wohl beim schreiben auf Speicherkarte und nur wenn eine Speicherkarte drin steckt. Probiert mit verschiedenen Speicherkarten, auch 4GB FAT.

Ich würde mir ein anderes Speichermodul bestellen, sehe aber nicht durch welches Modul mit welcher Erweiterung funktioniert und wo es angeschlossen wird. Es muss ja auch ein Anschluss frei sein.

Außerdem könnte auf der calliope Homepage mal eine Information zum Anschluss mehrerer Module an I2C erscheinen. Ob und wie das möglich ist und wo die Grenzen sind.

Vielen Dank
Lutz Elßner

Hallo Lutz,

was mir auf den ersten Blick auffällt:

In der Funktion schreibeZeile wird jedesmal erneut versucht, die Datei mit gatorLog.openFile zu öffnen. Das ist sicher nur einmal notwendig.

Verschiebe bitte mal den öffne Datei - Block (im Java Script Code die Anweisung

gatorLog.openFile(„“ + sStartDate.substr(8, 2) + sStartDate.substr(3, 2) + sStartDate.substr(0, 2) + sReadTime.substr(0, 2) + „.txt“)
)

in den „beim Start“ Block unmittelbar nachdem Datum und Uhrzeit ermittelt wurden.

Ich kenne das Modul und die Erweiterung nicht, bitte dies nur als Test.

Hilfreich ist sicher auch der Beispielcode auf der sparkfun Seite.

Gruß Raik

Hallo Raik,

openFile war beim Start, der Effekt war der selbe. Ich habe Beispielcode gesehen, wo openFile auch immer gemacht wurde, um in verschiedene Dateien zu schreiben. Und hier soll auch jede Stunde eine neue Datei angefangen werden.

Viele Grüße
Lutz

Hallo Lutz,

ich habe Dein Programm geladen und etwas modifiziert (die Knopf A und B - Ereignisse entfernt) und ein Knopf A Ereignis erstellt, damit ich das Programm im Simulator testen kann.

Ich besitze den gatorLog Speicherkarten-Baustein nicht und muss mir ein wenig behelfen.

Im Simulator kann man jetzt mit jedem Drücken von Taste A sehen, dass das Programm eine neue Datei öffnet und eine Zeile schreibt. Das findet natürlich in dieser Testversion bei jedem Tastendruck statt, weil die Sekundeanteile in der Zeichenkette sReadTime (6,2) immer „00“ sind:

if (sReadTime.substr(6, 2) == „00“)

Mit der RTC Hardware, dem Sekunden - Clock - Takt (1Hz) und dem Auslesen der Uhr sollte dann das Öffnen einer neuen Datei und das Schreiben einer Zeile in diese alle 60 sec stattfinden.

Ist das Ziel des Programmes, einmal pro Minute eine neue Datei mit einer Zeile zu schreiben?
Oder habe ich im Programm etwas übersehen?

Ich selbst verwende den Sparkfun QWIIC OpenLog Baustein, der am I2C Anschluss betrieben wird mit dieser Erweiterung: GitHub - CalliTGS3/pxt-calliope-sparkfunQwiicOpenLog: Calliope extension for SparkFun Qwiic OpenLog.

Der I2C ist ein Zweidraht - Bussystem und erlaubt den Anschluss von 128 (minus 16 für interne Zwecke) Geräte mit verschiedenen Adressen. Ein Gerät ist der Master, also der Calliope. Es lassen sich also mehrere Geräte (Sensoren, Anzeigemodule usw.) am I2C Anschluss betreiben, solange sie voneinander verschiedene Adressen haben, hier am Calliope 3V Betriebsspannung und 3V Logiklevel.

Den Strombedarf der Geräte muss man unbedingt im Auge behalten, der Batteriebetrieb ist besonders bei stromhungrigen Geräten ein Problem - nicht nur am I2C - und führt ggf. zu unerwarteten Abstürzen, insbesondere schon nach wenigen Stunden Laufzeit.

Gruß Raik

Hallo Raik,

Ziel ist es, jede Stunde eine Datei mit 60 Zeilen zu schreiben. Aber mir würde schon reichen in eine einzige Datei zu schreiben ohne dass es sich nach ungefähr 15 Minuten aufhängt.

Ich werde den QWIIC OpenLog bestellen. Passen die Grove-Kabel da rein? Auf dem Bild sind die Buchsen schlecht zu erkennen. Aber sonst kann man wahrscheinlich auch löten.

Viele Grüße
Lutz