Hallo zusammen!
Irgendwann im Frühjahr 2021 ist mir aufgefallen, daß meine Gefriertruhe fast immer läuft, wenn ich daran vorbeikomme. Ich habe dann ein Thermometer in die Truhe gelegt und ein Engeriekostenmessgerät angeschlossen. Nach 24 Stunden konnte ich folgende Werte ablesen:
2,05 kWh Verbrauch, 85% Einschaltdauer und -28°C Temperatur.
Am Einstellregler zu drehen hat nicht viel gebracht.
Deshalb habe ich eine Steuerung zum Zwischenstecken in die Netzzuleitung der Gefriertruhe gebaut, die über ein Relais einfach die Stromzufuhr unterbricht.
Achtung!
Arbeiten an Netzspannung sind lebensgefährlich und dürfen nur von zugelassenen Elektro-Fachkräften ausgeführt werden!
Die Berechnung der Einschaltdauer war unerwartet ein größeres Problem bei der Programmierung.
Die Formel ist ja einfach: ED = Einschaltzeit / Gesamtzeit * 100%
Je länger nun die Gesamtzeit wird, desto träger reagiert das Ergebnis auf Veränderungen. Deshalb wollte ich für die Berechnung nur die Zeiten der letzten 24 Stunden "gleitend" verwenden.
Hardwaretechnisch könnte man bei jeder Messung das Zustand-Bit der Strommessung in ein Schieberegister schieben und nach der gewählten Zeit fällt es automatisch hinten wieder raus. Zum Auslesen müsste man das Schieberegister einmal im Kreis drehen und die gesetzten Bits aufsummieren.
Da ich zum Einen kein so langes (z.B 16 kBit) Schieberegister kenne und zum Anderen die Hardware schon fertig hatte, mußte eine Software Lösung her.
Jetzt könnte man nach Ablauf der gewählten Zeit beide Zeiten auf 0 setzten und von vorne beginnen. Dann würde die Einschaltdauer immer bei 100% oder 0% beginnen, je nachdem, ob der Kompressor gerade läuft oder nicht. Die Anzeige müßte sich erst wieder angleichen und ein kurzer Blick darauf im Vorbeigehen wäre nicht sehr aussagekräftig.
Als Kompromiss werden nun nach 19,1 Stunden beide Zeiten halbiert, schon deshalb, weil das einfach durch Rechtsverschieben um 1 Bit geht, ohne wirklich rechnen zu müssen. Anschließend läuft die Messung von 9,56 Stunden Startwert weg. Das wiederholt sich dann im Dauerbetrieb alle 9,56 Stunden. Da in der alten Hälfte wieder eine noch ältere Hälfte steckt usw., nähert sich das Ergebnis nur langsam an den Endwert an, ähnlich einer R-C Ladekurve. Es ist eben ein Kompromiss mit dem man aber gut leben kann.
Oder kennt jemand eine Methode mit der man tatsächlich nur die Werte der letzten 24 Stunden im Dauerbetrieb gleitend berechnen kann?
Das Gerät habe ich im August in Betrieb genommen. Da lag die Einschaltdauer bei 40%. Mit abnehmender Umgebungstemperatur ist sie dann immer weiter zurückgegangen bis auf 22% im Winter.
Für die Programmierung habe ich über 50 Stunden benötigt.
Diese doch lange Zeit für ein relativ einfaches Projekt liegt auch daran, daß ich zum Ersten mal einen PIC16F1708 Mikrocontroller verwendet habe, weil der bei r... nur 1,55 Euro kostet (Stand 2021).
Der kennt 49 Befehle statt der mir bisher bekannten 35. Auch hat er kein EEPROM, statt dessen kann man Teile des Programmspeichers neu beschreiben, was unterschiedlich ist.
Bisher habe ich für Temperaturmessungen immer DS18S20 oder DS18B20 Sensoren verwendet. Beim 1-wire Bus müssen aber Time-Slots im µs-Bereich eingehalten werden. Bei längeren Leitungen gibt es dadurch leicht Übertragungsprobleme, was man hier im Forum auch immer wieder lesen kann.
Deshalb habe ich nach einem Sensor gesucht, der sich in aller Ruhe auslesen läßt.
Als Temperatursensor wird hier ein MCP9808 verwendet, den ich aber erst auf eine DIL-Adapterplatine gelötet habe, damit ich ihn anschließen konnte.
Man kann ihn über den I2C-Bus mit max. 400 kHz auslesen. Wenn sich SCL mindestens 25 ms (Timeout) nicht mehr ändert, also High oder Low bleibt, dann wird die I2C Schnittstelle resetet. Daraus ergibt sich die minimale Taktfrequenz von > 20 Hz. Bei diesem Projekt beträgt der Bus-Takt 12,5 kHz. Auch wenn bei 1,5 m Leitungslänge keine Übertragungsprobleme auftreten sollten.
Die Mikrocontroller Pins für den Bus werden beide als open Drain betrieben, das heißt auch die Taktleitung braucht einen Pull-up Widerstand. Dadurch ist es dem Slave möglich, wenn er nicht mehr mitkommt, einfach SCL auf Low zu halten (Clock Stretching). Das kannte ich bisher noch nicht.
Das Programm 'gefriertruhenueberwachung.asm' ist in Microchip Assembler geschrieben, zum Hochladen habe ich die Endung in '.txt' geändert.
Seit Ubuntu 20.04 und MPLAB X IDE 5.35 kommt immer:
Configuration Loading Error:
MPASM is not supported on 64 bit Operating Systems. Please consider migrating your project "Gefriertruhenueberwachung" configuration "default" to XC8 Assembler or continue to use a previously released IDE.
Die Programmierung funktioniert bisher trotzdem noch.
Aber soll das heißen, daß Microchips eigene Entwicklungsumgebung die "Muttersprache" der kleinen PICs, die in allen Datenblättern gut dokumentiert ist, nicht mehr unterstützt?
Mit dem XC8 Compiler habe ich noch keinen Assembler Code zum Laufen gebracht. Das kann natürlich daran liegen, daß ich bisher zu wenig Lebenszeit investiert habe.
Da fällt mir eine Aussage eines ehemaligen Mathematik Lehrers ein, auch wenn es damals eher um mathematische Gleichungen ging:
Zitat... und wenn man etwas nicht versteht, da muß man bohren, bohren, bohren!
und an anderer Stelle:
ZitatAuch Probieren ist eine Art des Lösens - und nicht immer die schlechteste.
In diesem Sinne.
Gruß
Raspi_9