2016-04-09 4 views
0

In meinem Projekt brauche ich die höchsten verfügbaren UART-Baudraten zwischen Atmega328p und BTM-222, also muss ich 18,432,000 Mhz Kristall verwenden, um 460,8 kbps Übertragung ohne Fehler zu erreichen.Atmega höchste BAUDRATE vs Zeitmessung Genauigkeit

Aber gleichzeitig brauche ich eine hohe Genauigkeit Zeitmessung. Zuvor, als ich 16Mhz Kristall verwendete, habe ich diese Methode verwendet: Timer0 mit 64/Prescaler. Also brauchte es 4us, um Zählerregister zu verzerren.

(1/16000000) * 64 = 4US

4US war meine Maßnahme Auflösung Überlaufzählung: Zählerüberlauf jedes 1024us

tritt 4US * 256 = 1024us

dann Zeit, erhalten in skalierten uns gibt es Gleichung:

Zeit (uint32) = current_counter * 4 + overvlow_counter * 1024

Alles ist einfach, weil Multiplizieren von x4 und x1024 Bitverschiebungen sind. Ich verwende lange Ganzzahl, so lange ich messen kann ist

2^32 * 1ms = 71 Minuten.

Ausgezeichnet!

Dann, wenn ich 18432000 MHz Quarz verwende, gibt es (1/18432000) * 64 = 3,47 (2) so kann es nicht berechnet werden mit meinem einfach vorherigen Code.

Vielleicht haben Sie einige Ideen, was kann ich tun? Ich habe einen: Verwenden Sie 1MHz Timer0 externe Clock-Quelle aus dem Kristall. Meine Frage ist: Wie man 1MHz Kristall an T0-Stift anschließt und Uhrquelle für Timer0 zur Verfügung stellt?

Antwort

0

Es gibt ein paar Begriffe, die Sie scheinbar verwirrt haben: Genauigkeit, Präzision und Komfort.

Ihre Frage fragt, wie Sie Ihren Code bequem machen und einfache Bit-Shifts ermöglichen.

Aber Sie opfern Präzision, indem Sie die Bit-Verschiebungen verwenden, um die Intervalle größer zu machen.

Wenn Sie wirklich Genauigkeit wollen, wie Sie im Titel auf Ihre Frage sagen, dann sollten Sie den genauesten Kristall verwenden, der die 18.432 MHz zu sein scheint, und die Arithmetik in Ihrem Code ausführen. Wenn Sie mehr Präzision wünschen, verwenden Sie mehr Variablen, um die Timing-Ergebnisse zu speichern. Wenn Sie Genauigkeit wünschen, richten Sie die Uhr so ​​ein, dass sie bis 18432 zählt, bevor Sie einen Millisekunden-Zähler inkrementieren.

Die schlechteste Lösung besteht darin, einen zusätzlichen Kristall anzuschließen. Es kostet mehr und ist weniger präzise und genau.

Verwandte Themen