วันนี้เรานำเสนออุปกรณ์พื้นฐาน Real Time Clock กันครับ
ว่าไปแล้วโมดูล Real Time Clock (RTC) ก็คือ อุปกรณ์ที่ให้ค่าเวลาตามจริง ซึ่งทำงานโดยการจับสัญญานนาฬิกาที่ได้มาจาก Crystal นั่นเองครับ บางรุ่นก็จะมีถ่านสำรองมาให้ด้วย ทำหน้าที่ในการบันทึกเวลาอย่างต่อเนื่องถึงแม้ว่าจะไม่มีไฟเลี้ยงมาที่ตัวบอร์ด ตัวเวลาก็ยังคงนับได้ต่อ ทำให้ไม่ต้องเสียเวลามาตั้งเวลาใหม่หลังจากที่หยุดจ่ายไฟเลี้ยงครับ โมดูล RTC นี้จำเป็นอย่างยิ่งกับการใช้งานที่ต้องมีการบันทึกเวลา (Time Stamp) เช่น อุปกรณ์ Data logger ครับ
หลายคนก็อาจจะสงสัยว่าทำไมเราต้องการ RTC module นี้ในเมื่อ Arduino Board ของเราก็มีตัวจับเวลา เช่น millis() อยู่แล้ว คำตอบก็คือ ไม่โครโปรเซสเซอร์ที่เป็นหัวใจในการทำงานของ Arduino board ทั้งหลายนั้น ต้องทำงานสารพัดอย่างครับ ไม่ว่าจะเป็นคำสังพื้นฐาน เช่น บวก ลบ คูณ หาร ไปจนถึงการติดต่อกับอปุกรณ์ภายนอก คำสั่งที่มากมายซึ่งเราเป็นผู้เขียนลงใน Sketch นั้นจะทำงานแบบ อนุกรม (Serial) ว่าง่ายๆ ก็คือ ทำทีละบรรทัดครับ ทำให้การทำงานของคำสั่งจับเวลาก็จะถูกรบกวนไปด้วย จับได้บ้าง ไม่ได้บ้าง เดี๋ยวโดนสั่งไปทำโน่น โดยแทรก (Interrupt) ไปทำนี่ เวลาที่ได้จากการใช้คำสั่งนี้ ก็เลยไม่สามารถนำมาเป็นเวลาตามจริงที่ต้องการบันทึกไปพร้อมกับค่าอื่นๆ ที่ต้องการวัดได้ครับ
ดังนั้น ในการประยุกต์ใช้กับงานที่ต้องการเวลาที่แม่นยำ และเป็นเวลาตามนาฬิกา ที่บอก วันที่ เดือน ปี ชั่วโมง นาที วินาที ก็เลยจำเป็นต้องใช้อุปกรณ์ที่ทำหน้าที่จับเวลาแยก ซึ่งก็ทำให้ต้องมีสัญญาณนาฬิกาจาก Crystal แยกต่างหากด้วยเช่นกัน ฟังดูแล้วอาจจะคิดว่ามันช่างยุ่งยากเหลือเกิน แตไม่เลยครับ มีคนที่ออกแบบ Chip หลายแบบ ที่ทำหน้าที่นี้มาให้เราเรียบร้อยแล้ว วิธีใช้งานก็ง่ายๆ ติดต่อผ่านไปที่บอร์ดโดยใช้การสื่อสารแบบ I2C หรือ Inter - Integrated Circuit ที่ใช้ SDA SCL VCC และ GND เท่านั้นครับ
ทีนี้การที่มันมีหลายรุ่นก็ทำให้เกิดความงงกันได้ โมดูล RTC นั้นมีอยู่หลายแบบครับ เอาเฉพาะที่ร้าน Arduitronics ขายก็มี 3 รุ่นแล้วครับ ได้แก่ DS3231, DS1302, Tiny RTC I2C 24C32 DS1307 แต่ละรุ่นก็จะมีความต่างกันในเรื่องของความละเอียดในการจับเวลา การมีแบตเตอรี่สำรอง ขนาด และแน่นอนก็คือราคาครับ
ตัวที่ผมจะใช้ในการสาธิตการทำงานของโมดูล RTC วันนี้ก็คือ DS3231 ครับ ตัวนี้จะมีราคาสูงกว่าตัวอื่นนิดหน่อย (แต่ก็ไม่กี่สิบบาทหรอกครับ) แต่ข้อดีของมันก็คือ มีการชดเชยการเปลี่ยนแปลงของสัญญาณนาฬิกา เนื่องจากการเปลี่ยนแปลงของอุณหภูมิแวดล้อมครับ ว่าง่ายๆ ก็คือ เวลาอุณหภูมิเปลี่ยน สัญญาณนาฬิกาจาก Crystal ก็เปลี่ยน ทำให้เวลาก็เพี้ยนไปด้วย แต่โมดูลนี้ได้ทำการวัดค่าอุณหภูมิพร้อมทั้งชดเชยความเปลี่ยนแปลงนี้ไปด้วยแล้ว ทำให้เวลาที่ได้มีความแม่นยำสูงมาก
Data Sheet DS3231
http://datasheets.maximintegrated.com/en/ds/DS3231.pdf
คราวนี้มาถึงการใช้งานกันบ้างครับ ไม่ว่าจะเป็น RTC รุ่นไหน ก็ต้องเริ่มจากการตั้งเวลาครั้งแรกกันก่อนครับ แต่ละรุ่นก็จะมีวิธีการที่แตกต่างกันไป ผมขอเขียนตัวอย่างรุ่น DS3231 เท่านั้นนะครับ รุ่นอื่นก็จะหาได้จาก www.github.com ครับ
1. เริ่่มต้นจากการ Download Library ครับ (ในขณะที่ผมเขียนนี้ Sketch ทั้งหมดถูกทดสอบบน Arduino ide 1.0.5 นะครับ)
http://github.com/JChristensen/DS3232RTC
http://arduiniana.org/libraries/streaming/
http://playground.arduino.cc/Code/Time
http://arduino.cc/en/Reference/Wire
หลังจาก Download มาแล้ว ให้ไปใส่ไว้ใน Folder xxxx\arduino-1.0.x\libraries นะครับ
2. จากนั้นก็ต่อโมดูลกับ Arduino board ครับ วันนี้ผมใช้ Arduino UNO R3 นะครับ ก็ตามรูปเลยครับ
VCC -> 5 VDC
GND -> GND
SCL -> A5
SDA -> A4
3. จากนั้นก็ upload sketch ด้านบน หรือ เปิดใน Examples -> DS3231RTC -> SetSerial (อย่าลืมตััง baud rate ของ Serial monitor ให้ตรงกันด้วยนะครับ)
คราวนี้เวลาจะตั้งค่านาฬิกา ก็ไปที่ ช่อง Input ของ Serial monitor แล้วจัดไปตามนี้ครับ
รูปแบบ ปี, เดือน, วันที่, ชั่วโมง, นาที, วินาที
โดย
ปีอาจใช้เป็น 2 หรือ 4 ดิจิตก็ได้
เดือน 1-12
วัน 1-31
ชั่วโมง 0-23
นาทีและวินาที 0-59
ตัวอย่างนะครับ สมมุติว่าวันนี้เป็นวันที่ 1 มกราคม 2014 เวลา 10:10 am 30 วินาที
ให้พิมพ์ลงใน Serial monitor ว่า 2014,1,1,10,10,30
ง่ายๆ เท่านี้ เราก็สามารถบันทึกเวลาปัจจุบันให้กับ RTC DS3231 กันแล้วครับ คราวนี้ถ้าลองกดปุ่ม Reset ดูจะพบว่าเวลาที่เริ่มต้นแสดงก็ไม่ได้เปลี่ยนไปนับใหม่ แต่เป็นการแสดงค่าเวลา ณ ปัจจุบันต่อเนื่องไปเรื่อยๆ ครับ
ลองอีกตัวอย่างใน Examples นะครับ ตัวอย่างที่ชื่อว่า TimeRTC เริ่มจากการ upload sketch ลงไปแล้วเปิด Serial monitor ครับ
เรียบร้อยครับ เราสามาถนำเวลานี้ไปบันทึกลงในโมดูลอื่นๆ เช่น SD Card หรือ ส่งผ่าน Ethernet Shield ไปที่ Server ที่เขียนรอรับค่าได้ครับ
แถมอีกนิดครับ โมดูล RTC ส่วนใหญ่จะมีความสามารถในการปรับค่าวันที่ของเดือนที่มี 30 วันและ 31 วัน นอกจากนี้ยังปรับค่าปีที่มี 355 และ 356 วันให้เองโดยอัตโนมัติครับ ซึ่งจุดนี้แน่นอนว่าการเขียน Sketch บน Arduino board จะทำได้ค่อนข้างยาก เนื่องจากเวลาที่นานเป็นปีๆที่ต้องนับสัญญาญนาฬิกาจะทำให้เกิดความเพี้ยนแน่นอนครับ
วันนี้พอแค่นี้ครับ..... :)
โดย Mountain A
หน้านี้เป็นสารบัญของบทความที่ปรากฏในเว็บของ Arduitronics.com นะครับ จะขอแบ่งออกเป็นหัวข้อตามกลุ่มของสินค้าในร้านดังต่อไปนี้
หน้าที่เข้าชม | 15,417,779 ครั้ง |
ผู้ชมทั้งหมด | 5,920,859 ครั้ง |
เปิดร้าน | 21 พ.ค. 2556 |
ร้านค้าอัพเดท | 3 ต.ค. 2568 |