Uhr mit ATmega8 --> RTC?

Gast #420923
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?
Gast #420924
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
Gast #420925
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.
Gast #420926
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.
Gast #420933
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.
#420935
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.
#420940
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.
Gast #420941
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.
Gast #420942
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.
Gast #420945
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...
Gast #420946
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
Gast #420948
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 :)
Gast #420950
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.
Gast #420953
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.. :-((
Gast #420954
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.
Gast #420956
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 :-))
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren