mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PCF8583 Sommer/Winterzeit


Autor: J. Fiedelak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe den PCF8583 in einer Apllikationen mit einem Mega163 
eingesetzt. Nun stellt sich das Problem der Umschaltung von Sommer auf 
Winterzeit.
Hat vielleicht jemand eine Idee wie man das am einfachsten machen 
könnte?


Gruß Jens

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn man weiss, daß die Umstellung von Winter- auf Sommerzeit immer am 
letzten Sonntag im März und die Rückstellung am letzten Sonntag im 
Oktober erfolgt, dürfte das kein Problem sein.

Gruss

Christoph

Autor: A. Arndt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

schliesse mich an, man muss doch nur sagen:

Wenn Tag z.B. = Sonntag an Tag mind. 24. dann
Stunde = Stunde - 1 z.B. und das auch für den Oktober...

Gruss
Alex
www.AR-online.de

Autor: J. Fiedelak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Problem dabei, das Gerät läuft nicht immer. Es handelt sich dabei 
nämlich um einen steuerrechner für Traktoren. D.h. die Software läuft 
nur wenn der Traktor auch läuft. Deshalb wird diese einfache Abfrage 
nach Sonntag mind. 24. nicht so einfach funktionieren.

Gruß Jens

www.fiedelak-elektronik.de

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int szeit = WINTER;
   get_date( &day, &month, &wday );
/************************************** Alte Regelung 
******************/
/*
   if( month > 3 && month < 9 )
      szeit = SOMMER;
   if( month == 3 && (day - wday) >= 21 )
      szeit = SOMMER;
   if( month == 9 && (day - wday) < 21 )
      szeit = SOMMER;
*/
/************************************** Neue Regelung ab 1996 
**********/
   if( month > 3 && month < 10 )
      szeit = SOMMER;
   if( month == 3 && (day - wday) >= 25 )
      szeit = SOMMER;
   if( month == 10 && (day - wday) < 25 )
      szeit = SOMMER;


Peter

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

wie wärs wenn du im AVR eeprom ein Sommerzeit/Winterzeit-Bit setzen 
würdest. Diese müßte bei jedem start abgefragt werden.

Gruß Christoph

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

> das Problem dabei, das Gerät läuft nicht immer. Es handelt sich dabei nämlich um 
einen steuerrechner für Traktoren. D.h. die Software läuft nur wenn der Traktor 
auch läuft.

Ich denk mal das der PCF8583 trotzdem noch unter Spannung steht, sonst 
müsstest ja immer wieder die Zeit neu einstellen, wodurch  das Problem 
mit der Sommerzeit ja gar nicht vorkommen würde ;-).

Kannst es auch mal mit einem Dated Alarm bzw. Interrupt versuchen. Der 
Alarm bleibt bestehen bis er vom µC gelöscht wird. Danach stellst das 
Datum für die nächste Zeitumstellung. Musst halt mindestens einmal in 
der Sommer- und einmal in der Winterzeit auf den Acker.

Die sicherste Lösung ist aber sicherlich die mit dem Flag im EEprom oder 
im Ram des PCF8583. !!!!

Musst dich aber bischen beeilen hast weniger als 16h Zeit.

Gruss Martin.

Autor: Jens Fiedelak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für euere Tips!

Ich werd die beiden Versionen mit Interrupt und EEprom ausprobieren!

Gruss Jens

www.fiedelak-elektronik.de

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter:
Welcher Wertebereich ist für wday einzusetzen? (0-6 oder 1-7). Ist dabei 
Montag oder Sonntag dem kleinsten Wert zugeordnet?
Oder direkt: Ist deine Routine auf das DCF77-Protokoll zugeschnitten?

Schmittchen.

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Schmittchen,

ist schon uralt das Programm.
Ich habs geschrieben, als Windows noch nicht mit der Sommerzeit umgehen 
konnte und es dann in der autoexec.bat aufgerufen. Anbei der komplette 
Code.

Tut jetzt bei mir immer noch seinen Dienst (Windows-NT bzw. 
Windows98SE).


Das Datum liefert der DOS Interrrupt 21. Ich glaube, Sonntag=0.


void get_date( int *day, int *month, int *wday )
{
   asm {
      mov ah, 2Ah
      int 21h
   }
   *wday = _AL;
   *day = _DL;
   *month = _DH;
}


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.