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?