การเขียนโค้ด DS1307 (RTC) การเชื่อมต่อ DS1307 ด้วยไรบารี่ HAL
ฟังก์ชั่นสำหรับรับและส่งข้อมูลของบอร์ดกับ DS1307 แบ่งออกเป็น 2 ฟังก์ชั่นใหญ่ๆ
- ฟังก์ชั่นสำหรับเซ็ตเวลาเริ่มต้น คือ void setTime(uint8_t second_s, uint8_t minute_s, uint8_t hour_s, uint8_t dayOfWeek_s, uint8_t dayOfMonth_s, uint8_t month_s, uint8_t year_s) เป็นฟังก์ชั่นสำหรับการตั้งเวลาเริ่มต้นของโมโดล Ds1307 โดยมีการรับค่าเป็น วินาที, นาที, ชั่วโมง, วัน(จันทร์-อาทิตย์), วันที่, เดือน, ปี
- การทำงานของฟังก์ชั่น คือ เมื่อฟังก์ชั่นทำการรับค่ามาแล้วจะทำการแปลงค่าที่
ได้ให้เป็นเลขฐานสอง เพื่อทำการส่งค่าข้อมูลไปยังโมดูลตามลำดับด้วยคำสั่ง
HAL_I2C_Master_Transmit และมีการเช็คสถานะการส่งข้อมูลด้วยการ
ติด-ดับ ของ LED
รูปที่ 1 ลำดับข้อมูลต่างๆในรีจิสเตอร์
ที่ต้องการส่งข้อมูลไปก่อน จากนั้นจึง Transmit ข้อมูลที่ต้องการส่ง ส่งเรียง
ต่อกันไปตามลำดับ
รูปที่ 2 รูปแบบการส่งข้อมูลแบบ I2C จากบอร์ดไปยัง DS1307
- ฟังก์ชั่นสำหรับเก็ตเวลา คือ readtime(uint8_t address) และ void GetTime()
- readtime(uint8_t address) เป็นฟังก์ชั่นสำหรับการรับค่าจาก DS1307
มายังบอร์ด โดยใช้คำสั่ง HAL_I2C_Master_Receive ในการรับค่า โดยหลัก
การทำงานของฟังชั่นคือบอร์ดจะ Transmit ไปหาโมดูลว่าต้องการรับค่าจาก
ADDEESS ไหนจากนั้นเมื่อมีการตอบ ACK กลับมาจึงทำการ Receive ค่ามา
จาก DS1307
- - void GetTime() เป็นฟังก์ชั่นสำหรับแปลค่าจากเลขฐานสองที่รับมาจาก
DS1307 เป็นเลขฐานสิบ และทำการ แสดงค่าออก UART หรือ LCD
รูปที่ 3 รูปแบบการรับข้อมูลแบบ I2C จาก DS1307
- โค้ดสำหรับการแสดงค่าออกทางซีเรียลมอนิเตอร์
รูปที่ 4 ผลจากการรันโปรแกรม
โหลดไฟล์ได้จาก ที่นี่

No comments:
Post a Comment