Forum: Mikrocontroller und Digitale Elektronik Uhr mit ATmega8 --> RTC?


von Dieter Harms (Gast)


Lesenswert?

Hallo,

ich möchte mir eine Uhr mit Datumsfunktion basteln. Welchen Vorteil
hätte ich durch die Verwendung eines RTC-Chips über I2C-Bus?

Man kann das doch auch gut ohne realisieren oder? Wie genau kann das
werden bei 4MHz externem Takt?

DANKE.

PS: Hat das schon mal jemand unter BASCOM AVR programmiert?

von Sebastian (Gast)


Lesenswert?

Du kannst auch ein 32,wasweisich kHz Uhrenquarz anschließen der den
einen Timer taktet. Der µC läuft über den internen Resonator. Bei jedem
Timerüberlauf ist (bei richtiger Prescaler-einstellung) eine Sekunde um.
Schau mal ins Datenblatt des Mega8, da steht bisschen was dazu drin. Auf
der Homepage von Atmel gibts auch ne Applicationnote dazu.
Is jedenfalls recht einfach. Ein einfaches Blink-programm lief bei mir
beim ersten Versuch, obwohl ich vorher noch nie was mit Timern gemacht
hab.

Sebastian

von Hubert.G (Gast)


Lesenswert?

In einem RTC mit Mini-Batterie läuft die Zeit nach dem Ausschalten
weiter und ist daher nach dem Einschalten sofort wieder verfügbar.
Alternativ wäre dazu ein DCF-Empfänger mit Dekoder, lässt sich aber
auch nur mit Quarz realisieren.
Es ist so genau wie der Quarz es ist, hauptsächlich in Bezug auf
Temperaturschwankungen.
In der Codesammlung gibt es sicher auch Beispiele in BASCOM.

von Sonic (Gast)


Lesenswert?

Also vom Uhrenquarz (32768Hz) rate ich ab. Die Dinger können mächtig
ungenau sein! Lieber mit dem Timer und externem Quarz (so schnell wie
möglich) aufbauen, zusätzlich DCF77 ist auch 'ne gute Idee, lässt sich
leicht realisieren. Gibt's 'n Appnote von ATMEL dazu, da steht alles
Wissenswerte drin.

von Aufreger deluxe (Gast)


Lesenswert?

> Die Dinger können mächtig ungenau sein!

Quark, die Dinger sind weltweit milliardenfach im Einsatz!

von Sonic (Gast)


Lesenswert?

Schon richtig, und milliardenfach ungenau!

von Aufreger deluxe (Gast)


Lesenswert?

Jede Quarzuhr wird irgendwann ungenau, wenn man den Quarz nicht unter
definierten Temperaturen betreibt.

von Sonic (Gast)


Lesenswert?

Als ungenau bezeichne ich eine Abweichung von 3s und mehr pro Woche, das
ist bei ca. 30% der Uhrenquarze der Fall. 100 Stück getestet (bei
konstant 24°C), 29 davon aus der Toleranz!

von Jürgen C (Gast)


Lesenswert?

Hallo,

schau Dir mal in der "Bascom-AVR Help" den Befehl CONFIG CLOCK an,
da ist beschrieben wie es mit Bascom geht.

von The Slow (Gast)


Lesenswert?

www.black-strom.de.vu

unter AVR-Projekte. Ist zwar ein 2313, der BASIC Code kann aber fast 1
zu 1 übernommen werden

von Dieter Harms (Gast)


Lesenswert?

Vielen Dank für die zahlreichen Antworten.
Was mir jetzt noch sorgen macht, ist der Umstand dass ich ja nicht nur
eine Uhr realisieren möchte, sondern auch ein Datum --> also einen
kompletten Zeitstempel. Wenn ich das ohne RTC realisiere, müsste ich
mir doch auch gedanken um die Anzahl der Monatstage (28,30,31) und
schaltjahre machen. Ich stelle mir das reichlich kompliziert vor.

Der PCF8583 macht das doch von sich aus oder? Ich würde mich und den
ATmega8 also entlasten? Dann kann ich mich auf andere aufgaben
konzentrieren.

von Sonic (Gast)


Angehängte Dateien:

Lesenswert?

Hab dir mal die von ATMEL verfasste RTC (mit Datum und ext. Quarz)
drangehängt.

von Karl H. (kbuchegg)


Lesenswert?

> Wenn ich das ohne RTC realisiere, müsste ich
> mir doch auch gedanken um die Anzahl der Monatstage (28,30,31) und
> schaltjahre machen. Ich stelle mir das reichlich kompliziert vor.

Wow.
Ein Programmierer der sich Gedanken machen muss! Ist ja ganz
was Neues. (Sorry: Konnte nicht widerstehen).

Im Ernst. Das ist weniger kompliziert als du denkst. Du machst
das jeden Tag, ohne gross drüber nachzudenken. Für alle Monate
ausser Februar legt man sich eine Tabelle an, die für jedes
Monat die Anzahl der Tage enthält. Nur für Februar muss man noch
bestimmen, ob man in einem Schaltjahr ist oder nicht. Aber auch
das ist einfach: Ist die Jahreszahl ohne Rest durch 4 teilbar,
handelt es sich um ein Schaltjahr. Die Sonderregelung für die
Hunderter-Jahre kannst du mal ignorieren. Die wird erst in
94 Jahren wieder interessant und ich bezweifle dass deine Uhr
dann noch im Einsatz sein wird.

von saibot (Gast)


Lesenswert?

nicht bascom, aber dennoch extrem lesenswert:
http://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC

von Sonic (Gast)


Lesenswert?

Für die Sonderregelung der Hunderter gilt: durch 100 UND durch 400
Teilbar? (ohner Rest) und durch 4 teilbar? Dann Schaltjahr.

von saibot (Gast)


Lesenswert?

Alle Jahre, welche durch 4 ohne Rest teilbar sind, sind Schaltjahre.
Alle Jahre, welche durch 100 ohne Rest teilbar sind, sind keine
Schaltjahre.
Alle Jahre, welche durch 400 ohne Rest teilbar sind, sind wiederum
Schaltjahre.

quelle: http://de.wikipedia.org/wiki/Schaltjahr

von saibot (Gast)


Lesenswert?

ps: richtig kompliziert wird das hier:
http://de.wikipedia.org/wiki/Schaltsekunde

von Christian S. (kriki)


Lesenswert?

Also ich würde einen RTC-Chip mit kleiner Batterie nehmen. Da stimmt die
Uhrzeit und das Datum nach dem einschalten, Schaltjahr geht von selber.
Meistens ist sogar noch der Wochentag verfügbar.
Und die Ansteuerung per I2C ist auch einfach und bequem. Sourcecode in
ASM kann ich dir sogar geben.

Chips gibts ab 3€/Stk. und teilweise sogar inkl. Batterie.

von saibot (Gast)


Lesenswert?

wenn man eine uhr bauen will, sollte man auch den ehrgeiz haben, sie
selber zu programmieren. wenn man nur einen rtc-chip mit einem display
verbinden will, kann man auch gleich eine fertige uhr kaufen.

von pete nerlinger (Gast)


Lesenswert?

Sonic, wenn man keine Ahnung hat einfach mal die...halten, ne. Selten so
 viel Bockmist von nur einer Person gelesen, wenn du natürlich deine
quarze beim Besuch in der Proletensauna ausprobierst, dass ist klar,
daß sie ungenau werden.

Leute gibts...naja nicht weiter drüber aufregen.

von pete nerlinger (Gast)


Lesenswert?

achja saibot oder tobias, was fürn orgineller Einfall mit deinem Namen,
LOL.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

In der K&R-C-Bibel gibt es sogar ein Beispielprogramm dazu... Allerdings
in C.
In Bascom gibt es die Funktion ja schon vorgefertigt...

von Sebastian heyn (Gast)


Lesenswert?

wenn du eine kleine tabelle mit den nächsten 25 schaltjahren machst,
glaube ich genügt das, oder?
das ganze einmal nachts mit dcf abgleichen is auch ned so schwierig.
Wenns denn eingerät wird, ist auch platz für 2 akkus, die das ganze am
leben halten, wenn der strom weg ist. rtc ist zwar echt okay, aber ich
hätte wieder sonderwünsche für die man da teuer bezahlt... ich hate
schonmal ne uhr angefangen, die lief ziemlich akzeptabel mit nur dem
16mhz quarz, von daher würde ich mir den 32khz quarz sparen.. wenn man
dafür nen kleinen tiny45 benutzt nimmts auch nicht zuviel strom weg..
und einmal pro sekunde sendet er einfach alle daten per rs232 an das
system...

von Sebastian heyn (Gast)


Lesenswert?

oder in bascom prüfen ob ein schaltjahr aktuell ist (einmal zum
jahreswechsel da tun dir 1000cycles nicht weh...)vielleicht mache ich
nochmal die rtc im tiny fertig... da war doch irgendwo ein artikel, der
dntag berechnen konnte.. mal schauen

Dim H As Integer
'hilfsvariable
Dim J As Integer                                            'jahr
Dim S As Bit
'schaltjahrbit

J = 1700 'zum testen im simulator
'J = 2000
'J = 1996

H = J Mod 4

If H = 0 Then                                               'durch 4
teilbar?
H = J Mod 100
S = 1                                                       'Ja dann
schaltjahr
End If

'durch 100 teilbar??
If H = 0 Then                                               'ja dann
H = J Mod 400                                               'durch 400
teilbar
If H = 0 Then
S = 1
Else                                                        'ja dann
schaltjahr
S = 0
End If                                                      'nein dann
nicht
End If

If S = 1 Then Print "Schaltjahr"

print

von Sonic (Gast)


Lesenswert?


von saibot (Gast)


Lesenswert?

steht was drin?

davon mal ab: ich wuerde eine uhr nicht mit uhrenquarz, sondern nach
der danneger-methode (s.o. avr - die genaue sekunde) aufbauen. warum
kann man dort nachlesen. und das bisschen addieren, subtrahieren und
vergleichen bekaeme ich grad noch so selbst hin :)

von saibot (Gast)


Lesenswert?

s/subtrahieren/shiften

von saibot (Gast)


Lesenswert?

nochmal drueber nachgedacht:

addieren, maskieren und vergleichen wuerde ausreichen.
(die 100er-regel wuerde ich mir schenken und schaltjahre mit
1
if (! jahr & 0xfc)
ermitteln.)

aber ich will sowieso keine uhr bauen.

von saibot (Gast)


Lesenswert?

argh, ich meinte natuerlich:
1
if (! jahr & 0x03)

von Sebastian heyn (Gast)


Angehängte Dateien:

Lesenswert?

hab mal schaltjahr und wochentagserkennung gebaut.
ausgabe im simulator (print)

von Sebastian heyn (Gast)


Lesenswert?

ich hab nochn bug gefunden , den ich noch fixe, irgendwie geht jahr 2000
nicht (wenns eigentlich egal wäre)
ich hab schon die uhr drin, sodass das ganze im timerinterrupt laufen
kann. aber wie gesagt jahr 2000 geht irgendwie einen tag falsch.. :-((

von Sonic (Gast)


Lesenswert?

>Alle Jahre, welche durch 4 ohne Rest teilbar sind, sind Schaltjahre.
Alle Jahre, welche durch 100 ohne Rest teilbar sind, sind keine
Schaltjahre.
Alle Jahre, welche durch 400 ohne Rest teilbar sind, sind wiederum
Schaltjahre.<

Das mit den Hunderter-Schaltjahren meinte ich.

von Sebastian Heyn (Gast)


Lesenswert?

ich weiss das 2000 ein schaltjahr ist und das wird auch richtig erkannt.
Sehr suspekt

von Sebastian Heyn (Gast)


Angehängte Dateien:

Lesenswert?

hier mal das file. was da in der hauptschleife steht könnte man dann
einfach im interrupt einmal pro sekunde laufen lassen. die ausgae dann
natürlich auskommentiert. Da ist im mega8 sogar noch soviel platz (und
ich war scho nicht der sparsamste) ein LCD anzusteuern und dater und
evtl ein kleines menu oder so. jedenfalls wird das die grundlage für
meinen modifizieren radiowecker :-))

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.