Forum: Mikrocontroller und Digitale Elektronik PCF8583 soll alle 120s Controller wecken


von Klaus K. (keili)


Lesenswert?

Hallo zusammen,
ich möchte den PCF8583 als Echtzeituhr verwenden. Mit einem Controller 
soll dann die Zeit eingestellt werden. Für Messdaten werden dann vom 
PCF8583 die aktuelle Uhrzeit und das Datum gelesen. Soweit geht es auch.
Meine Frage ist nun, kann der Baustein obwohl er im Uhrenmodus ist, alle 
120s den Ausgang  /INT bedienen um den Controller aus Sleepmodus zu 
wecken?
Wenn ich das Datenblatt richtig verstanden habe geht dies nur im 
Timer-Modus.

Hat jemand Erfahrung und kann mir Infos geben.
Danke !

von Antwortender (Gast)


Lesenswert?

Laut Datasheet für den Irq:
These conditions are clock alarm, timer alarm, timer
overflow, and event counter alarm..

Ansosnten setzt du dir halt alle 2Minutene einen Alarm

von Klaus K. (keili)


Lesenswert?

Du meinst, der Controller soll bevor er wieder schlafen geht einen neuen 
Alarm programmieren?

von HolgerT (Gast)


Lesenswert?

Hallo Klaus,

ob, das alle 120s geht, denke ich nicht. Vor einiger Zeit habe ich mit 
dem PCF8583 gearbeitet und das Ganze eben mal kurz wieder aufgefrischt:

Im Uhrenmodus des PCF8583 kann auf Speicherzelle 07 zusätzlich eine 
Timerfunktion (0..99 - Interrupt beim Nullen) ausgeführt werden (vergl. 
Kapitel 7 im Datenblatt). Mir war es dadurch möglich zusätzlich zur Uhr 
im 1-Sekunden-Takt einen Interrupt zum uC zu schicken und ihn dadurch zu 
wecken.

Gruß
Holger

von Klaus K. (keili)


Lesenswert?

Hallo Holger,
vielen Dank für die Info. Ich werde das im Datenblatt gleich anschauen.
Mein Ziel ist, den Controller nach jeweils ca. 120sec aufzuwecken um die 
Temperaturen zu messen.
Danach soll er wieder "schlafen". Ein Wecken pro 1sec. ist mir zu 
häufig.
Ich bedanke mich nochmals für deine Hilfe.

Gruß Klaus

von HolgerT (Gast)


Lesenswert?

Hallo Klaus,

noch ein paar kleine Ergänzungen:

* Die Timerfunktion im Uhrenmodus ist im Kapitel "7.7 Timer" 
beschrieben.
* Die Ladewerte für das Controlregister sind bei mir wie folgt 
definiert:
1
RtcControlval    EQU     00000100B               ;Ladewert fuer RTC Control/Status-Register
2
;                        |||||||+---------------- Status TimerInt
3
;                        ||||||+----------------- Status AlarmInt
4
;                        |||||+------------------ AlarmFunktion
5
;                        ||||+-------------------
6
;                        |||+-------------------- |
7
;                        ||+--------------------- +clock mode
8
;                        |+----------------------
9
;                        +-----------------------
10
RtcAlmControlOff EQU     00001001B               ;Ladewert fuer RTC Alarm Control-Register (Uhren-Alarm-Off)
11
RtcAlmControlOn  EQU     10011001B               ;Ladewert fuer RTC Alarm Control-Register (Uhren-Alarm-On)
12
;                        |||||||+---------------- |
13
;                        ||||||+----------------- |
14
;                        |||||+------------------ +timer function
15
;                        ||||+------------------- timer interrupt enable
16
;                        |||+-------------------- |
17
;                        ||+--------------------- +clock alarm function
18
;                        |+---------------------- timer alarm enable
19
;                        +----------------------- alarm interrupt enable
20
;
Das bedeutet, es gibt noch Reserven. Du könntest z.B. wählen:
1
RtcAlmControlxxx EQU     xxxxx010B
..dann würde alle 100 Sekunden ein Interrupt ausgelöst. (sind auch keine 
120s, aber nahe dran).

* Ansonsten der Vorschlag jede Sekunde den Interrupt auslösen lassen und 
in der Interruptbehandlungsroutine im uC bis 120 zählen und nur dann die 
Temperatur einlesen.

Gruß
Holger

von Antwortender (Gast)


Lesenswert?

> Du meinst, der Controller soll bevor er wieder schlafen geht einen neuen
> Alarm programmieren?

Ja, wenns der PCF8583 sonst nicht kann ist das sicher die einfachste 
Möglichkeit.

von HolgerT (Gast)


Lesenswert?

Hallo,

>> Du meinst, der Controller soll bevor er wieder schlafen geht einen neuen
>> Alarm programmieren?

>Ja, wenns der PCF8583 sonst nicht kann ist das sicher die einfachste
>Möglichkeit.

meiner Meinung nach ist das die komplizierteste Möglichkeit, denn dann 
muss man im uC eine Kalenderfunktion (einschliesslich Schaltjahr) 
abbilden - wie sonst will man die Daten: "Aktuelle Zeit + 2min" immer 
genau erhalten, um den PCF8583 die neue Alarmzeit mitzuteilen?

Gruß
HolgerT

von Antwortender (Gast)


Lesenswert?

> denn dann muss man im uC eine Kalenderfunktion (einschliesslich Schaltjahr)
> abbilden

Man kann den Alarm im "Daily" Mode betreiben (sieh Datasheet Page 9, 
"The year and weekday bits are ignored in a dated alarm. A daily alarm 
ignores the month and date bits.")

Somit muss man nur die aktuelle Uhrzeit lesen und 2 Minuten dazu zählen. 
Das sollte nicht so aufwendig sein.

Ansonsten den Timer verwenden und mit den "Minuten" zählen lassen.

Gruss

von Klaus K. (keili)


Lesenswert?

Hallo, vielen Dank für die Lösungsvorschläge.
Ich melde mich wieder, sobald ich die Varianten getestet habe.
Holger, danke !

Gruß Klaus

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
Noch kein Account? Hier anmelden.