Sehr genauen Zeittakt erstellen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Sehr genauen Zeittakt erstellen

      Mal ein Beispiel Code wie eine genaue Zeitbasis erstellt werden kann die aus der Headerangabe berechnet wird. Soll auch gleich der Hinweis sein warum Michael und andere immer wieder darauf hinweisen diese Einstellungen mit anzugeben.

      Beispiel siehe im Code wie...
      $regfile = "m644pdef.dat"
      $crystal = 16000000
      $baud = 19200
      $hwstack = 80
      $swstack = 60
      $framesize = 60
      ......

      Für die genaue Zeittaktberechnung ist die Angabe $crystal = x entscheitend.
      Ja ist doch hilfreich wenn der Controller den kleinstmöglichen Zeittakt intern selber berechnet. Die Timer- Berechnung sind oft für Einsteiger etwas schwer nachvollziehbar.
      Mit diesem Code macht es die „Initialisierungdes CTC-Timers“ automatisch.
      Wie im Code zu sehn ist es eine sehr genaue Stoppuhr (einfach nur ein Zähler) Start, Stopp und Reset und natürlich mit LCD- Anzeigeanpassung.
      Nun sollte es doch ein leichtes sein diese Zeitbasis als Uhr zu nutzen oder ein Ereigniscounter zu erstellen (war vor kurzen eine Anfrage von Tim). Stichwort für Counter: Zeitvorgabe erstellen und in der Interruptroutine Incr durch Decr ersetzen und Rücksetzung negieren.
      Wie im Code schon bemerkt benötigst man nur ein Taster mehr um 248 Einstellungen zusätzlich zu selektieren. Oder diedrei Tasten nur für Uhreinstellung nutzen(T1= Select, T2 = Plus und T4 = Minus(wie in meinem Code „Kalenderuhr mit persönlichen Tag- Stundeninfos wie (Geburtstage, Feierlichkeiten usw. “ zu sehen ist.

      P.S. Die Software für „Kalenderuhr“ ist leider nur bis zum Jahr 2118 ausgelegt. Sollte es danach Schwierigkeiten geben. Bitte nicht mehr nachfragen. Bin in Goto.

      Mit freundlichen Grüßen
      Uni-Zeitgeber-F0Z.bas

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Michael ()

    • Ich denke, ein Uhrenquarz ist nicht genauer. Der hat nur den Vorteil, dass man mit einfachen Teilern auf 1 Sekunde kommt.
      Ich persönlich nehme meist einen Quarz, einfach weil ich eine höhere Taktfrequenz haben möchte. Nachteile hatte ich dadurch noch nie.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Mal ein erster grober Ansatz:
      Für normale kleine Sachen (Thermometer, Pieper, Ampel, Eieruhr, Lichtschranke o.ä. reicht der interne Oszillator.
      Wenn UART-Übertragungen benutzt werden: Baudratenquarz.
      Für Sachen, die einen schnellen Takt brauchen wie DMX512 oder die RGB-LED Streifen ein 16 MHz Quarz.
      Für Uhren: interner Oszillator mit DCF77 oder GPS.
      Für Uhren in abgelegenen Gebieten (Keller,...), mit Logfunktion oder die sich zwischendurch schlafen legen mit internem Oszillator plus DS3231-Realtime Clock.
    • tschoeatsch schrieb:

      ein Uhrenquarz ist nicht genauer
      ein Uhrenquarz ist mit meist +/- 20ppm angegeben
      Standardquarze z.B. 16MHz HC49 haben etwa +/- 30 ppm
      Quarzoszillatoren sind entgegen der Erwartung nicht wirklich besser.
      Hier im unteren Teil der Seite gibt es eine schöne Tabelle dazu:
      sprut.de/electronic/mess/frequenz.htm

      Der Oszillator des DS3231 hat meines Wissens 5ppm.


      Hier hatte ich mal einen Arduino Resonator untersucht:

      Arduino Nano V3 Taktfrequenz
    • Die nennt man dann Unruh ;)
      Auch wenn die vermutlich keine Heizung drinn haben, so werden sie abgeglichene Quarze (die in den alten Gehäusen konnte man nachschleifen um die gewünschte Frequenz zu haben)
      evt noch Kondensatoren deren Temperaturdrift die des Quarzes kompensieren.
      (fast)Alles ist möglich immer nur eine Frage der Aufwandes.
    • Pluto25 schrieb:

      Wie verlässlich /temperaturabhangig sind Quarze und deren Kondensatoren? Dann gibt es noch die Möglichkeit einen Uhrenquartz anzuschließen. Wäre das sinnvoll? Wie handhabt Ihr das Timing?
      Verbaut Ihr generell Quarze? Außer bei einer Uhr schien mir das noch nirgendwo nötig.


      Nun noch meine bescheidenen Erfahrungen mit Systemtaktgeber.

      Erstens die geforderte Rechenleistung ist entscheitend. Also niemals pauschal anzugeben wenn nicht das gesamte Projekt bekannt ist. Hier liegt es oftmals an der Software für Optimierung.

      Intern ist meist bei 8MHz Schluss wenn im Fuse noch der Teiler aktiviert ist sind es 1MHz.

      Warum eine Uhr wie von @stefanhamburg schon erwähnt, z.B. den Controller mit 16 MHz takten und dann mit Aufwand versuchen Energie zu sparen. Mit 1MHz Systemtakt spart man schon viel Energie. In den meisten Fällen reicht 1MHz aus und für eine normale Uhr auf jeden Fall.

      Die Realtimer Clock- Module sind oft nicht genauer, haben aber schon sehr viel „Komfort“ integriert. Es gib natürlich Digitaluhren die sehr genau sind, da ist aber jedes Bauteil abgeglichen und nur jede 100 000 kann teuer verkauft werden, der Rest geht zum Discounter.

      Persönlich bin ich der Meinung das Phasenrauschen des internen Oszillators ist höher als mit optimalen Anschluss eines Quarz. Nun beachtet noch der Quarz ist sehr na am µC also im gleichem Temperaturbereich. Somit könnte sich der Temperaturtrift sogar ausgleichen.

      Die Frage auf Genauigkeit mit Quarz, kann ich nur aus meinen Erfahrungen(viele Tests) vermitteln.

      Die +/- ppm Angaben beziehen sich auf eine Umgebungstemperatur von 25 C heißt aber nicht bei 10 C zu wenig und bei 40 C zu viel. Erstaunlich ist, der „Fehler“ ist sehr konstant im Bereich von 10 bis 40 C. Und wenn diese Abweichung(Produktbedingt) bekannt, ist es doch bei einer Uhr sehr einfach diese Differenz zyklisch auszugleichen.

      Die Hauptanwendungen ist aber meist eine kleine Zeitbasis(ein Sekundenfenster mit Systemtakt zu erzeugen ist weit verbreitet aber da wird wohl ein Nanosekundenfehler pro Zyklus nicht zur Katastrophe führen) . Die Genauigkeit bestimmt der kleinstmögliche auswertbare Takt während der Laufzeit. Soll heißen was in der Do-Loop abgearbeitet wird hat keinen Einfluss auf Taktgenauigkeit.

      Dies war die Idee für Codeschnipsel.
      Mit freundlichen Grüßen
    • Wie genau soll den der Takt sein ?? ich hatte mit eine Quarzoszillator von 8 Mhz einen Takt mit einer
      Abweichung von 3 Sekunden in 24 Stunden gehabt für mein damaliges Projekt war es egal.
      Hier ein 1Hz Takt Beispiel.


      BASCOM-Quellcode

      1. $regfile = "m16def.dat"
      2. $crystal = 8000000
      3. Config Timer1 = Timer, Prescale = 256
      4. Config Pinc.2 = Output
      5. Led3 Alias Portc.2
      6. On Timer1 Timer_irq
      7. Const Timervorgabe = 34286
      8. Enable Timer1
      9. Enable Interrupts
      10. Do
      11. Loop
      12. Timer_irq:
      13. Timer1 = Timervorgabe
      14. Toggle Led3
      15. Return
      Alles anzeigen