pxt-calliope-PCF85063-RTC Uhr-Modul

Hallo Lutz,

mein Vorschlag wäre, das Programm zunächst weiter zu entflechten und die eigentliche Ursache für die Fehlfunktion zu ermitteln. Lass uns zunächst einmal versuchen, die Datei auf dem gatorLog Baustein zu schreiben.

Entferne bitte mal die RTC Erweiterung und packe den Code von „wenn Pin P3 gepulst hoch“ in eine „dauerhaft“ - Schleife mit einer Pause von ca. 10 Sekunden am Ende (diese Zeit nur zum Testen damit Du nicht eine Stunde warten musst). Die Prüfung der letzten beiden Stellen in sReadTime muss natürlich raus. Damit sollte dann ca. alle 10 Sekunden eine Zeile in die Datei auf die SD Karte geschrieben werden. Den Namen der Datei müsstest Du natürlich für diesen Test selbst festlegen und nicht aus Datum und Uhrzeit ermitteln.

Ich habe wie gesagt den gatorLog nicht und kann nur mit Ideen zum Weiterkommen helfen.

Gruß Raik

Hallo Raik,

ich habe über 20 Programmversionen getestet und komme zu keinem nachvollziehbaren Ergebnis.

Ein Programm habe ich klein angefangen und dann immer mehr Blöcke hinzu gefügt. Auch mit den 2 Erweiterungen gator:log und RTC-Uhr stürzt es nicht ab.

Dann habe ich das andere Programm das abstürzt immer mehr reduziert:

0;21.08.2022;15:46:48;0 ppm;0 °C;beim Start
1;21.08.2022;15:47:00;0 ppm;0 °C;11
2;21.08.2022;15:48:00;0 ppm;0 °C;11
3;21.08.2022;15:49:00;0 ppm;0 °C;11
4;21.08.2022;15:50:00;0 ppm;0 °C;11
5;21.08.2022;15:51:00;0 ppm;0 °C;11
6;21.08.2022;15:52:00;0 ppm;0 °C;11
7;21.08.2022;15:53:00;0 ppm;0 °C;11
8;21.08.2022;00:00:00;0 ppm;0 °C;11
9;21.08.2022;00:00:00;0 ppm;0 °C;11
10;21.08.2022;00:00:00;0 ppm;0 °C;11
11;21.08.2022;00:00:00;0 ppm;0 °C;11
12;21.08.2022;00:00:00;0 ppm;0 °C;11

Das ist eine typische Ausgabe. Irgendwann liest es aus dem Uhr Modul die Zeit 00:00:00, so als wäre das Modul nicht vorhanden. Nach Reset geht die Uhr aber wieder richtig. Wahlweise kommt es auch vor, dass auch nichts mehr in die Datei geschrieben wird, aber manchmal geht’s.

Ich kann das Problem keiner Erweiterung zuordnen. Es sieht aus wie ein Fehler im „Kernel“ von Calliope. Beim Multithreading wird möglicherweise Speicher von einer Erweiterung überschrieben, ein Puffer läuft über oder so was.

Das ist das Programm, was nicht abstürzt. Was ist denn daran „signifikant“ anders?

Gibt es eigentlich ein Update für das Calliope Betriebssystem? Es ist eigentlich selten, dass nach ein paar Jahren keine Fehler gefunden und beseitigt werden?

Viele Grüße
Lutz

Hallo Lutz,

das Programm mit den zwei Erweiterungen, was nicht abstürzt, ist sicher eine bessere Ausgangsbasis für Dein eigentliches Ziel. Poste den Quellcode - Link mal bitte, ich kann dann selbst auch vergleichen.

Zum RTC: Den 0 Uhr Reset habe ich selbst beobachtet. Aus meiner Sicht kommt das vor, wenn innnerhalb des Lesezyklus, beginnend mit Schreiben des Start-Codes über I2C auf die Adresse des RTC, nochmal ein Lesen initiiert wird, ohne dass das Lesen beendet ist - mit Abholen aller Bytes. Meine Erweiterung sollte das verhindern, Du benutzt ja noch die von Marcel.

Ich muss mich wirklich mal daran machen, meine Erweiterung mit den CLK und INT - Funktionen von Marcel zu erweitern, brauche dazu noch ein wenig Zeit.

Gruß Raik

Hallo,

die Erweiterung

enthält jetzt die Funktion zum Setzen der Frequenz des Clock - Pins.

Die Funktion zum Setzen des Interrupt - Intervalls habe ich noch nicht eingebaut.

Gruß Raik

2 „Gefällt mir“

Hallo Raik,

ich danke Dir für Dein Interesse und Deine Mitarbeit. Jetzt habe ich das Qwiic OpenLog Modul und neu angefangen:

Nachdem ich erst mal probieren musste welche Blöcke mindestens erforderlich sind, damit es in eine Datei schreibt, schreibt es jetzt jede Sekunde die Uhrzeit in die Datei. Zwei Module am I2C.

Gibt es Beispiele, welche Blöcke zum Schreiben (und Lesen) mindestens gebraucht werden und was zu beachten ist, wenn die Datei (nicht) existiert?
Gibt es Einschränkungen beim Dateiname (Länge, Sonderzeichen)?
Kann man den Pfad beim Dateiname mit davor schreiben?

Ich werde das Programm jetzt weiter ausbauen und vielleicht noch den CO2 Sensor als drittes Modul an den I2C Bus hängen.

Viele Grüße
Lutz

Hallo Lutz,

das hört sich doch schonmal vielversprechend an. Jetzt noch das Zeitintervall vergrößert und den Wert vom Sensor gelesen und dann sollte es funktionieren wie es soll, oder?

Die Erweiterung habe ich so gebaut, dass alle Funktionen, die auf dieser Seite beschrieben sind, für den Calliope implementiert sind:

https://learn.sparkfun.com/tutorials/qwiic-openlog-hookup-guide

Die Hinweise und Beispiele auf dieser Seite enthalten eine ganze Menge Informationen. Kurz zu Deinen Fragen:

Prinzipiell funktioniert alles wie die Dateifunktionen in MS-DOS. Ich habe zu dieser Zeit angefangen mit dem Programmieren, sorry wenn ich Kenntnisse über die diese Datei - Funktionen als gegeben voraussetze… :wink:

Also: Datei öffnen, schreiben, lesen, schliessen und die Arbeit mit Verzeichnissen. Alle Dateinamen immer im 8+3 - Schema.

Man kann eine Datei erstellen mit „Erstelle Datei“, dann ist sie aber noch nicht zum Schreiben geöffnet. Der Block „Öffne Datei zum Schreiben“ öffnet diese und dann kann es losgehen mit Schreiben der Zeilen. Hat man sie noch nicht angelegt, wird sie automatisch erstellt. Ein explizites Schliessen der Datei ist nicht notwendig, jeder Schreibbefehl schreibt den Puffer direkt in die Datei durch. Einschränkungen beim Dateinamen gibt es natürlich - wie oben erwähnt 8+3 - und bitte beachte die Hinweise auf der oben angeführten Seite. Den Pafd kann man nicht vor den Dateinamen schreiben - auch hier DOS - like bitte mit „Erstelle Verzeichnis“ und „Wechsle Verzeichnis“ erst in das Verzeichnis gehen und dann die Datei erstellen und beschreiben. Der Wechsel zurück in das Wurzelverzeichnis geschieht übrigens mit „…“ anstatt einem Verzeichnisnamen und die maximale Verzeichnistiefe ist laut Dokumentation 2. Im Wurzelverzeichnis haben wohl 65534 Dateien Platz.

Ich hoffe das beantwortet fürs Erste Deine Fragen und hilft Dir weiter.

Gruß Raik

Hallo Raik,

ja ich kenne MS-DOS. Ich wundere mich nur, dass es mit langen Dateinamen trotzdem funktioniert. So auch beim FLASH im Calliope. Wahrscheinlich werden dabei die automatisch generierten 8.3 Dateinamen verwendet, die mit dir /X angezeigt werden…

Jetzt war das Testgerät ca. 4 Stunden aus und die Uhr ist stehen geblieben, weil wohl die Knopfzelle leer wird. Jetzt zeigt es die Zeit von 16:34:80 bis 16:34:139 an. Das Datum stimmt noch. Also die Sekunden zählen jede Minute von 80 bis 139 beim lesen der Zeit mit „LeseUhrzeit“.

Wenn die Sekunde nie 00 wird, schreibt es auch nicht ins Logfile.

Ich werde mal die Batterie wechseln und die Uhr stellen…

Lutz