การแก้ปัญหา RTC DS1307 เดินไม่ตรง

เมื่อตอนที่เรียน ป.ตรี อยู่มีวิชาเกี่ยวกับไมโครคอนโทรลเลอร์ ซึ่งผมจะชอบวิชานี้มาก และจะหาซื้อชุด Kit หนังสือมาอ่าน มาเขียนโปรแกรมเล่น พวก datasheet ไม่ค่อยได้อ่านหรอกครับ บอร์ดเค้าลงอุปกรณ์อะไรมาให้ ก็คิดว่าถูกต้องแล้ว

พอเรียนจบมา มาทำงานจริงต้องออกแบบวงจรที่เกี่ยวกับฐานเวลา เลยใช้เจ้า DS1307 RTC(Real Time Clock) ยอดนิยม ต่อวงจรตามความคุ้นเคยครับ ตามชุด Kit ที่ซื้อมาจากสำนักต่างๆ แล้วก็ดู datasheet แบบผ่านๆ พองานส่งถึงมือลูกค้าก็โดน Complain มาว่าเวลาเดินช้ากว่าปกติเดือนละหลายนาที เลยต้องย้อนกลับมาดูวงจรให้ละเอียด อ่าน datasheet ให้ละเอียดมากขึ้น แล้วก็พบสาเหตุแล้วครับว่าทำไม DS1307 เดินไม่ตรง

ผมคิดว่างานนี้เป็นผลมาจากวงจร Oscillator ซึ่งป้อน clock ให้ DS1307 เลยไปเช็คดูตรง XTAL 32.768 KHz ใน datasheet ไม่ได้บอกให้ต่อ Load C ที่ขาของ XTAL เลย เค้าบอกว่าให้ใช้ XTAL ที่ออกแบบมาสำหรับ Load Capacitance (CL) 12.5pF

———————————————————–

X1, X2?

?? Connections for a standard 32.768kHz quartz crystal. The internal oscillator circuitry is

?

?? Connections for a standard 32.768kHz quartz crystal. The internal oscillator circuitry is

?

อ้างอิงจาก DS1307 datasheet

———————————————————–


รูปวงจรใน datasheet จะเห็นได้ว่าไม่มี C ที่ขา XTAL

ใน datasheet แนะนำมาครับว่าควรต่อตัวถังของ XTAL ลง GND Plane

เป็นความเข้าใจผิดของผมเองที่คิดว่าต้องใส่ C ที่ขาของ XTAL ทีนี้ลองปลดออกแล้วสังเกตุดูภายในระยะเวลา 1 เดือนว่า Error หายไปไหม ปรากฎว่าหายครับ เหลือ Error ประมาณเดือนละไม่ถึงนาที

แถมให้อีกนิดนะครับการเลือกใช้ XTAL ควรจะเลือก XTAL ที่ค่า Load Capacitance (pF) มีค่าเท่ากับ 12.5pF หรือใกล้เคียงมากที่สุด และที่สำคัญคือค่า Frequency Tolerance (ppm) ของ XTAL ตรงนี้ยิ่งน้อยยิ่งดีนะครับ ค่า Error ของ ppm เป็นจำนวนที่ Error เทียบกับล้านส่วน