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.
> Die Dinger können mächtig ungenau sein!
Quark, die Dinger sind weltweit milliardenfach im Einsatz!
Jede Quarzuhr wird irgendwann ungenau, wenn man den Quarz nicht unter definierten Temperaturen betreibt.
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!
Hallo, schau Dir mal in der "Bascom-AVR Help" den Befehl CONFIG CLOCK an, da ist beschrieben wie es mit Bascom geht.
www.black-strom.de.vu unter AVR-Projekte. Ist zwar ein 2313, der BASIC Code kann aber fast 1 zu 1 übernommen werden
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.
Hab dir mal die von ATMEL verfasste RTC (mit Datum und ext. Quarz) drangehängt.
> 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.
nicht bascom, aber dennoch extrem lesenswert: http://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC
Für die Sonderregelung der Hunderter gilt: durch 100 UND durch 400 Teilbar? (ohner Rest) und durch 4 teilbar? Dann Schaltjahr.
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.
achja saibot oder tobias, was fürn orgineller Einfall mit deinem Namen, LOL.
In der K&R-C-Bibel gibt es sogar ein Beispielprogramm dazu... Allerdings in C. In Bascom gibt es die Funktion ja schon vorgefertigt...
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 :)
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.
hab mal schaltjahr und wochentagserkennung gebaut. ausgabe im simulator (print)
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.
ich weiss das 2000 ein schaltjahr ist und das wird auch richtig erkannt. Sehr suspekt
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.