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?
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
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.
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.
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!
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.
> 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.
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
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.
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.
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.
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...
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
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 :)
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.. :-((
>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.
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 :-))