www.mikrocontroller.net

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


Autor: Dieter Harms (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Aufreger deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Dinger können mächtig ungenau sein!

Quark, die Dinger sind weltweit milliardenfach im Einsatz!

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon richtig, und milliardenfach ungenau!

Autor: Aufreger deluxe (Gast)
Datum:

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

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jürgen C (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Autor: The Slow (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
www.black-strom.de.vu

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

Autor: Dieter Harms (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sonic (Gast)
Datum:
Angehängte Dateien:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: saibot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nicht bascom, aber dennoch extrem lesenswert:
http://www.mikrocontroller.net/articles/AVR_-_Die_...

Autor: Sonic (Gast)
Datum:

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

Autor: saibot (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: saibot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ps: richtig kompliziert wird das hier:
http://de.wikipedia.org/wiki/Schaltsekunde

Autor: Christian Schoch (kriki)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: saibot (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: pete nerlinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: pete nerlinger (Gast)
Datum:

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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sebastian heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sebastian heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: saibot (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: saibot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
s/subtrahieren/shiften

Autor: saibot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nochmal drueber nachgedacht:

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

aber ich will sowieso keine uhr bauen.

Autor: saibot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
argh, ich meinte natuerlich:
if (! jahr & 0x03)

Autor: Sebastian heyn (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hab mal schaltjahr und wochentagserkennung gebaut.
ausgabe im simulator (print)

Autor: Sebastian heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.. :-((

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich weiss das 2000 ein schaltjahr ist und das wird auch richtig erkannt.
Sehr suspekt

Autor: Sebastian Heyn (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 :-))

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.