Hallo! Ich versuche aktuell eine Uhrensteuerung mittels atmega8 zu realisieren. Ziel der Software ist es, aktuell jede Minute den Ausgang 0 (LED), und den Ausgang 1 (Transistor, der die Uhren schaltet) zu aktivieren. Jede zweite Minute sollte das Relais auf Ausgang 2 aktiviert werden, um die Umpolung zu erzielen. Die erste IF Schleife soll einen FF-Modus darstellen, sodass pro Sekunde die Uhren eine Minute vorgestellt werden, die nächste while Schleife ist die "normale Funktion". Das Relais wird 100ms vorher aktiviert, da das Relais langsamer schaltet als der Transistor. Pro Tag weicht das ganze nun um etwa 8 Minuten ab, der ATMega8 wird per internen oszillator betrieben, Ist die Abweichung vom internen Oszillator wirklich so groß? Oder gibt es Softwareseitig eine bessere Möglichkeit dies zu lösen? Danke! Gruß
Benjamin V. schrieb: > Ist die Abweichung vom internen Oszillator wirklich so groß? Genau so ist es.
Bei solchen Fragen, bitte niemals in das Datenblatt schauen. Man könnte aus Versehen eine relevante Information erhalten.
Hilfeeee.... Was spricht gegen einen Uhrenquartz mit 32kHz fuer 30cents, der hat 10ppm/K. Oder allenfalls etwas Genaueres fuer etwas Mehr ?
Benjamin V. schrieb: > IF Schleife http://if-schleife.de/ > Ist die Abweichung vom internen Oszillator wirklich so groß? Ja, und dazu kommt noch, dass die Befehle zwischen den Delays auch noch Zeit brauchen.
Benjamin V. schrieb: > Pro Tag weicht das ganze nun um etwa 8 Minuten ab, 8/(24*60) ~ 0.56 %, ist doch ganz ordentlich für einen unkalibrierten Schwingkreis :-) Siehe http://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC
Benjamin V. schrieb: > Pro Tag weicht das ganze nun um etwa 8 Minuten ab, der ATMega8 wird per > internen oszillator betrieben, Der interne Oszillator ist kalibrierbar. Für eine Uhr ist er trotzdem nicht geeignet.
Zwei wesentliche Gründe für die Ungenauigkeit: Auch wenn sich der interne RC-Oszillator auf weniger als 1% justierenlässt, ist er mindestens um den Faktor 100 zu ungenau für eine Uhr. Die Funktion delay wird durch die andren Programmtätigkeiten in der Länge verfälscht. Wenn z.B. 100ms vorbei sind, kommen anschließend 1 ms oder andernmal 0,5 ms dazu, weil ein Zeiger bewegt werden muss oder dergleichen. Für Uhren erzeugt delay zu ungenaue Zeiten. Für die Uhr muss ein Timer laufen, der unabhängig von der übrigen Programmarbeit exakt alle (z.B.) 10ms im Interrupt ein Flag setzt. Im Hauptprogramm wird dann dieses flag abgefragt, und die anfallenden Arbeiten können dann ausgeführt werden. Sehr gut ist da der thread mit dem Thema "die genaue Zeit". Es wäre auch ganz gut, unter dem Stichwort Uhrenprogramm einige Zeit aufzuwenden. Da gibt es viel zu lesen und zu lernen.
Aber eigentlich. Über einen ganzen Tag gesehen sind 8 Minuten eigentlich gar nicht so viel, wenn man den ganzen QUatsch mit internem Oszillator und delay berücksichtig. Da hätt ich eigentlich mehr erwartet. Respekt.
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.