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

คำแนะนำในการเริ่มต้นเรียนรู้ไมโครคอนโทรลเลอร์

มีผู้เริ่มเรียนรู้เป็นจำนวนมากถามว่าจะเริ่มเรียนรู้ไมโครคอนโทรลเลอร์ตัวไหนดี ตัวไหนเหมาะสมที่สุด ผมเองเขียนไมโครคอนคอนโทรลเลอร์มา 5 ปี ทำงานด้าน R&D Engineer จะแนะนำเท่าที่ตัวเองเคยใช้งานมานะครับ

MCS-51 เป็นตระกูลเท่าเก่าแก่ที่ยังใช้กันอยู่ ส่วนมาก อ.ใน มหา?ลัย จะใช้ในการเรียนการสอน อันเนื่องมาจากว่า ใช้งานง่าย มีสถาปัตยกรรมแบบไมโครโปรเซสเซอร์ CISC (Complex Instruction Set Computing) สามารถหา Tools ในการพัฒนาได้ไม่ยาก เมื่อติดขัดอะไรสามารถโพสถามในเนตได้ ที่สำคัญ IC มีราคาถูก เบอร์ที่แนะนำจะเป็นตระกูล S เพราะสามารถ Program (หรือที่เรียกว่า Burn นั่นแหล่ะ) โดยที่ไม่ต้องถอด IC ออกมาจากวงจรได้( In circuit Programing) เช่น 89S52 ส่วนเครื่องโปรแกรมนั้นจะสร้างเองก็ทำได้ง่ายๆในงบไม่ถึงร้อยบาท ใครที่สนใจสร้างเครื่องโปรแกรม MCS-51 ลองดูที่นี่ครับ เวบ อ. วิชิต http://www.kmitl.ac.th/~kswichit/

Core แบบ MCS-51 ไม่ค่อยเหมาะกับงานที่ต้องเจอ Noise เยอะเท่าไหร่เช่นในโรงงาน (Industrial) เจอ Noise ทีไรแฮงค์ทุกที แต่ในการทดลองทนทานมากเคยต่อไฟกลับขั้วจน IC ร้อนจับแทบไม่ได้ เอา IC มา Program ใหม่ใช้ได้เฉยเลย

PIC/dsPIC พูดถึง PIC คาดว่าคงรู้จักกันหมดพี่แกทำการตลาดแบบกินรวบทั้งตลาดระดับล่างจนถึงระดับ 32 บิต มี IC ให้เลือกมากมายจนเลือกไม่ถูก จุดเด่นของเค้าคือมี EEPROM, Module I2C, SPI, LIN Bus, CAN Bus สารพัดโมดูลจะใส่เข้าไป? มีสถาปัตยกรรมแบบ RISC (Reduce Instruction Set Computing) กินไฟต่ำกว่าพวก MCS-51 เยอะ ถ้าอ่านดูในเวบของ Microchip PIC รุ่นเก่าๆเช่น 16F84 เค้าจะบอกว่า PIC มีคำสั่ง Assembly 32 คำสั่งทำให้ง่ายต่อการเรียนรู้ ด้วยคำสั่งที่มีน้อยนี่แหล่ะ จะ Compare ทีซัดไปเป็นสิบบรรทัด ยิ่งถ้ามีการคูณด้วยแล้วยิ่งลำบากโครตๆ เพราะดันไม่มีคำสั่งคูณ จะคูณทีต้องใช้ Shift bit ช่วย ถ้าจะถามถึงข้อดีนะ ก็ทน Noise ใช้ในงานอุตสาหกรรมได้ ไม่แฮงค์เหมือนเจ้า MCS-51 แต่ว่าเวลาใช้งานอย่าต่อผิดนะ ถ้าต่อไฟกลับขั้วหรือจ่ายไฟเกินระดับ VCC ละก็ IC พังเลย

MPLAB IDE ที่ใช้เขียน Code

AVR มีความเป็นไมโครคอนโทรลเลอร์มากขึ้น ได้รวม EEPROM, Module I2C, SPI เข้าไปใน Core และ Port สามารถ drive LED ได้โดยตรง Develope Tool ใช้งานได้ฟรี (WinAVR) เครื่อง Program ก็ทำเองได้ด้วยงบไม่ถึงร้อย ความทนทานกับ Noise ถือว่าใช้ได้ดีทีเดียว มีสถาปัตยกรรมแบบ RISC (Reduce Instruction Set Computing) ล่าสุดได้ออก AVR32 ไมโครโปรเซสเซอร์ 32 บิต ความสามารถสูงมาแย่งชิงตลาดกับ ARM

Tool ตัวโปรดของผม ใช้งานง่ายมาก

Tool ตัวโปรดของผม ใช้งานง่ายมาก

PSOC จากค่าย Cypress MCU ตระกูลนี้มีความโดดเด่นตรงที่ Mix ส่วน Analog เข้าไปใน IC เลยพวก OP-AMP นี่มีให้หมดเลย หากคุณมีโปรเจคที่ต้องประมวณสัญญาณ Analog ตัวนี้โดดเด่นมาก แต่ความสามารถที่มีก็เหมือนเป็ดนะครับ ทำได้หลายอย่างแต่ไม่ถึงกับทำได้ Perfect สำหรับ Tool ที่ใช้พัฒนาตัวนี้คือ PSOC Designer เวลาตั้งค่า Timer, Interrupt ตั้งได้ Graphic Block เลยจับเส้นมาโยงๆๆ ใส่ตัวเลข ง่ายๆแบบนี้แหล่ะครับ น่าจะทำให้มือใหม่ใช้งานได้ง่าย?แต่ผมกลับไม่ชอบเท่าไหร่ผมชอบใช้เป็น Code มากกว่า

ปัญหา Noise ใน ATMEGA32

ผมเป็นคนที่ชอบใช้ MCU หลายตระกูล มีอยู่งานนึงอยากจะลองใช้ ATMEGA32 เห็นว่าราคาไม่แพง Feature ก็ใช้ได้เลย งานนี้เริ่มทำในปริ๊นอเนกประสงค์ แล้วก็ทำ Schematic & PCB ควบคู่กันไปด้วย ก็เขียนโปรแกรมไปได้ครึ่งทางและ เริ่มสังเกตุว่าเวลาเอามือเข้าใกล้ตัว ATMEGA32 มันจะ Reset ไปเลย

ในใจคิดว่ามันไม่น่าจะอ่อนแอขนาดนั้น C 0.1uF ก็ต่อครบทุกขาของ VCC ขา Reset ก็ Pull up ไว้ ที่เคยทำมาขนาดสถาปัตยกรรมเก่าๆ อย่าง MCS-51 ยังไม่ reset เลย คราวนี้ก็ลองหาสาเหตุ ค่อยๆเอานิ้วแหย่ไปที่ IC ดูว่าขาไหนที่มัน Sensitive กับนิ้วเรา ค่อยๆไล่ไปก็เจอว่ามันมีอยู่ 3-4 ขาที่เป็นปัญหา

เลยย้อนกลับไปดู Code ขานั้น set เป็น input ไว้แถมไม่ได้ Pull up, pull down ไว้ เลยลอง pull up แทนแล้วมาเทสใหม่ อาการ reset ก็หายไป เลยเป็นข้อสรุปได้ว่า

ขาไหนไม่ได้ใช้อย่าปล่อยลอยไว้(float) มันจะเป็นอินพุตที่รับ noise เข้ามา ในหลายๆ datasheet จะบอกว่าให้ต่อขาที่ไม่ได้ใช้ลง GND เลย