Wie soll ich meine Kristallfrequenz auswählen?

8

Ich habe Fragen wie diese gesehen , die über die Auswahl eines Kristalls für UART sprechen, und ich habe Fragen wie diese gesehen , die 32,768 kHz für RTC erwähnen. Aber wie entscheide ich mich für den richtigen Kristall für meine Anwendung?

Zu diesem Zeitpunkt bin ich mir nicht sicher, welches UART-Baud ich verwenden werde, aber es wird eines der Standard-Bauds sein. Es wäre schön, eine halbgenaue Zeit in Millisekunden zu erhalten, aber keine Voraussetzung. Intuitiv denke ich, dass die Verwendung des schnellsten Kristalls, den mein Mikro verwenden kann, mir die größte Flexibilität bietet. Aber fehlt mir etwas? Gibt es eine "Allzweck" -Frequenz, die von Menschen verwendet wird?

Kellenjb
quelle
mit großer Sorgfalt ... :)
vicatcu

Antworten:

11

Ehrlich gesagt könnte ich Stunden damit verbringen, die verschiedenen Frequenzen zu beschreiben und warum man sie benutzt, aber jemand hat sie bereits!

http://en.wikipedia.org/wiki/Crystal_oscillator_frequitudes

Diese Tabelle enthält eine UART-Spalte, in der angegeben ist, in welche UART-Frequenzen sie gut unterteilt ist.

Außerdem erfahren Sie, wann eine Frequenz ein Standardkristall für ein bestimmtes Kommunikationssystem ist.

Kortuk
quelle
Wäre es nicht schön, wenn es eine schöne Kristallfrequenz gäbe, die jeder benutzt?
Kellenjb
1
Wäre es nicht schön, wenn jeder Teil der Welt die gleichen Steckdosen in Gebäuden hätte, würde das Leben weitergehen, es sei denn, Sie verwechseln die Steckdosen.
Kortuk
2

Intuitiv würde ich den langsamsten Kristall verwenden, der für meine Anwendung funktioniert. Sie erhalten weniger Taktdrift und Schaltungsspuren verhalten sich bei niedrigeren Frequenzen im Allgemeinen besser.

Abgesehen davon können Sie, wenn Sie alle paar Millisekunden etwas tun möchten, Folgendes tun:

Fosc = 25MHz. 
T=1/Fosc = 40ns; 
1ms/40ns = 25000 cycles/ms;
0xFFFF-25000=0x9E57;

on overflow TMR1:  //assuming TMR1 is 16 bit and counts every clock cycle
doEveryMillisecond;
incrementMillisecondTimer;
TMR1 = 0x9E57;

Sie sind sich nicht sicher, welches Mikro Sie verwenden, aber MPLAB verfügt über Dienstprogramme, mit denen Sie festlegen können, wie lange Ereignisse dauern. Daher können Sie damit den Rücksetzwert von TMR1 anpassen, um Overhead und / oder eine ungenaue Uhr zu verarbeiten. Kristalle können so unterschiedlich sein, dass dies in einer Produktionsumgebung nicht möglich ist ... nicht sicher.

Isaac
quelle
Wenn Sie als Erweiterung nicht wissen, welches XTAL in Ihrem Widget verwendet werden soll, wählen Sie keines aus. Lassen Sie einfach den PCB-Spot unbewohnt und warten Sie, bis Sie die Stabilität (Kalibrierung des internen RC-Oszillators zum Beispiel bei der gewünschten Baudrate nicht gut genug) oder Geschwindigkeit benötigen. Repariere nicht, was nicht kaputt ist!
Tyblu
Einverstanden - Wenn Ihre MCU über einen internen Oszillator verfügt, versuchen Sie diesen zuerst zu verwenden. Stellen Sie sicher, dass die Konfigurationswörter / -sicherungen richtig eingestellt sind. Sie sollten auch in Betracht ziehen, eine Buchse auf Ihrer Leiterplatte zu verwenden, damit Sie sich nicht mit dem Löten / Entlöten von Kristallen befassen müssen. Der Bonus ist, dass Sie sie einfach austauschen können.
Isaac
1
@isaac, ein Kristall ist eine der größten EMI-Quellen auf einer Platine. Er sollte sich so nahe wie möglich an der Erdungsebene befinden, nicht durch Anschlüsse gehen und Abschirmungsspuren aufweisen.
Kortuk
@isaac, auch wenn Sie 10ppm Taktdrift haben, spielt es keine Rolle, welche Kristallgeschwindigkeit Sie haben. Sie alle teilen sich auf den gleichen potenziellen Fehler auf, da ein Takt mit höherer Geschwindigkeit eine größere Teilung haben muss. Ein langsamerer Kristall bedeutet eine schlechtere Auflösung bei anderen Dingen.
Kortuk
@isaac Ich hatte noch nie Probleme mit 40-MHz-Kristallen. Ich klebe sie einfach so nah wie möglich an das Mikro. und @ kortuk Antwort ist der gleiche Grund, warum ich nicht dachte, dass Zeitverschiebung ein Problem war. Ich dachte, höhere Taktraten würden es mir ermöglichen, genau 1 ms näher zu kommen.
Kellenjb