Martin schrieb:
> Hallo zusammen,
>
> für ein kleines Projekt möchte ich mit einem µC ein paar Verbraucher
> zeitabhängig ein- bzw. ausschalten. Zwei Anforderungen sind hier
> relevant:
>
> a) Ich möchte eine relativ genaue Uhrzeit haben (ca. 1 Minute/Monat wäre
> akzeptabel)
> b) Die Uhrzeit muss auch nach einem Stromausfall korrekt sein.
>
> Den Punkt (a) könnte ich auch intern mit den Bordmitteln des µC lösen.
> Für Punkt (b) benötige ich aber eine externe RTC. Ich habe (um I/O-Pins
> zu sparen) an einen Baustein mit I²C-Anschluss gedacht - bspw. den
> PCF8583 oder den DS1307.
>
> Nun zu meiner eigentlichen Frage: Wie binde ich eine externe RTC
> sinnvoll in meine Software ein (ein PIC 18F4550 soll es werden)?
>
> Zyklisch die RTC pollen und den Timer des µC für die Zeit zwischen zwei
> Poll-Vorgängen nutzen? Und bspw. alle 60 Sekunden einmal pollen?
>
> Oder viel öfters pollen?
>
> Oder nur einmalig beim Systemstart die Uhrzeit abfragen und danach den
> µC benutzen, weil er evtl. eine genauere Zeit liefern kann? Da ich
> später vielleicht aber auch mal Wochentage berücksichtigen möchte, ist
> diese Variante IMHO unsinnig, da ich dann ja die Funktion der RTC per
> Software duplizieren würde.
Wie oft und wie schnell brauchst Du denn die aktuelle Zeit?
Wenn es nur relativ selten ist und nicht besonders schnell gehen muß,
dann lese die RTC doch einfach dann aus, wenn Du die Zeit brauchst.
Wenn die Anforderungen an die Zeit nicht besonders hoch sind, kann es
auch reichen, die RTC zyklisch auszulesen - und zwar schneller als in
der benötigten Auslösung. Wenn 1s reichen, dann kannst Du auch alle
500ms auslesen und bist auf der sicheren Seite.
Wenn die Zeit oft und exakt gebraucht wird oder wenn Du eine exakte Zeit
sehr schnell brauchst (beispielsweise wenn ein Ereignis eintritt), dann
lese die Zeit regelmäßig von der RTC ein und vergleiche die "externe"
Zeit mit der internen Zeit des µC. Je nach Abweichung passt Du dann die
interne Zeitbasis proportional zur Abweichung an. Wenn die interne Zeit
"vorgeht", dann erhöhst Du die Periodendauer des internen Zählers, wenn
sie nachgeht, dann verringerst Du die Periodendauer. Quasi eine PLL in
Software.
Damit bist Du aber gezwungen, zumindest Teile der RTC
nachzuprogrammieren.
Wenn Du beim Systemstart die Zeit einliest und intern weiterrechnest,
kann es passieren, dass der Unterschied der Zeiten nach 5 Monaten
Nutzung 5 Minuten beträgt. Wenn dann ein Reset auftritt, liegen die
neuen Zeiten erst mal 5 Minuten in der Vergangenheit, was sich
üblicherweise nicht gut in einem Log macht. Das gleiche kann Dir
passieren, wenn Du die RTC regelmäßig liest und die interne Zeit "hart"
setzt. Ist dein µC schneller, "springt" die Zeit in die Vergangenheit.
Je nach Anwendung ist das Springen störend, wenn beispielsweise real
periodische Ereignisse aufgrund der Zeitsprünge falsch dargestellt
werden.
Wie fast immer in der Technik:
Der Aufwand steigt mit den Anforderungen an die Genauigkeit.
Gruß,
Bernd