Hi Fourmsgemeinde, ich habe mal ne simple Frage die ich mir noch nicht ganz beantowrtetn konnte. Ich habe mir bei Reichelt mal nen Quarz mit oben genannter Frequenz 6,553600MHz bestellt weil ich dachte das ich damit super ne Uhr basteln könnte weil der Timer1 ja bis 65535 zählt. Aber da ist auch das Problem. Der Quarz hat ne kleine Abweichung gegenüber dem Maximalwert von Timer1. Wieso? Braucht das Interrupt asulösen auch noch ein paar Takte so dass sich das ausgleicht oder was? MfG Robin T.
Die Quarzfrequenz ist für eine genaue Sekunde völlig irrelevant => Codesammlung, dort findest du eine Routine.
Aber es kann die Arbeit erheblich erleichtern wenn die Quarzfrequenz stimmt(weniger Rechnen). Oder nicht?
Robin Tönniges wrote: > [...] Frequenz > 6,553600MHz bestellt weil ich dachte das ich damit super ne Uhr basteln > könnte weil der Timer1 ja bis 65535 zählt. Das Zifferblatt der guten alten Zeigerur geht ja auch nur bis 59, obwohl es 60Sek./Min. sind... Von Overflow zu Overflow macht der Timer1 65536 Zählvorgänge (die 0 zählt mit...), also scheint das mit Deinem Vorhaben zusammenzupassen. Viele Grüße Martin
Und außerdem muß beim Einsatz des Vorteilers eine gerade Zahl herauskommen, Dezimalbrüche lassen sich so schlecht ins Timerregister reinschreiben. 6.5536MHz / 1024 ergibt 6400. Timer1 in den CTC-Modus versetzen, 6400 als Vergleichswert setzen, das Resultat ist exakt ein Interrupt pro Sekunde. (Dies jetzt in der Annahme, das der Controller ein AVR ist.) Gruß Jadeclaw.
Ok. Danke. Werd die Uhr mal über 1 oder 2 Tage beobachten und gucken ob sie falsch geht.
Hallo, übliche Quarze haben Abweichungen von 50ppm, das können also 4s am Tag sein. Die Quarzfrequenz ist da am AVR reltiv egal, die meisten Werte lassen sich ganzzahlig auf eine Sekunde teilen. Den Quarz auf die genaue Sollfrequenz zu bekommen, ist das Problem. Einen der Kondensatoren durch einen Trimmer 10/40p ersetzen und abgleichen... Oder, wenn möglich, die Uhr eben öfter per DCF77 stellen. Gruß aus Berlin Michael
Mmmh. Oder ich muss doch die Variante aus der Codesammlung nehmen. Obwohl ich da noch nicht ganz durchblicke.
>Oder eine externe RTC verwenden.
Womöglich noch mit 32.768kHz Quarz...der hat teilweise noch schlechtere
Eigenschaften wie einer höherer Frequenz.
Ich habe irgendwie das Gefühl, dass der Beitrag von Martin L. noch nicht richtig verstanden wurde. 6,5536 MHz ist eine ideale Frequenz für einen Uhrenquarz: 6553600 = 100 * 2**16 Wenn man die Frequenz durch 2**16 teilt, erhält man 100 Hz, also exakt die Frequenz, die für eine Stoppuhr benötigt wird. Ein Frequenzteiler durch 2**16 lässt sich einfach mit 16 hintereinandergeschalteten Flipflops aufbauen. Genauso gut kann man aber einen 16-Bit-Timer/ Counter im AVR nehmen. Dazu lässt man ihn im Normal-Mode (Mode 0) laufen und beim Overflow einen Interrupt auslösen. Im Mode 0 zählt er von 0 bis 65535, d.h. nach 65536 Taktzyklen steht er wieder auf 0. Das ist genau das, was du möchtest. Evtl. Ungenauigkeiten haben ihre Ursache in Bauteiltoleranzen und nicht exakt abgestimmten Lastkapazitäten, aber garantiert nicht in der Frequenzteilung. 32768 Hz ist ebenfalls eine "günstige" Frequenz für Uhrenquarze, da man mit 15-Flipflops bzw. einem 15-Bit-Zähler einen Sekundentakt gewinnen kann. Für Stoppuhren ist diese Frequenz allerdings nicht optimal, da weder 10 noch 100 ein Teiler von 32768 sind. Die Nachkommastellen bei Armbanduhren laufen deswegen immer etwas "unrund".
Robin Tönniges wrote: > Ich habe mir bei Reichelt mal nen Quarz mit oben genannter Frequenz > 6,553600MHz bestellt weil ich dachte das ich damit super ne Uhr basteln > könnte weil der Timer1 ja bis 65535 zählt. Aber da ist auch das Problem. > Der Quarz hat ne kleine Abweichung gegenüber dem Maximalwert von Timer1. > Wieso? Weil kein Bauteil unendlich genau ist? Abweichung duerften etwa 50ppm sein. Dann ist auch die Frage, wie genau Dein Messgeraet ueberhaupt ist. Wenn wir davon ausegehen dass der Messwert korrekt ist kommst Du auf eine Abweichung von 0,0001MHz, also 100Hz, das ist nicht gerade ein Traumwert aber normal. Du kannst z.B. durch die gezielte Verwendung der Lastkapazitaeten die Genauigkeit noch etwas erhoehen, z.B. indem Du einen Trim-C verwendest. Rechnest Du aber einfach mit der "falschen" Frequenz kannst den Fehler auch per Software wieder ausgleichen, indem Du einfach F_CPU auf den genauen (also den fehlerhaften) Wert setzt. Gruss, Michael
Robin Tönniges wrote: > Aber es kann die Arbeit erheblich erleichtern wenn die Quarzfrequenz > stimmt(weniger Rechnen). > Oder nicht? Nö. Definitiv nicht erheblich. Weder für den Programmierer, noch den Compiler (Präprozessor), noch für den MC. Ein Programmierer mit Angst vor leichtester Mathematik ist wie ein Maurer mit Zementallergie. Beide sollten schnellstens den Beruf wechseln. Peter
dachs wrote: > @Jadeclaw Dinosaur > > falsch siehe Beitrag "Die genaue Sekunde / RTC" Ja und nein. Hat man gerade etwas passendes da, oder muß man sowieso kaufen, kann man sich die Teiler passend setzen und gut is'. PeDas Code hat natürlich den Vorteil, daß man nicht nur jeden Quarz nehmen kann, sondern auch keinen Trimmkondensator mehr braucht, da die Abweichung per Softwareberechnung korrigiert wird. Geht nur leider nicht für Frequenzzähler, da muß jeder Meßzyklus stimmen. Nun habe ich noch das Glück, 200 Quarze mit 3.2768 MHz hier zu haben (eBay läßt grüßen), da findet sich immer einer, der genau paßt. Gruß Jadeclaw.
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.