Forum: Mikrocontroller und Digitale Elektronik Real Time Clock


von Marco G. (marco_g)


Lesenswert?

Hallo liebe uC Gemeinde

Weiss jemand wie ich eine RTC in C auf dem uC SAB-C517A mit internem 
2MHz Takt Programmieren kann?

Macht man das mit Timern?

mfg Marco

von Volker Z. (vza)


Lesenswert?

Eine RTC ist ein (spezieller) Timer.

Steht aber alles im Datenblatt.
Aplikations-Quelltexte giebt es auch von den Herstellern.

Gegenfrage: Hast Du dir alle üblichen Quellen angeschaut?

von Purzel H. (hacky)


Lesenswert?

Ein Realtimeclock hat ueblicherweise einen externen 32kHz Quarz ...

Was soll's denn werden ?

von Marco G. (marco_g)


Lesenswert?

@ vza
im datanblatt ist unter timer folgendes aufgelistet:

TCON      Timer 0/1 Control Register
TH0       Timer 0, High Byte
TH1       Timer 1, High Byte
TL0       Timer 0, Low Byte
TL1       Timer 1, Low Byte
TMOD      Timer Mode Register

wenn ich das richtig erkannt habe sind das nur Timer 0 und 1

und welche üblichen quellen meinst du? habe noch nie eine RTC 
programmiert.


@ hacky

ich habe vor die RTC über RS232 auf den PC zu übertragen und auf dem 
Bildschirm anzuzeigen.

das senden und anzeigen ist kein problem, ich weiss nur nicht wie ich 
die RTC hinkriege!

mfg marco

von Karl H. (kbuchegg)


Lesenswert?

Marco G. schrieb:

> das senden und anzeigen ist kein problem, ich weiss nur nicht wie ich
> die RTC hinkriege!

Eine RTC, also eine Uhr ist auch nichts anderes als ein Zähler, der 
still und heimlich vor sich hinzählt.
Nur das er bei 60 wieder auf 0 zurückgesetzt wird und ein 'Übertrag' in 
die nächste Stelle erfolgt.

Wir nennen das dann nicht Einer, Zehner und Hunderter, sondern Sekunden, 
Minuten und Stunden. Aber das Prinzip ist völlig gleich.

Wenn du also einen Timer so aufsetzen kannst, dass er dir regelmässig, 
sagen wir mal 100 mal in der Sekunde, eine Fúnktion aufruft, dann zählst 
du in der Funktion die Aufrufe mit und beim 100ten Aufruf ist dann 1 
Sekunde vergangen. Nach 60 Sekunden 1 Minute. Nach 60 Minuten 1 Stunde. 
Nach 24 Stunden 1 Tag, nach 28/29/30/31 Tagen (ja nach aktuellem 
Monat/Jahr) ein Monat und nach 12 Monaten 1 Jahr.

Einfach nur Zählstufen.
Alles steht und fällt mit dem kleinsten Takt. Wenn deine 100 (oder 
wieviele es dann rein rechnerisch tatsächlich sind) Funktionsaufrufe 
nicht stimmen, stimmt auch der Rest nicht.

Das bedeutet aber auch, das dir die Auflistung der Register nur bedingt 
weiterhilft. Du musst im Datenblatt nachlesen, wie du es hinkriegst, 
dass dir der Timer eine bestimmte Funktion regelmässig aufruft. 
Regelmässig alleine reicht noch nicht. Der Genauigkeit zuträglich wäre 
es, wenn man das auch noch so hintricksen kann, dass in 1 Sekunde exakt 
eine ganze Zahl Aufrufe erfolt. Wie groß diese ganze Zahl ist, spielt 
dann wieder weniger die Rolle.

von Marco G. (marco_g)


Lesenswert?

da wäre es doch am besten einen 8-Bit timer im reload mod einzusetzen 
und das Hauptprogramm immer nach 0.1ms (von 55 auf 255 = 200; 
200/2'000'000 = 0.0001) durch interrupts zu unterbrechen und einen 
conter hochzuzählen bis 10'000. Denke dass ich da eine sehr genaue 
sekunde bekomme, oder habe ich etwas vergessen in die berechnung 
einzubeziehen?

von Karl H. (kbuchegg)


Lesenswert?

Marco G. schrieb:

> sekunde bekomme, oder habe ich etwas vergessen in die berechnung
> einzubeziehen?

Probiers aus.
Eine Uhr hat den Vorteil, dass man nach ein paar Minuten ziemlich 
schnell sieht ob man etwas vergessen hat. Die Fehler akkumulieren sich.

von Marco G. (marco_g)


Lesenswert?

jop dankeschön für die hilfen :D

von Purzel H. (hacky)


Lesenswert?

Das wirklich Muehsame an RTCs ist eine Gangdifferenz zu anderen Uhren. 
daher sollte man die Sekunde genau hinkriegen. Eine Interne Uhr hat nun 
einfach nicht diese Stabilitaet. Ohne Quarz ist da nichts. Von den 
guenstigen Quarzen ist der 32kHz der Genaueste. 10ppm sind da Standard.

von aaahhh (Gast)


Lesenswert?

wozu der Aufwand nimm externen RTC zB DS1307 oder etwas weniger altes !

von why? (Gast)


Lesenswert?

Warum ein externes IC, wenn er anscheinend eh noch Ressourcen in seinem 
Controller zur Verfügung hat? Außerdem kommt dann die Kommunikation mit 
dem externen RTC dazu, die braucht ja auch Ressourcen und vorallem Pins 
(die vielleicht nicht mehr verfügbar sind).

von Peter D. (peda)


Lesenswert?

Marco G. schrieb:
> Weiss jemand wie ich eine RTC in C auf dem uC SAB-C517A mit internem
> 2MHz Takt Programmieren kann?
>
> Macht man das mit Timern?

Ja.
Am besten geht das mit Timer 2 im Reload-Mode (C517a Users-Manual S93).
Dann im Timerinterrupt noch eine Variable runterzählen, um den 
Sekundentakt zu erhalten.
Dann Sekunden 0..59, Minuten 0..59, Stunden 0..23 usw. zählen.


Peter

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.