หากคุณอยู่ในระยะ 1% คุณควรจะยอมรับ
สมมติว่า UART ของคุณใช้นาฬิกาสุ่มตัวอย่างขนาด 16x ตัวอย่างเช่นคุณสามารถตั้งค่าเป็น 1,843,200 Hz เป็น 16x สำหรับ oversample 115,200 bps (การสุ่มตัวอย่างแบบนี้ค่อนข้างธรรมดา) สิ่งนี้ทำให้ UART นับ 8 โอเวอร์คล็อกจากขอบตกของบิตเริ่มต้นดังนั้นมันสามารถค้นหาตำแหน่งกึ่งกลางของเซลล์บิตภายใน +/- หนึ่งรอบเวลาของโอเวอร์โอเวอร์หลังจาก ซึ่งจะนับปิด 16 ช่วงเวลาของการทำงานล่วงเวลาเพื่อกำหนดเวลาที่จะสุ่มตัวอย่างข้อมูล
หากคุณคิดว่ามันสามารถกดที่กึ่งกลางของบิตเริ่มต้นจากนั้นเพื่อเก็บตัวอย่างข้อมูลอนุกรมในเซลล์บิตที่ถูกต้องใน 8 บิตบิตความถี่นาฬิกาจะต้องอยู่ระหว่าง (8-0.5) / 8 และ (8 + 0.5 ) / 8 หรือ +/- 6.25% ของอัตราบิตที่ต้องการ การโอเวอร์คล็อกที่สูงขึ้นเข้าใกล้กับสภาพที่เหมาะสมที่สุดของการกดปุ่มตรงกลางของบิตเริ่มต้น แต่ปกติแล้ว 8x หรือ 16x นั้นใกล้พอที่คุณสามารถสันนิษฐานได้ว่า 5% ไม่ตรงกัน
อย่างไรก็ตามคุณไม่สามารถวางใจได้ว่าอีกด้านหนึ่งจะมีความถี่สมบูรณ์แบบ หากคุณเชื่อมต่ออุปกรณ์ที่รวดเร็ว 4% กับอุปกรณ์ที่ช้า 4% คุณจะมีปัญหา ฉันพบกรณีอย่างน้อยหนึ่งกรณีที่พีซีทำงานช้าและอุปกรณ์เร็วเล็กน้อยและทั้งสองสามารถสื่อสารกันได้เล็กน้อยแม้ว่าอุปกรณ์เดียวกันนั้นใช้ได้กับพีซีเครื่องอื่นและพีซีก็ใช้ได้ดี อุปกรณ์ (กำหนดขอบเขตเหล่านี้ประมาณ 112kbps และ 119kbps) ด้วยเหตุนี้จึงเป็นเรื่องดีที่จะพยายามใช้ความถี่เล็กน้อยให้ใกล้เคียงที่สุด ฉันไม่เคยเห็นอะไรเลยภายใน 2% ของผู้มีปัญหา
สิ่งที่ต้องทำตามปกติคือใช้อัตรานาฬิกาหลักที่ให้อัตราการสุ่มตัวอย่างเกินจำนวน UART จำนวนเต็มคูณกับอัตรา baud ตัวอย่างเช่นหากคุณต้องการให้ CPU ทำงานที่ประมาณ 8MHz คุณอาจใช้ออสซิลเลเตอร์ 7.3728MHz ซึ่งสามารถหารด้วย 4 เพื่อรับ 1.8432MHz ซึ่งเกิดขึ้นเป็น 16 คูณ 115200