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 macht ihr das mit externen RTCs in eurer Software? Gruß, Martin
Martin schrieb: > 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. Nö. Viele MCs haben spezielle Stromsparmodi, wo mit wenigen µA nur ein Timer an einem Uhrenquarz weiterläuft. Das ist oftmals einfacher, als ein Protokoll zu einem externen Uhrenchip. Peter
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
Servus, ich verwende DS1307 mit 5 Volt und DS1338 mit 3,3 Volt. Beide liefern einen quarzgenauen Sekundentakt, den man leicht mit einem PIN-Interupt abfangen kann. Die Stützbatterie hält jahrelang! Das I2C Protokoll ist einfach und für nahezu jeden Microcontroller im Internet zu finden. Die RTC Zeit direkt mit dem Microcontroller (Atxmega128a1) zu erzeugen, habe ich nach langen Versuchen wegen zu viel Stromverbrauch eingestellt. Die Genauigkeit des DS1307 hängt vom Quarz ab, ist aber für die meisten Uhren ausreichend. Gruß GG
Hallo zusammen. Hinweis: Habe mir inzwischen einen Account angelegt, bin aber noch die selbe Person wie Eingangs... > Viele MCs haben spezielle Stromsparmodi, wo mit wenigen µA nur ein Timer > an einem Uhrenquarz weiterläuft. > Das ist oftmals einfacher, als ein Protokoll zu einem externen > Uhrenchip. Eine Möglichkeit, an die ich gar nicht gedacht habe. Da ich allerdings sowieso einen anderen Baustein per I²C-Protokoll ansprechen muss, entsteht hier kein zusätzlicher Aufwand für eine externe RTC. Somit nehme ich lieber die weiteren Vorteile eines externen Bausteins mit. Die eigentlichen Schaltzeiten sind eher unkritisch. +/- ein paar Sekunden stellen gar kein Problem dar. Wichtiger ist eher eine geringe Drift über die Laufzeit. Ich werde mal schauen, ob ich ausschließlich pollen werde, oder ob ich evtl. eine Kombination aus dem 1 Hz Takt des DS1307 und daraus abgeleitet ein Polling implementieren werde. Gruß, Martin
Auch nicht viel teurer: Funkuhrmodul. Vorteile: muss man nicht stellen, keine Batterie nötig. Nachteil: es dauert nach Stromausfall ca. 3-4 Minuten bis man die Zeit hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.