นาฬิกา DotMatrix

เมื่อประมาณ 2 ปีที่ผ่านมา (ปี 2005) จะเห็นแผง DotMatrix ขายอยู่เกลื่อนบ้านหม้อสนนราคาตั้งแต่ 150 บาทจนถึง 400 บาท แล้วแต่ใครจะโชคดีเจอราคาถูก ครั้งแรกผมเห็นว่ามันน่าสนใจดีมี driver มาให้เรียบร้อยแล้ว เพียงต่อเข้าไมโครคอนโทรลเลอร์แล้วเขียนโปรแกรมก็ใช้ได้

พอซื้อกลับมาบ้านก็พลิกดูหารายละเอียดว่าจะต่อตรงไหนยังไง เห็น screen ไว้ที่ PCB ว่า ALPHA DEVICE CO.,LTD AD-501-B ลองหาข้อมูลไอซีตัวที่เป็น driver เบอร์ LC7932M

รูปที่ 1 ตำแหน่งขา LC7932

download datasheet LC7932

จากนั้นก็นั่งไล่ขาเอาว่าขาไหนไฟเลี้ยง ขาไหนจ่ายไฟ

รูปที่ 2 ตำแหน่งขาของบอร์ด DotMatrix

ตอนแรกก็เอามาต่อเล่นกับบอร์ดตัวอื่นไปก่อน ทำไปทำมาชักสนุกเลยทำ PCB ขึ้นมาเอง เอามาใส่กล่องให้มันสวย

รูปที่ 3 ประกอบลงกล่อง

รูปที่ 4 วงจร (คลิกเพื่อดูภาพขยาย)

หลักการสแกน Dotmatrix

รูปที่ 6 หลักการสแกน

อุปกรณ์แสดงผลพวก LED Dot Matrix เป็นอุปกรณ์แสดงผลที่ประกอบด้วย LED เอามาเรียงต่อกัน ถ้าเกิดทุกดวงติดพร้อมกันคงจะกินไฟมาก แล้วก็ภาค drive LED ก็จะมีขนาดใหญ่ แล้วก็จะสิ้นเปลืองมาก ทีนี้ก็เค้าเลยใช้การสแกน โดยการให้มันติดทีละ ROW แล้วสแกนความความถี่สูงที่ตาคนเราแยกไม่ออกว่ามันสแกน อย่างพวกโทรทัศน์, จอคอมพิวเตอร์ CRT พวกนี้ก็ใช้การสแกน ลองเอาพวกกล้องดิจิตอลหรือกล้องวีดีโอไปถ่ายดูจะเห็นจอมันกระพริบชัดเจน

อย่างรูปที่ 6 จะให้ ROW1 ติดที่เหลือดับจากนั้นให้ ROW2 ติด ที่เหลือดับ เป็นอย่างนี้เรื่อยๆจนถึง ROW8 แล้วจึงวนกลับมาที่ ROW1

การทดลอง

พอทำ PCB เสร็จแล้วเลยลองเอามาเขียนโปรแกรมง่ายๆ สุดท้ายก็หนีไม่พ้นนาฬิกาครับ โดยผมจะใช้ RTC เจ้าเก่า เบอร์ DS1307 เป็นฐานเวลา ทีนี้ต้องสแกน Dot matrix ไปด้วยอ่านค่า RTC ไปด้วยเห็นทีจะกระตุกแย่ ถ้าจะปล่อยให้ display ส่งแบบ interrupt ก็อาจจะไม่เร็วพอ ผมเลยตั้ง Timer มา 1 ตัวโดยให้ฐานเวลา Timer เป็น 30 วินาที เพื่อไว้กระพริบ “:” ทุก 30 วินาที ทีนี้เมื่อเวลาผ่านไป 1 นาทีผมก็ให้อ่านค่า RTC 1 ครั้งยังไงมันก็ต้องมีการเปลี่ยนแปลงค่าทุก 1 นาที

การตั้งเวลา

ตั้งชั่วโมงให้เลื่อน DIPSW ที่ต่อกับ P2.7 ขึ้นและลง

ตั้งนาทีให้เลื่อน DIPSW ที่ต่อกับ P2.6 ขึ้นและลง

การทดลองนี้เราก็ได้รู้้ถึงการเขียนโปรแกรมสแกนไปแล้ว แต่การทดลองนี้ยังเป็นตัวเลขที่ไม่เคลื่อนที่ การทดลองหน้าจะเป็นการทำไฟวิ่งแบบตัวอักษร ติดตามตอนต่อไปครับ

ป.ล. ถ้า LED มีไฟติดเป็นตัวเลข แต่ดูเลอะๆ ให้ลองเอา C 150pF คร่อม STR กับ GND ดูครับ

Download Code DotClock

การแก้ปัญหา 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 เทียบกับล้านส่วน