Member
Beiträge: 10.727
Themen: 45
Registriert: Jan 2008
Ich werde ein Tütchen mit Ersatzrelais reinhängen ;-).
Member
Beiträge: 296
Themen: 6
Registriert: May 2016
Hast du mal gemessen, was für einen Verbrauch die Uhr im Schnitt hat?
Member
Beiträge: 10.727
Themen: 45
Registriert: Jan 2008
27.01.2020, 09:28 PM
(Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2020, 09:29 PM von kahlo.)
Im Schnitt? Das Werk selbst 12V/25mA 0,5s pro Minute. Also 2,5 mW Leistungsaufnahme im Schnitt
.
Dazu kommt noch der µC und die RTC, diverse LEDs, die Relais, Ladestrom für den LiPo wenn nötig... genau weiss ich es nicht. Ich habe nicht gespart.
Member
Beiträge: 10.727
Themen: 45
Registriert: Jan 2008
Ich lass mich gerade belehren - von ChatGPT. Und bin beeindruckt. Diese Frage hab ich ihm gestellt:
Kannst du mir ein Beispiel geben, wie ich den folgenden Arduino-Code besser strukturieren und lesbarer machen kann?
// 2018-11-27: TN-Tochteruhr mit hochgenauer RTC [voller Code der Uhr angehängt]
Die Antwort von ChatGPT zeigt, dass er den Code und seinen Zweck voll erfasst
:
Ja, hier sind einige Vorschläge, wie man den Code besser strukturieren und lesbarer machen kann:
- Kommentare:
Kommentare sollten den Code erklären, aber nicht überflüssig sein. Die Kommentare sollten so geschrieben werden, dass der Code ohne Kommentare verständlich ist. In diesem Code sind viele Kommentare vorhanden, aber sie sind nicht immer notwendig oder klar.
Zum Beispiel könnte der Kommentar für byte led = 18; verbessert werden, indem man erklärt, wofür die LED verwendet wird, wie byte led = 18; // LED-Anzeige an Pin 18 oder noch besser const byte LED_PIN = 18; // Verwendet für Status-LED.
- Variablen:
Es ist gut, aussagekräftige Variablennamen zu verwenden, die den Zweck der Variablen beschreiben. Die Variablennamen in diesem Code sind kurz und nicht immer leicht verständlich. Bessere Namen würden die Lesbarkeit des Codes verbessern.
Zum Beispiel könnte die Variable TN1 umbenannt werden, um ihre Verwendung klarer zu machen, wie const byte COIL_PIN_A = 6; // Erster Ausgang für Uhrwerksspule.
- Einrückungen und Leerzeichen:
Es ist wichtig, den Code so zu formatieren, dass er leicht lesbar ist. Einrückungen und Leerzeichen helfen dabei, den Code zu strukturieren. In diesem Code gibt es einige Stellen, an denen die Einrückungen und Leerzeichen verbessert werden können.
Zum Beispiel sollte jede geschweifte Klammer {} in einer eigenen Zeile beginnen und eingerückt sein. Auch der Code innerhalb einer if-Anweisung sollte eingerückt werden, um die Struktur klarer zu machen.
Hier ist ein Beispiel:
Code:
if (digitalRead(power) == HIGH) {
if (PowerFlicker > 0) {
PowerFlicker--;
PowerFlag = false;
}
else {
PowerFlag = true;
}
}
else {
PowerFlag = false;
PowerFlicker = 30;
}
- Funktionen:
Funktionen können den Code in kleinere, leichter verständliche Teile aufteilen. In diesem Code ist alles in setup() und loop() enthalten, was es schwierig macht, den Code zu verstehen. Es ist besser, die Funktionen so zu benennen, dass ihre Verwendung klar ist, wie setupRTC() oder checkPower().
Hier ist ein Beispiel für eine Funktion, die den Minutenstack verarbeitet:
Code:
void processMinuteStack() {
if (minutes > 0 && minutes < 708) {
if (coilstatus == LOW) {
digitalWrite(COIL_PIN_A, HIGH);
coilstatus = HIGH;
}
else {
digitalWrite(COIL_PIN_B, HIGH);
coilstatus = LOW;
}
minutes--;
TotzeitFlag = true;
}
}
- Konstanten:
Konstanten sollten verwendet werden, um Werte zu speichern, die im Code mehrfach verwendet werden. Das macht den Code leichter verständlich und vermeidet Tippfehler. In diesem Code gibt es einige Stellen, an denen Konstanten verwendet werden könnten.
Zum Beispiel könnte die DS3231-Adresse als Konstante defini... [da brach er ab, Serverlast...]
[/color]
Mann mann mann. Ich will mehr!
Member
Beiträge: 10.602
Themen: 355
Registriert: Jul 2012
Not bad.
Administrator
Beiträge: 10.245
Themen: 165
Registriert: Jun 2005
15.02.2023, 08:13 PM
(Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2023, 08:56 PM von alfsch.)
jo, für ne KI (Künstlicher Idiot) nicht übel.
aber ich hätte doch Diskussionsbedarf , ich stelle mir die Struktur halt anders vor , zb so:
oder
oder ganz einfach, aber klar
mit den statements zu Namen und Konstanten hat er aber schon gut getroffen, optimal ist , wenn var und Konstanten schon durch ihre Bezeichnung erklären, was sie tun/bedeuten , auch wenn es mehr zum schreiben ist -
- anders, als die frühere Maxime : alle Bezeichnungen, die mehr als 3 oder 4 Zeichen haben, sind überflüssiger Schnickschnack.
Don't worry about getting older. You're still gonna do dump stuff...only slower
Member
Beiträge: 10.727
Themen: 45
Registriert: Jan 2008
16.02.2023, 10:36 AM
(Dieser Beitrag wurde zuletzt bearbeitet: 16.02.2023, 10:36 AM von kahlo.)
Ich werde in den nächsten Wochen den Code für die Uhr überarbeiten und mir dabei die Vorschläge von ChatGPT ansehen. Wenn man ihm die gleiche Frage mehrmals stellt, bekommt man immer andere Vorschläge. Teilweise wirklich interessante...
Die Uhr bekommt auch ein Hardwareupdate. Die Relais kommen raus! Obwohl sie nun schon seit mehr als 4 Jahren vor sich hin klickern. Ein Chip soll das nun managen - der DRV8870:
https://www.ti.com/product/de-de/DRV8870
Damit fällt auch die komplette Ansteuerung der Relais weg (da war ein Haufen Spannungs- und Signalwandlung nötig). Der rot umrandete Krempel und die Relais fallen dann weg und ein sauberer Chip macht alles...
Member
Beiträge: 10.602
Themen: 355
Registriert: Jul 2012
Eventuell tut's auch ein A4988 Stepper Motor Treiber. Für 2 getrennte Vollbrücken in einem Chip.
Da gibt's fertige Steckmodule für kleines Geld. (Falls du nicht schon welche aus'm 3D Drucker über hast.)
Member
Beiträge: 10.727
Themen: 45
Registriert: Jan 2008
Ich fand den DRV8870 so interessant, weil er genau nur eine Spule ansteuern kann. Für einen Stepper bräuchte man 2 Käfer. Ist aber kein Stepper im herkömmlichen Sinne. Mein lahmer Einspulenstepper braucht nur einen kleinen Achtbeiner und kein Schnickschnack drumrum.
Teile sind schon da
Member
Beiträge: 10.602
Themen: 355
Registriert: Jul 2012
Ok ok.