Forum: Mikrocontroller und Digitale Elektronik Überlegungen zur Takterzeugung beim PIC16F15356


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Der müde Joe (Gast)


Lesenswert?

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!

von H. H. (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von Franko P. (sgssn)


Lesenswert?

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ß

von Wolfgang W. (Gast)


Lesenswert?

> 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.

von PIClig (Gast)


Lesenswert?

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.

von Der Opa aus der Muppet Show (Gast)


Lesenswert?

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.

von Jens P. (picler)


Lesenswert?

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.

von Der müde Joe (Gast)


Lesenswert?

Ja, das mache ich dann so. Ich nehme einen 8.192MHz-Quarz mit wenig ppm.
Vielen Dank allen zusammen! :-)

von Peter D. (peda)


Lesenswert?

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.

von Dietrich L. (dietrichl)


Lesenswert?

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
Noch kein Account? Hier anmelden.