Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Lab11

Lab11

Published by kowit, 2018-04-02 11:15:25

Description: ใบงานการทดลองที่ 11 การใช้งาน Real Time Clock ด้วย DS1307

Search

Read the Text Version

ใบงานการทดลองที่ 11 การใชง้ าน Real Time Clock ดว้ ย DS1307วตั ถปุ ระสงค์เชิงพฤติกรรมเพื่อให้นักศกึ ษาสามารถ 1. เชอ่ื มต่อขาสัญญาณเพอื่ ใชง้ านการสอื่ สาร I2C ได้อยา่ งถกู ต้อง 2. เขียนโปรแกรมเพ่ืออ่านค่าจากโมดลู Real Time Clock เบอร์ DS1307 ได้อยา่ งถูกตอ้ งอปุ กรณป์ ระกอบการทดลอง 1 เครือ่ ง 1 บอรด์ 1. คอมพวิ เตอรท์ ม่ี ีช่องเสียบ USB 1 บอรด์ 2. บอรด์ Arduino Mega 2560 1 เส้น 3. บอรด์ One the all 1 บอรด์ 5. สาย USB type A to USB type B 1 ตวั 6. Connector Base Shield 1 เส้น 7. i Module – RTC DS1307 Kit V1.0 4 เส้น 8. สายแพรสเี่ สน้ พร้อมคอนเนคเตอร์ 9. สายเช่ือมตอ่ลงชื่อผู้ทดลอง 1. ______________________________ 2._________________________________ทฤษฎที ี่เก่ียวขอ้ ง อปุ กรณ์ในงานไมโครคอนโทรลเลอร์นอกจากการใช้งานท่ีเป็นในลกั ษณะ HIGH , LOW แล้ว ยังมกี ารส่ือสารรูปแบบอื่นๆ เพ่ือช่วยให้ไมโครคอนโทรลเลอร์มีความสามารถท่ีเพ่ิมมากขึ้น เช่นการสื่อสารแบบ SPIเพ่ือใช้ในการควบคุมจอ LCD รวมถึงการอ่านข้อมูลจาก SD Card และในการส่ือสาร I2C ก็เช่นเดียวกันสามารถนาไปใช้ในการอินเตอร์เฟสกับอุปกรณ์ได้อย่างหลากหลาย ซ่ึงในใบงานนี้จะเป็นการใช้งานการสื่อสารแบบ I2C เพื่อไปใช้งานรว่ มกบั โมดลู Real Time Clock เบอร์ DS1307 หนังสอื ชุดฝกึ ด้านดจิ ิทัล 213

DS1307 Real Time Clock โมดูลฐานเวลาจริง real time clock เป็นโมดูลท่ีทาหน้าท่ีจดั การดา้ นเวลา ซึ่งทาหนา้ ที่ได้เสมอื นเป็นนาฬิกาขนาดเล็ก ผู้ใช้สามารถดึงข้อมูลเวลามาใช้งานได้ผ่านทางการส่ือสารรูปแบบ I2C โดยลักษณะบลอ็ กไดอะแกรมของโมดูล RTC แสดงดังรูปใบงานที่ 11-1 รปู ใบงานท่ี 11-1 บล็อกไดอะแกรมของ DS1307 จากรูปใบงานที่ 11-1 จะเป็นส่วนต่างๆซ่ึงประกอบไปด้วยภาคออสซิลเลเตอร์ เพื่อใช้ในการนับสัญญาณ โดยส่งไปที่หน่วย RTC ซ่ึงภาคควบคุมแหล่งจ่ายไฟหรือ Power Control ก็ยังมีตัวสาหรับจัดการพลังงานว่าจะใช้ไฟจากส่วนใด ซึ่งสามารถมาได้ทั้งจาก Vcc และ Battery โดยนอกจากนี้ยังมีตัวจัดการการส่ือสารหรือหน่วย Serial Bus Interface เพ่ือใช้ควบคุมในการส่ือสารโดยจากบล็อกไดอะแกรมจะเห็นได้วา่ ในการท่ีจะจัดการข้อมูลในตัว DS1307 น้ัน จะต้องผ่านการอ้างถึง Address Register ก่อนจึงจะเข้าไปยังหนว่ ยความจา และเรจสิ เตอร์ขอ้ มูลต่อไปได้เรจิสเตอร์และแอดเดรสของเวลา การอ่านข้อมูลจาก DS1307 จะต้องมีการอ้างถึงแอดเดรสท่ีต้องการอ่านข้อมูลก่อน จึงจะสามารถนาขอ้ มูลในแอดเดรสนั้นๆ มาใช้งานและตีความหมายได้ โดยลักษณะของแอดเดรสที่ใช้เก่ียวข้องกับเวลาจะอยู่ที่แอดเดรส 00H – 07H ซ่งึ แสดงได้ ดังรูปใบงานท่ี 11-2214 หนงั สือชดุ ฝึกด้านดิจิทลั

รูปใบงานที่ 11-2 บล็อกไดอะแกรมของ DS1307i-RTC Real Time Clock Module โมดูลท่ีใช้ในการนับ และเก็บข้อมูลเวลาที่ใช้ในการทดลองน้ีจะเป็นโมดูล i-RTC ซึ่งเป็นโมดูลท่ีมีแบตเตอร่ีขนาด CR 1220 สาหรับแบ็คอัพเวลา และเช่ือมต่อขาไอซี DS1307 ไว้เพ่ือรอรับการต่อใช้งานเรยี บรอ้ ยแล้วดังรูปใบงานท่ี 11-3 รูปใบงานที่ 11-3 ลกั ษณะภายนอกของโมดูล i Module – RTC DS1307 Kit V1.0 ขาเชื่อมต่อแต่ละขามีคาอธิบายดังตารางใบงานที่ 11-1 โดยขาสัญญาณน้ันเป็นขาท่ีใช้สาหรับการต่อใช้งานบนการสอื่ สารแบบ I2C นั่นคือขา SDA และ SCL หนงั สือชุดฝกึ ดา้ นดิจิทัล 215

ตารางท่ี 11-1 ขาเชอื่ มตอ่ และรายละเอียดของขาหมายเลข คาอธบิ าย 1 Vcc 2 GND 3 SDA 4 SCLการใชง้ าน I2C บนอาร์ดยุ โน บนบอร์ดอาร์ดุยโนน้ันมีขาสัญญาณเพื่อต่อใช้งานการส่ือสาร I2C เรียบร้อยแล้ว แต่ในแต่ละรุ่นจะมีตาแหนง่ ขาที่ไม่ตรงกนั แสดงตาแหนง่ ขาได้ ดงั ตารางที่ 11-2ตารางท่ี 11-2 ขาสญั ญาณ I2C บนบอร์ดอาร์ดยุ โนแตล่ ะรุน่ชนิดบอร์ด I2C Pins UNO A4(SDA), A5(SCL) 20(SDA), 21(SCL)Mega 2560 2(SDA), 3(SCL)Leonardo 20(SDA), 21(SCL) Due โดยจากตารางท่ี 11-2 สามารถระบุตาแหน่งขาสัญญาณบนบอร์ดอาร์ดุยโน Mega2560 ได้คือ ขาท่ี20(SDA) และ ขาท่ี 21(SCL) ดังน้ัน หากมีการใช้งาน I2C ก็ไม่ควรใช้งานขาดังกล่าวเชื่อมต่อกับอุปกรณ์ หรือต่อเอาต์พุตใช้งานขณะท่ีใช้งาน I2C โดยในการใช้งาน RTC พ้ืนฐาน สามารถทาการทดลองได้ตามขั้นตอนการทดลองต่อไปนี้ขั้นตอนการทดลอง1. เสียบ Connector Base Shield เข้าบรเิ วณโมดูล Arduino Shield ดงั รูปใบงานที่ 11-4 รปู ใบงานที่ 11-4 เสียบ Connector Base Shield ลงบนโมดูล Arduino Shield216 หนังสือชุดฝึกดา้ นดิจทิ ลั

2. เช่ือมต่อขาสัญญาณที่ใช้ในการส่ือสาร I2C จากบอร์ด Mega 2560 เข้าไปที่บริเวณ Arduino Shield ดังตารางที่ 11-3 และรปู ใบงานที่ 11-5 ดงั น้ีตารางท่ี 11-3 การเชือ่ มตอ่ ขาสญั ญาณบอร์ด Mega2560 Arduino Shield/One the all Vin 9V GND GND SDA 20(SDA) SCL 21(SCL)รปู ใบงานที่ 11-5 การเช่อื มต่อขาสัญญาณ I2C ไปยงั Arduino Shield หนงั สือชดุ ฝึกด้านดิจิทลั 217

3. เช่ือมต่อขาสัญญาณบริเวณขาสัญญาณ I2C เข้ากับ RTC Module โดยใช้สายแพรขนาด 4 เส้น ซ่ึงช่องเช่ือมตอ่ สญั ญาณสาหรบั I2C แสดงดังรูปใบงานที่ 11-6 รปู ใบงานท่ี 11-6 ช่องสาหรบั ใช้เชอ่ื มต่อ I2Cซ่ึงหลังจากเชื่อมต่อทง้ั หมดเขา้ ดว้ ยกันแล้วจะเป็นในลกั ษณะดังรูปท่ี 11-7 รูปใบงานท่ี 11-7 ชอ่ งสาหรับใชเ้ ชอ่ื มต่อ I2C218 หนงั สือชุดฝึกดา้ นดจิ ทิ ลั

4. เขียนโปรแกรมบน Arduino IDE ตามโปรแกรมการทดลองที่ 11-1 โปรแกรมการทดลองที่ 11-11 #include \"Wire.h\" // include I2C library2 #define DS1307_ADDRESS 0x68 // define DS1307 Address3 byte zero = 0x00;45 byte decToBcd(byte val){6 // Convert normal decimal numbers to binary coded decimal7 return ( (val/10*16) + (val%10) );8}910 byte bcdToDec(byte val) {11 // Convert binary coded decimal to normal decimal numbers12 return ( (val/16*10) + (val%16) );13 }1415 void setDateTime(){ // function for SetDate and Time16 byte second = 15; //0-5917 byte minute = 01; //0-5918 byte hour = 0; //0-2319 byte weekDay = 2; //1-7 Sun - Saturday20 byte monthDay = 30; //1-3121 byte month = 12; //1-12 Jan - December22 byte year = 14; //0-99 20xx2324 Wire.beginTransmission(DS1307_ADDRESS);25 Wire.write(zero); //goto first address = second26 /* convert dec type to BCD type and Write to RTC */27 Wire.write(decToBcd(second));28 Wire.write(decToBcd(minute));29 Wire.write(decToBcd(hour));30 Wire.write(decToBcd(weekDay));31 Wire.write(decToBcd(monthDay));32 Wire.write(decToBcd(month));33 Wire.write(decToBcd(year));3435 Wire.write(zero); //stop36 Wire.endTransmission();37 }3839 void setup(){40 Wire.begin();41 Serial.begin(9600);42 setDateTime();43 }4445 void loop(){46 printDate(); // print Date and Time Function47 delay(1000);48 } หนงั สือชุดฝึกด้านดจิ ทิ ัล 219

โปรแกรมการทดลองท่ี 11-1 (ตอ่ ) 49 /* ---- Function for Print Date and time ------ */ 51 52 void printDate(){ 53 Wire.beginTransmission(DS1307_ADDRESS); 54 Wire.write(zero); 55 Wire.endTransmission(); 56 Wire.requestFrom(DS1307_ADDRESS, 7); 57 58 int second = bcdToDec(Wire.read()); 59 int minute = bcdToDec(Wire.read()); 60 int hour = bcdToDec(Wire.read()&0b111111); //24 hour time 61 int weekDay = bcdToDec(Wire.read()); //0-6 -> sun- Sat 62 int monthDay = bcdToDec(Wire.read()); 63 int month = bcdToDec(Wire.read()); 64 int year = bcdToDec(Wire.read()); 65 66 //print the date EG 3/1/11 23:59:59 67 Serial.print(month); 68 Serial.print(\"/\"); 69 Serial.print(monthDay); 70 Serial.print(\"/\"); 71 Serial.print(year); 72 Serial.print(\" \"); 73 Serial.print(hour); 74 Serial.print(\":\"); 75 Serial.print(minute); 76 Serial.print(\":\"); 77 Serial.println(second); 78 } 79อธบิ ายโปรแกรมที่ 13-1บรรทดั ท่ี 1 : ประกาศ include library ชือ่ wire.h ซง่ึ ไว้สาหรับการสื่อสาร I2Cบรรทดั ที่ 2 : กาหนดค่า address ของ DS1307 เปน็ 0x68บรรทดั ท่ี 5 : ฟังกช์ น่ั สาหรบั แปลงข้อมลู จากเลขฐาน 10 เปน็ BCDบรรทัดท่ี 10 : ฟงั ก์ชนั่ สาหรับแปลงขอ้ มลู จากเลข BCD เปน็ เลขฐาน 10บรรทัดท่ี 15 : ฟังกช์ ่นั ตัวอย่างใช้สาหรับตั้งเวลาลงบน RTCบรรทัดท่ี 16-22 : กาหนดคา่ เวลา วัน เดือน ปี ลงในตวั แปรชนดิ byteบรรทัดท่ี 24 : กาหนด address ของโมดลู ทต่ี อ้ งการสอ่ื สารดว้ ย ในทีน่ ค้ี อื 0x68บรรทัดที่ 25 : เขียนค่า address เริ่มต้น ในทน่ี ี้คอื 0x00บรรทดั ท่ี 27-33 : เขียนคา่ พารามเิ ตอร์จากตวั แปรทีก่ าหนดในบรรทัดท่ี 16-22220 หนงั สือชุดฝกึ ด้านดิจิทลั

บรรทดั ที่ 36 : สน้ิ สดุ การส่ือสารดว้ ย I2Cบรรทดั ที่ 40 : ฟังก์ชัน่ เรียกการใช้งาน I2C ในโปรแกรมบรรทดั ท่ี 42 : เรยี กฟงั ก์ชน่ั ต้ังเวลาและวนั ที่บรรทดั ที่ 46 : เรียกฟงั กช์ ัน่ แสดงเวลาและวนั ท่ีจาก DS1307บรรทดั ที่ 52 : ฟงั กช์ นั่ printdate สาหรับแสดงผลวัน และเวลาผา่ นทาง Serialบรรทัดที่ 53-55 : เขียน Address ของไบตท์ ี่ต้องการอา่ นไวท้ ี่ 0x00บรรทดั ที่ 56 : เรยี กคาส่ังสาหรบั อา่ นค่าจาก DS1307 จานวน 7 ไบต์บรรทัดท่ี 58-64 : อา่ นคา่ จาก DS1307 มาเกบ็ ไวใ้ นตัวแปรแต่ละตัวพร้อมทง้ั แปลงเป็นฐาน 10บรรทดั ท่ี 67-77 : แสดงคา่ วัน เวลา ผา่ นทาง Serial5. ทดสอบผลการทางาน โดยอัพโหลดโปรแกรมลงบนอาร์ดุยโน และเปิด Serial Monitor และบันทึกเวลาท่ีอ่านได้โดยประมาณ วันที่…………… เดือน……………… ปี………………… เวลา…………… นาท…ี …………… วนิ าที………………6. จงแก้ไขโปรแกรมให้บันทึกค่าเป็น วันและเวลาปัจจุบัน โดยแก้ไขพารามิเตอร์ในบรรทัดท่ี 16-22 แล้วอัพโหลดโปรแกรมลงบนบอรด์ อาร์ดยุ โน และบันทกึ ผลการทางาน……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………7. แก้ไขโปรแกรมโดยปิดคาส่ังต้ังเวลาในฟังก์ช่ัน setup() เพื่อไม่ให้โปรแกรมต้ังค่าใหม่ทุกคร้ังท่ีเร่ิมต้นการทางาน ดังรูปใบงานที่ 11-8 และทดสอบการทางานพรอ้ มบนั ทกึ ผลการทางาน รปู ใบงานที่ 11-8 ชอ่ งสาหรับใชเ้ ชือ่ มต่อ I2Cบันทึกผลการทางาน………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… หนังสอื ชดุ ฝกึ ด้านดิจทิ ลั 221

8. ทดสอบปลดแหลง่ จ่ายไฟเลีย้ งออก แล้วทดสอบอีกครัง้ ว่าเวลาเดินต่อเน่อื งหรือไม่ และบันทึกผลการทางาน……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………สรุปผลการทดลอง………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………คาถามทา้ ยการทดลอง1. จงยกตวั อย่างการประยกุ ตใ์ ช้ไอซี DS1307………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………2. จงบอกขาทีจ่ าเปน็ สาหรับการเชือ่ มต่อแบบ I2C วา่ มอี ะไรบ้าง………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………3. จากโปรแกรมตัวอยา่ ง จงบอกแอดเดรสของโมดลู ที่ใช้งาน………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………4. จงยกตวั อย่างอปุ กรณท์ ใี่ ช้การส่อื สารแบบ I2C มาอยา่ งนอ้ ย 5 ตวั อยา่ ง……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………222 หนงั สือชดุ ฝกึ ดา้ นดิจิทัล


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook