Tuesday, June 30, 2015

[Miniproject #5] การใช้ DS1307 แบบ HAL

การเขียนโค้ด 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 ค่า ADDEESS 
       ที่ต้องการส่งข้อมูลไปก่อน จากนั้นจึง 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