Anfängerfrage bezüglich Modellbahn-Hausbeleuchtung

Darf ich mich auch mal mit einer Anfängerfrage hier ranhängen ?

Ich bin noch blutiger Anfänger und habe den sketch auch noch nicht voll verstanden. Dazu muß ich noch weiter mit der Materie befassen. Trotzdem würde ich ihn gerne schon mal einsetzen. Wenn ich das richtig verstanden habe, beeinflussen doch die Werte in der Zeile

long ledtakt[]={1500, 2200, 3333, 5000, 9100};

die Ein- und Ausschaltzeiten der Lampen-LEDs. Ich möchte diese Zeiten erheblich verlängern. Aber einfach mit ein paar Nullen z.B. aus 1500 15000 machen geht scheinbar nicht. Entweder leuchtet dann immer nur ein/zwei LEDs oder der Fernseher flimmert alleine. Also muss es scheinbar Grenzen geben, in denen ich diese Zahlen verändern darf ?

Danke für eure Hilfe.

Jörg

Häng mal ein L oder UL (für unsigned long) an die Zahlen

unsigned long test= 10000000UL;

und schau hier : http://arduino.cc/en/Reference/Long

Nachtrag: Das hat jetzt nichts mit Modellbahn zu tun, und wäre auf jeden Fall besser in einem eigenen Thread aufgehoben ...

joerg810:
die Ein- und Ausschaltzeiten der Lampen-LEDs. Ich möchte diese Zeiten erheblich verlängern. Aber einfach mit ein paar Nullen z.B. aus 1500 15000 machen geht scheinbar nicht. Entweder leuchtet dann immer nur ein/zwei LEDs oder der Fernseher flimmert alleine. Also muss es scheinbar Grenzen geben, in denen ich diese Zahlen verändern darf ?

Soweit ich das sehe, müßtest Du sowohl die langen Zeiten als "long" mit nachgestelltem "L" an den Konstanten definieren, wenn die Zahlen über den "int" Wertebereich hinausreichen:

long ledtakt[]={150000L, 220000L, 333300L, 500000L, 910000L};

Der eigentliche Fehler dürfte aber der nur als int definierte "dauer" Parameter in dieser Funktion sein:

boolean milliSekundenTakt(int dauer, long &alterWert)

Das muss ganz sicher von int auf long geändert werden:

boolean milliSekundenTakt(long dauer, long &alterWert)

Ein weiterer Programmfehler könnte kritisch werden, wenn das Programm länger als ca. 25 Tage am Stück laufen soll, ohne zwischenzeitlichen "Reset", weil Überläufe der millis()-Timerfunktion im Programm nicht korrekt behandelt werden.

Soll das Programm nicht nur mit "sehr langen Schaltzeiten" arbeiten, sondern auch ein "Dauerläufer" sein, der ohne Reset monatelang durchlaufen soll? In dem Fall würde ich nochmal drüberschauen, an welchen Stellen noch kleinere Änderungen gemacht werden sollten.

Danke dir jurs .

Michael, also für mich hat das noch was mit Modellbahn zu tun. Ich kam nämlich auf die Idee, die Schaltzeiten zu verlängern, da es, wenn man mehrere Häuser damit ausstattet, durch die kurzen Schaltzeiten sonst wie ein Disco blinken aussieht. Durch die preiswertwen ATtiny45er ist das ja auf eine ganze Modellbahnstadt ausbaubar.

Nun leuchten die einzelnen LEDs wie gewünscht viel länger. Auch das Fernsehflimmern, nachdem ist dessen Schaltwerte auch mit einem L dahinter versehen habe. Das mit den 25 Tagen ist nicht schlimm - so lange ist wohl keine Anlage im Dauereinsatz.

Aber das Programm braucht nun noch viel länger, bis der erste Ausgang nach dem Start auf high wechselt. Kann man da noch was ändern ?

für mich hat das noch was mit Modellbahn zu tun.

Ja, schon gut, Jörg :stuck_out_tongue:

Auch jurs' Antwort bezog sich direkt auf seinen alten Beispiel-Sketch aus diesem Thread.

Nur meine Antwort "Wie man eine long Variable mit einer großen Zahl initialisiert", hat nix mit Modellbahn zu tun.
Aber das konntest du ja nicht wissen :wink:

joerg810:
Aber das Programm braucht nun noch viel länger, bis der erste Ausgang nach dem Start auf high wechselt. Kann man da noch was ändern ?

Ja klar. Das Programm fängt mit "alles aus" an, und wenn es "lange Schaltzeiten" gibt, dann dauert es eben lange, bis irgendwas angeschaltet wird.

Abhilfe wäre beispielsweise, in der setup()-Funktion anfangs alles einzuschalten:

  for (int i=0;i<sizeof(leds);i++)
  {
    pinMode(leds[i], OUTPUT);
    digitalWrite(leds[i], HIGH);
  }

Oder vielleicht anfangs jede zweite LED einzuschalten, wenn es sonst anfänglich zuviel wird:

  for (int i=0;i<sizeof(leds);i++)
  {
    pinMode(leds[i], OUTPUT);
    if (i%2==1) digitalWrite(leds[i], HIGH);
  }

Klingt gut, aber will nicht :cry:

/*  Simulation "belebtes Haus für die Modellbahn" */
/*  Version "Flimmern nur wenn die Pin-13 LED an ist */
byte pwmFlimmerPin=10; // PWM Pin für das "analoge" Flimmern
long flimmerStart,flimmerEnd; // Anfangs- und Endzeiten für das Flimmern
// LED Pins für das normale Blinken deklarieren
byte leds[]   ={9,   11,   8,   13};
// LED Blinktakt in Millisekunden für diese Pins
long ledtakt[]={220000L, 300333L, 500000L, 921000L};
// Variablen zum Merken von millis()-Zeiten beim Schalten/Blinken
long ledtime[sizeof(leds)];

void setup() {
//  Serial.begin(9600);
  // Alle verwendeten Pins auf OUTPUT setzen
  pinMode(pwmFlimmerPin, OUTPUT);  
  for (int i=0;i<sizeof(leds);i++)
      pinMode(leds[i], OUTPUT);
      if (i%2==1) digitalWrite(leds[i], HIGH);
}

Ich bekomm die Fehlermeldung :
name lookup of 'i' changed for new ISO 'for' scoping

joerg810:
Ich bekomm die Fehlermeldung :
name lookup of 'i' changed for new ISO 'for' scoping

Wenn ich die beiden Zeilen Code in der for-Schleife zwischen geschweifte Klammern packe, solltest Du das auch tun.

kapiert,

ich hatte die zweite Klammer für die schon vorhandene gehalten. :-[

Nun gehts. Danke.

Noch'n Gedicht (Heinz Erhardt)

Anfang November 2014 traf ich auf einer Modellbahnausstellung einen netten älteren Herrn, der eine Hausbeleuchtung mit ATtiny 45 zeigte. Als ich dann ein paar Wochen später eine solche selbst zustande gebracht hatte, freute ich mich ungemein! Das Programm (Sketch) sah ungefähr so aus wie in Post #0. Ich finde, jeder Anfänger darf stolz darauf sein, auch wenn die Experten lächeln!

Darum erlaube ich mir, Uwe (uwefed) vorsichtig zu widersprechen, wenn er in #1 „Du darfst kein delay() verwenden ...“ schreibt. Mein Lernweg führte zunächst zu einer Lösung, bei der ich delay(1) in loop verwendete, und zwei Schleifenzähler, einen für die Hausbeleuchtung, einen für das Blinken, erhöhte. Bei wirklich zeitkritischen Anwendungen (ich lasse gerade zwei ATtinys mittels I2C miteinander reden) funktioniert delay() dann wirklich nicht mehr. Hätte Uwe formuliert, was er mutmaßlich meint, die Lösung mit millis() sei eleganter und zukunftssicherer, so bekäme er meine volle Unterstützung. Die Erklärungen später (#11 und #12) sind dann ja auch prima.

Zur von BR130 in #26 aufgeworfenen Frage der mehrbeinigen ATtinys möchte ich hier meinen derzeitigen Liebling '4313 mit 17 nutzbaren Ein-/Ausgängen erwähnen. Mit der IDE Version 1.5.8 lässt er sich prima programmieren. Ich habe eine Ampelschaltung mit Baustellenblitzern und einen Würfel damit realisiert und verschenkt. Zu beachten ist die Gesamtleistung des IC.

Um einem möglichen Missverständnis vorzubeugen, welches beim Lesen von #32 und #37 entstehen könnte: Sowohl die megas als auch die tinys lassen sich, wenn ich das Datenblatt richtig verstehe, ca. 10000 Mal „umprogrammieren“.

Eine „spannende“ Frage wird in #33 nach der Stromversorgung gestellt. Grundsätzlich wollen die Mikrocontroller 5V. Der schon erwähnte '4313 (1 MHz) tut es aber auch noch bei 3V, weshalb der ebenfalls bereits erwähnte Würfel mit 3 x 1,5V versorgt wird. Um die höheren Spannungen der Modellbahn zu schalten, habe ich auch schon einen Optokoppler verwendet, wobei der 6N139 eine LED mit wenig Strombedarf am Eingang hat.

Wie schön zu lesen, dass es auch andere Menschen mit Träumen gibt. Eigentlich fängt es im Modellbau doch immer damit an. Träumen – Planen – Realisieren.

In #38 erwähnt Serenifly, wie auch schon an anderer Stelle geschehen, die Lösung mittels Schieberegister. Das habe ich mit ATtiny 45 und zwei 74HC595 ausprobiert, funktioniert für eine Hausbeleuchtung (Rathaus Leer) auch prima. Allerdings lasse ich eine LED als Neonröhre beim Einschalten flackern. Da müssen dann wegen der einen LED immer alle 16 Bit übertragen werden, was man beim Planen berücksichtigen sollte. Die notwendige boolsche Algebra zum Setzen einzelner Bits habe ich zwar in der Schule gehabt, war aber doch etwas schwierig. Derzeit würde ich wohl einen '4313 mit zwei PCF8574 Portexpandern über I2C und der flackernden LED direkt am '4313 Ausgang bevorzugen.

Jörg schlägt sich in #60 mit langen Variablen herum. Aus den Antworten habe ich was gelernt, möchte aber für die Hausbeleuchtung mit langen Schaltzeiten noch den Vorschlag ergänzen, die Millisekunden zu teilen. Mittels „millis() >> 10“ teilt man durch 1024, so dass dann möglicherweise wieder unsigned integer reicht.

Stefan wirft in #6 die berechtigte Frage auf, ob jemand lernen will. Ich bitte diesen Eintrag als DANKE an alle netten Menschen zu verstehen, die mir ihr Wissen zur Verfügung gestellt haben. Besonders lerne ich durch die schönen Programmbeispiele von jurs, weshalb ich an dieser Stelle ein allerdings unfertiges Programm extra für ihn veröffentliche. Es handelt sich um eine Abwandlung vom Leuchtturm-Beispiel.

//**************************************************************
//  Name    : Test Hausbeleuchtung fuer ATtiny 45
//  Zweck   : Hausbeleuchtung mit der Funktion millis()
//****************************************************************

// ATMEL ATTINY45
//
//                  +-\/-+
// Ain0 (D 5) PB5  1|    |8  Vcc
// Ain3 (D 3) PB3  2|    |7  PB2 (D 2) Ain1
// Ain2 (D 4) PB4  3|    |6  PB1 (D 1) pwm1
//            GND  4|    |5  PB0 (D 0) pwm0
//                  +----+

// Anregung durch "Leuchtturm LEDs schalten by Jurs" im Arduino-Forum Deutsch
//
#define B 1 	//Bad
#define W 2 	//Wohnzimmer
#define K 3 	//Küche
#define L 4 	//Laden
byte Zimmer[]             = {L, K, W, K, K, B, K, B, B, W, B, K, K, B, K, W, B, W, K, L, B};  // Pin-Nummer der zu schaltenden LED
unsigned int HausZeit[]   = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1};  // Sekunden Wartezeit (genauer Millisekunden/1024)
#define HausZeigerMax (sizeof(Zimmer)/sizeof(int *)) // Feldgroesse 
unsigned int HausZeigerakt = 0;   // Zeiger auf Feldelement
unsigned int HausZeitalt = 0;     // Sekundenzaehler bei letzter Aktion
//                            a    e    a    e    a    e     a    e    a    e      a
unsigned int BlinkZeit[] = {300, 100, 300, 300, 111, 300, 3333, 100, 300, 300, 20000};  // Millisekunden Wartezeit
#define BlinkZeigerMax (sizeof(Zimmer)/sizeof(int *)) // Feldgroesse 
unsigned int BlinkZeigerakt = 0;   // Zeiger auf Feldelement
unsigned long BlinkZeitalt = 0;   // Millisekundenzaehler bei letzter Aktion
boolean ein = LOW;                // Wenn LEDs gegen +5V geschaltet sind, negiert sich die Logik
boolean aus = HIGH;

void setup() {
  // Definiert die Ausgabepins
  pinMode(0, OUTPUT);	//Blink
  pinMode(B, OUTPUT);	//Bad
  pinMode(W, OUTPUT);	//Wohnzimmer
  pinMode(K, OUTPUT);	//Küche
  pinMode(L, OUTPUT);	//Laden
  digitalWrite(0, ein);
  digitalWrite(B, aus);
  digitalWrite(W, aus);
  digitalWrite(K, aus);
  digitalWrite(L, aus);
}


void Haus()
{
  if ((millis() >> 10) > (HausZeitalt + HausZeit[HausZeigerakt])) {
    if (HausZeigerakt < HausZeigerMax - 1) {                                      // Der Feldzeiger muss innerhalb des Feldes bleiben
      digitalWrite(Zimmer[HausZeigerakt], !digitalRead(Zimmer[HausZeigerakt]));   // Beleuchtung umschalten
      HausZeitalt = millis() >> 10;                                               // Sekunden merken
      HausZeigerakt++;                                                            // auf das naechste Feldelement zeigen
    }
  }
}

void Blink()
{
  if (millis() > (BlinkZeitalt + BlinkZeit[BlinkZeigerakt])) {        // Zeit abwarten
    if (BlinkZeigerakt < BlinkZeigerMax - 1) {
      BlinkZeigerakt++;
    } else {
      BlinkZeigerakt = 0;
    }
    digitalWrite(0, !digitalRead(0));           // Blink-LED umschalten
    BlinkZeitalt = millis();                    // Milisekunden merken
  }
}

void loop() {
  Haus();
  Blink();
}

Hallo liebe Forum-Mitglieder,
ich habe versucht, die Schaltung von Herbert auf dem UNO nachzubauen. Wenn ich die USB Versorgungsspannung anlege, läuft das Programm durch, jedoch LED 8 funktioniert nicht. Die LEDs habe ich an den digitalen Pins 8, 9, 10, 11 und 13 angeschlossen. Hier im Forum hatte ein gewisser Oliver auch das Problem mit Pin 8 gehabt.
Zwei, drei Seiten weiter im Forum wurde dann geschrieben, wenn man die ledtakt Werte runtersetzt, z. B. von 22000 auf 2200, dann funktioniert auch LED 8. Das stimmt tatsächlich, nur jetzt blinken die LEDs viel zu schnell.
Ich kann nicht sagen, was für welche LEDs ich habe. Sie stammen aus einem Arduino Starter Kit von starthardware.org. Die Widerstände der LEDs haben 220 Ohm. Die Polungen habe ich alle gecheckt.
Über PN habe ich mit Herbert bereits Kontakt aufgenommen. Ein von mir mit Fritzing erstellter Plan wurde von ihm als korrekt bezeichnet. Er weiß leider auch keinen Rat mehr.
Woran könnte das liegen? Ich bin absoluter Laie und wäre für eine Antwort sehr dankbar.
Grüße
Andreas

Hallo Andreas,
willkommen im Forum! Ich würde mich über einen aktiven Modellbahnbauer im Forum freuen.

Ich möchte Dein Problem gerne nachvollziehen. Welchen Sketch meinst Du und wo im Sketch tauchen dann die "22000" auf?

Wenn Du in Deinen Text einen Link auf die entsprechende Stelle einbaust, kann ich es schnell und besonders auch eindeutig finden.

pussy123:
Wenn ich die USB Versorgungsspannung anlege, läuft das Programm durch, jedoch LED 8 funktioniert nicht. Die LEDs habe ich an den digitalen Pins 8, 9, 10, 11 und 13 angeschlossen. Hier im Forum hatte ein gewisser Oliver auch das Problem mit Pin 8 gehabt.
Zwei, drei Seiten weiter im Forum wurde dann geschrieben, wenn man die ledtakt Werte runtersetzt, z. B. von 22000 auf 2200, dann funktioniert auch LED 8.

Das in Reply #12 von mir gepostete Blinkprogramm funktioniert für Blinkzeiten, bei denen die Millisekunden in ein "int" passen. Also Blinkzeit maximal ca. 32 Sekunden.

Für drastisch längere Blinkzeiten siehe meine Anmerkungen in Reply #62.

Wenn Du Probleme hast: POSTE DEINEN CODE!

Und zwar den vollständigen Code, exakt so, wie Du ihn verwendest, und schreibe nicht, dass Du "denselben Code wie irgendjemand anderes" verwendest, aber dann doch die Blinkzeiten veränderst, z.B. auf Zeiten über 32 Sekunden, obwohl der gepostete Beispielcode nur Blinkzeiten unterhalb 32 Sekunden verwendet.

/*  Simulation "belebtes Haus für die Modellbahn" */
/*  Version "Flimmern nur wenn die Pin-13 LED an ist */
byte pwmFlimmerPin=10; // PWM Pin für das "analoge" Flimmern
long flimmerStart,flimmerEnd; // Anfangs- und Endzeiten für das Flimmern
// LED Pins für das normale Blinken deklarieren
byte leds[]   ={9,   11,   8,   13};
// LED Blinktakt in Millisekunden für diese Pins
long ledtakt[]={22000, 30333, 50000, 92100};
// Variablen zum Merken von millis()-Zeiten beim Schalten/Blinken
long ledtime[sizeof(leds)];

void setup() {
//  Serial.begin(9600);
 // Alle verwendeten Pins auf OUTPUT setzen
 pinMode(pwmFlimmerPin, OUTPUT);  
 for (int i=0;i<sizeof(leds);i++)
   pinMode(leds[i], OUTPUT);
}

boolean milliSekundenTakt(int dauer, long &alterWert) {
// Parameter "dauer": Dauer einer Blinkphase (an bzw. aus)
// Parameter "alterWert": Variable zum Speichern des millis() Timers
// Rückgabewert: true wenn die Zeit bis zum nächsten Umschalten abgelaufen ist, sonst false
 if (millis() - alterWert < dauer) return false;
 while (millis() - alterWert >= dauer) alterWert+=dauer;
 return true;  
}

void blinkenImTakt() {
 
// Alle gleichmässig blinkenden LEDs in ihrem eigenen Takt blinken lassen  
 for (int i=0;i<sizeof(leds);i++) // alle LEDs in einer Schleife durchgehen
 {
   if (milliSekundenTakt(ledtakt[i],ledtime[i])) // Takt für diese LED abgelaufen?
   {
     digitalWrite(leds[i],!digitalRead(leds[i]));  // wenn ja ==> Umschalten
     if (leds[i]==13 && digitalRead(leds[i])) // Pin-13 LED wurde gerade eingeschaltet
     {
      flimmerStart=millis()+2000; // Anfangszeit für das Flimmern setzen
      flimmerEnd =millis()+25000;  // Endzeit für das Flimmern setzen
     }  
//      Serial.print("Pin ");Serial.print(leds[i]);Serial.print(" = ");Serial.println(digitalRead(leds[i]));
   }
 }
}

void flimmernPwmPin() {
// Die flimmernde LED im Zufallsmodus flimmern lassen
 static long alterWert;
 static int flimmerDauer=200;
 static byte flimmerHelligkeit;
 if (milliSekundenTakt(flimmerDauer,alterWert)) // Takt abgelaufen?
 {
   flimmerDauer=1+random(200); // neue Flimmerdauer als Zufallswert
   if (millis()>flimmerStart && millis()<flimmerEnd)
     flimmerHelligkeit=random(256); // neue Flimmerhelligkeit als Zufallswert
   else  
     flimmerHelligkeit=0; // Flimmern aus wenn falsche Zeit zum Flimmern
   analogWrite(pwmFlimmerPin, flimmerHelligkeit); 
 }  
}

void loop() {
 blinkenImTakt();
 flimmernPwmPin();
}

Siehe Reply #62.

Du verwendest Taktzeiten, die länger als 32000ms (32s) sind:

long ledtakt[]={22000, 30333, 50000, 92100};

aber Du hast die Deklaration der milliSekundenTakt() Funktion nicht geändert.

Der "dauer" Parameter in der Funktion muss "long" sein, damit es mit langen Taktzeiten funktioniert.
Also statt der Zeile:

boolean milliSekundenTakt(int dauer, long &alterWert) {

setze die gänderte Zeile:

boolean milliSekundenTakt(long dauer, long &alterWert) {

Ich suche jetzt mal meine alten Postings in diesem Thread durch, wo ich das mit "int" Parameter gepostet habe und ändere das mal auf "long" ab, das scheint ja wohl trotz Reply #62 ein schwierig zu entdeckender und noch schwieriger zu beseitigender Überlauffehler zu sein.

Nachtrag: Code in Reply #12 und #19 geändert.

Hallo Andreas,
wenn Du jetzt noch Deinen Sketch in code-Tags setzt (der Button </>), indem Du Deinen Beitrag veränderst, wird "i" nicht als italic = kursiv mißverstanden.

Bei großen Zeiten kannst Du natürlich auch millis()/1000 oder einen anderen Teilungsfaktor verwenden, damit die Variablen nicht überlaufen. Da bietet sich eine Speicherung aktuelleZeit = millis()/1000 an.

Hallo liebe Forum-Mitglieder,
zunächst möchte ich mich bei "jurs" bedanken. Der Tipp "int" in "long" zu ändern war goldwert.
Nun läuft's. Vielen Dank.
Auch die Erhöhung der LED Blinktaktzeiten mit dem "L" klappt wunderbar. Danke! Danke!

@"agmue": Habe deinen Tipp mit den code-Tags umgesetzt. Danke! Ich muss noch viel lernen. Du hattest auch geschrieben, dass bei großen Zeiten ein Teilungsfaktor verwendet werden kann. Muss ich also überall millis() durch millis()/1000 ersetzen? Und das mit Speicherung aktuelleZeit = millis()/1000 habe ich gar nicht verstanden. :confused: Wo muss ich das denn eintragen?
Wie gesagt, ich muss noch viel lernen.

pussy123:
geändert in

long ledtakt[]={220000L, 303330L, 500000L, 921000L};

Jedoch nun blinkt und flimmert gar nichts mehr. Wieso hat das bei "joerg810" funktioniert und bei mir nicht?

Die kleinste Taktzeit ist in dem Fall 220000ms = 220 Sekunden.

Da alle Takte mit "AUS" beginnen, sollte die erste LED (die mit dem kürzesten Takt) nach exakt 220 Sekunden angehen. Das wären 3 Minuten und 40 Sekunden bis zum ersten Lebenszeichen einer LED.

Falls Du nicht mit "alles AUS" starten und den Ablauf des ersten Taktes abwarten möchtest, gäbe es natürlich verschiedene Möglichkeiten, auch entweder "mit irgendwas AN" zu beginnen, oder Du könntest "den ersten Takt systenatusch oder per Zufallsschema verkürzen", so dass die ersten LEDs bereits nach weniger als der Taktzeit beginnen zu leuchten.

Wie hättest Du es denn gerne?
Also Taktungen zwischen 220 und 921 Sekunden festlegen, aber die erste EIN-Schaltung soll bereits früher erfolgen? Wieviel früher und nach welcher Schaltlogik?

Oh ha, du hast bereits geantwortet als ich meinen Eintrag nochmal abgeändert hatte. Schneller gehts nicht.
Ja, ich möchte die erste EIN-Schaltung gerne viel früher als 3 Minuten und 40 Sekunden, z.B. nach 10 Sekunden. Die Schaltlogik wäre mir erstmal egal.

pussy123:
Du hattest auch geschrieben, dass bei großen Zeiten ein Teilungsfaktor verwendet werden kann. Muss ich also überall millis() durch millis()/1000 ersetzen? Und das mit Speicherung aktuelleZeit = millis()/1000 habe ich gar nicht verstanden. :confused: Wo muss ich das denn eintragen?

Da der Sketch mehrere Funktionen verwendet, müßte aktuelleZeit wohl global definiert werden. Also unsigned long aktuelleZeit = millis()/1000;

Wenn man mehrmals die Division durchführt, hat der Prozessor mehr Arbeit, was aber wohl nicht von Belang sein dürfte. Mir geht es mehr um die Idee, alle Zeiten in Sekunden angeben zu können. Ich komme halt aus der ATtiny-Ecke (ein ATtiny 85 oder 4313 je Haus), wo etwas mit den Resourcen gespart werden muß.