Lab 3.2 อ่านค่าจากโมดูลนาฬิกา


โจทย์

1. ให้นักศึกษาอ่านค่าวันเวลาปัจจุบันจากโมดูลนาฬิกามาแสดงผลบนคอมพิวเตอร์ ตามรูปแบบนี้

9:33:16 Wed 25/1/2017

เป็นเวลา 9 นาฬิกา 33 นาที 16 วินาที วันพุธที่ 25 มกราคม 2017

2. ให้นักศึกษาเขียนโปรแกรมแสดงค่าเวลาปัจจุบัน (นาที, วินาที) จาก I2C Clock Module ไปแสดงบน 7-segment display

rtc-white-bg-small

จุดประสงค์

  • เพื่อให้ได้ฝึกใช้ Bit-wise operation ร่วมกับการอ่านค่าผ่าน i2c

อุปกรณ์ที่ต้องใช้

  • โมดูลนาฬิกา – ขอให้นำไปตั้งเวลากับ Staff ก่อนนำมาใช้งาน  ระวังอย่าให้ถ่านหลุดเพราะเวลาจะหายไปและต้องทำการตั้งเวลาใหม่

แนวทาง

โมดูลนาฬิกาที่ใช้ในกิจกรรมนี้ใช้ไอซีหมายเลข DS1307 ซึ่งเป็นอุปกรณ์ i2c ที่มีรายละเอียดดังนี้

  1. สามารถศึกษา Data Sheet ได้
  2. i2C Address คือ 0xD0
  3. มีรีจิสเตอร์ที่เก็บค่าวันเวลาตามตารางต่อไปนี้

แนวทางปฏิบัติ

  • รีจิสเตอร์จะเก็บค่าแยกหลักหน่วยและหลักสิบ เช่น ค่าวินาทีหลักหน่วยจะเก็บไว้ที่บิต 0-3 ของรีจิสเตอร์ 0 ส่วนหลักสิบคือบิท 4-6 ของรีจิสเตอร์เดียวกัน ยกตัวอย่างเช่น ถ้าค่าวินาทีคือ 23 ค่าที่จะถูกเก็บในรีจิสเตอร์คือ 0b00100011 เป็นต้น นักศึกษาจะต้องแบ่งบิตเหล่านี้แล้วนำมาคำนวณให้ดี
    • บิตที่ 7 ของรีจิสเตอร์ 0 คือ Clock Halt (CH) ถ้าเขียนบิตนี้ให้มีค่าเป็น 1 นาฬิกาจะหยุดเดิน ขอให้ระวังอย่าเซ็ทบิตนี้โดยบังเอิญ
  • วันในสัปดาห์ (Mon-Sun) อ่านค่าได้จากรีจิสเตอร์ตำแหน่งที่ 3 ซึ่งใน Datasheet ระบุไว้ว่าค่าใดหมายถึงวันใดนั้นขึ้นอยู่กับผู้ใช้จะตั้งเอาเอง ตัวโมดูลจะทำอย่างเดียวคือเพิ่มค่าของรีจิสเตอร์ในตอนเที่ยงคืน และถ้าค่านี้เกิน 7 ก็จะวนกลับมาเป็น 1 อีกครั้ง
    • รีจิสเตอร์เก็บค่านี้ใน 3 บิตแรก แต่ค่าที่เก็บจะอยู่ระหว่าง 1 – 7 เท่านั้น (จะไม่เป็น 0)
  • บิตที่ 6 ของรีจิสเตอร์ 2 จะใช้กำหนดว่าค่าชั่วโมงจะเป็นโหมด 24 ชม (บิต=0) หรือ 12 ชม (บิต=1) ถ้ากำหนดให้เป็นโหมด 12 ชม บิตที่ 5 ของรีจิสเตอร์นี้จะเป็นตัวระบุว่าเวลาดังกล่าวเป็น AM (บิต=0) หรือ PM (บิต=1)