Hallo, zusammen! Ich bin derzeit über einigen Überlegungen für eine Digitaluhr mit Temperaturanzeige und optionalem DCF77-Zeitzeichen-Empfang. Verwenden möchte ich den PIC16F15356 im DIP28. Ich sehe für die Takterzeugung diese Möglichkeiten: - 32.768 kHz-Uhrenquarz am EXTOSC-Eingang mit PLLx4, 131 kHz Takt für das Programm. - 32.768 kHz-Uhrenquarz am SOSC-Eingang und interner Takt HFINTOSC mit z. B. 16 MHz. - 16.384 MHz-Quarz am EXTOSC-Eingang und intern herunterteilen auf 1 Hz. Von der Genauigkeit her, wären diese beiden unteren Varianten gleichwertig? Mein Ziel ist es, eine Ganggenauigkeit von sagen wir +/- 1 Sekunde innerhalb von drei Tagen ohne DCF77-Signal zu erreichen. Dann habe ich noch eine Frage zum EXTOSC und SOSC. Mir scheint, ich kann die PLL nicht dazu veranlassen, aus der Frequenz eines Uhrenquarzes mit 32.768 kHz eine höhere Frequenz mit z. B. 12 oder 16 MHz zu erzeugen? Weil die PLL wohl nur bis zum Faktor 4 geht. Und der SOSC-Eingang ist gar nicht an einer PLL angeschlossen. Die erste Variante, das Programm mit 131 kHz Takt laufen zu lassen, wäre das zu langsam? Ich möchte ohne Assembler auskommen. Vielen Dank!
Der müde Joe schrieb: > Mein Ziel ist es, eine Ganggenauigkeit von sagen wir +/- 1 Sekunde > innerhalb von drei Tagen ohne DCF77-Signal zu erreichen. Das sind +/-4ppm! Nimm einen einstellbaren TCXO.
Bei einem uC spielt die Taktrate zur Messung von Sekunden keine Rolle. Mache dir einen Takt von grob z.b. 10ms oder 100ms (z.b. 87,9 ms) und summiere mit Rest. Nach 12 takten hier z.b. 1xxx man, Sekunden++ und es bleiben xxx.
Die erste variante mit dem 32kHz-Takt ist energiesparend, denn der PIC läuft mit Takt/4. Die 2. Variante ist doch nicht schlecht. Und wenn der Uhrentakt genau ist und bei allen 3 Varianten gleich, wüsste ich nicht, weshalb eine davon ungenauer sein soll. Als 4. Variante bietet sich noch ein RTC an, der über I2C mit deinem uC verbunden ist. Gruß
> Dann habe ich noch eine Frage zum EXTOSC und SOSC. Mir scheint, ich kann > die PLL nicht dazu veranlassen, aus der Frequenz eines Uhrenquarzes mit > 32.768 kHz eine höhere Frequenz mit z. B. 12 oder 16 MHz zu erzeugen? > Weil die PLL wohl nur bis zum Faktor 4 geht. Und der SOSC-Eingang ist > gar nicht an einer PLL angeschlossen. Der Input Frequency Range für die PLL ist 4 bis 8 MHz.
Aus einem Uhrenquarz koennen nur relativ wenige Controller einen Controllertakt von mehreren MHz per PLL erzeugen. Z.B. LPC81X oder eCog1x. Lass den Uhrenquarz doch einfach weg und nimm gleich einen 4.096 oder 8.192 MHz Quarz. Den kannst du dann mit dem Timer0 und dem Prescaler in eine glatte Zeit herunterdividieren. Solche Quarze gelten auch als besonders frequenzstabil.
Wenn das Gerät mit einer Knopfzelle jahrelang laufen soll, ist ein Uhrenquarz schon sinnvoll. Uhrenquarz, Teiler und 1 Interrupt pro Sekunde brauchen weniger Strom als MHz Quarz und Timer. Brauchst dein Programm überhaupt einen genauen Takt? Du könntest für System und Pheripheral Clock auch den internen Oszillator unabhängig vom Uhrenquarz nutzen.
Der müde Joe schrieb: > - 32.768 kHz-Uhrenquarz am EXTOSC-Eingang mit PLLx4, 131 kHz Takt für > das Programm. Das ist das Programm zu wenig. Für das blinken einer LED würde es reichen, nicht aber für den DCF-Empfang. PIClig schrieb: > Lass den Uhrenquarz doch einfach weg und nimm gleich einen > 4.096 oder 8.192 MHz Quarz. Den kannst du dann mit dem > Timer0 und dem Prescaler in eine glatte Zeit herunterdividieren. Genau so mache ich das auch. Nimm einen 8.192 MHz Quarz, den Prescaler auf 8 und der TMR0 erzeugt dir schöne Interrupts im 10ms-Abstand. Damit kannst du die digitale Zeit hochzählen und die Impulse vom DCF einlesen und auswerten. Falls du doch mehr Power brauchst, kannst du ja die PLL noch nutzen. Die Frequenz ist zwar 2% über der Spec, doch es sollte funktionieren.
Ja, das mache ich dann so. Ich nehme einen 8.192MHz-Quarz mit wenig ppm. Vielen Dank allen zusammen! :-)
Der müde Joe schrieb: > - 32.768 kHz-Uhrenquarz am SOSC-Eingang und interner Takt HFINTOSC mit > z. B. 16 MHz. Das würde ich nehmen. Man hat Rechenpower, wenn man es braucht und zwischendurch kann man die 16MHz doch einfach anhalten. Jens P. schrieb: > Das ist das Programm zu wenig. Für das blinken einer LED würde es > reichen, nicht aber für den DCF-Empfang. Das ist übertrieben, DCF-77 kann man bequem bei 32kHz CPU-Takt dekodieren und auch Weckzeiten vergleichen. Wenn man allerdings LED-Anzeigen flackerfrei multiplexen und mit PWM die Helligkeit einstellen will, dann wirds eng bei 32kHz.
Der müde Joe schrieb: > Ich nehme einen 8.192MHz-Quarz mit wenig ppm. Beachte, dass die Quarzgenauigkeit nicht alles ist. Auch die Oszillatorschaltung mischt da mit. Wenn du wirklich 1 Sekunde in 3 Tagen haben willst... H. H. schrieb: > Das sind +/-4ppm! ... brauchst du einen genaueren externen Taktgenerator.
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.