- วัสดุที่ต้องการ:
- โมดูล RTC:
- การเชื่อมต่อ DS3231 RTC กับไมโครคอนโทรลเลอร์ PIC:
- การเขียนโปรแกรม PIC สำหรับโมดูล RTC:
- คำอธิบายโดยย่อของไฟล์ส่วนหัว PIC16F877a_DS3231.h:
- จำลองสถานการณ์:
- แสดงเวลาและวันที่บน LCD:
อุปกรณ์ฝังตัวเกือบทั้งหมดได้รับการออกแบบมาเพื่อโต้ตอบกับโลกแห่งความจริง พวกเขาทำหน้าที่เป็นสะพานเชื่อมในการสื่อสารระหว่างโลกดิจิทัลและโลกแห่งความจริง เพื่อให้กระบวนการนี้ง่ายขึ้นและมีประสิทธิภาพบางครั้งโลกดิจิทัลจำเป็นต้องติดตามเวลาและวันที่ของโลกแห่งความเป็นจริง ด้วยวิธีนี้โลกดิจิทัลจะรู้ว่าเวลาใด / วันในโลกแห่งความเป็นจริงและยังสามารถแยกแยะระหว่างเวลากลางวันหรือกลางคืนได้ นอกจากนี้ยังสามารถทำหน้าที่เป็นแหล่งเวลาเพื่อทำงานบางอย่างในเวลาหรือวันที่ที่กำหนด ดังนั้นที่นี่เรากำลังเชื่อมต่อโมดูล RTC กับไมโครคอนโทรลเลอร์ PICและแสดงเวลาและวันที่บน LCD 16x2 โครงการนี้ยังสามารถนำมาใช้เป็นนาฬิกาดิจิตอล
วัสดุที่ต้องการ:
- แหล่งจ่ายไฟ 5V ที่มีการควบคุม
- PIC16F877A
- คริสตัลออสซิลเลเตอร์ 20Mhz
- ตัวเก็บประจุ 33pf - 2Nos
- ตัวต้านทาน 10K, 5.1K, 1K
- โมดูล DS3231 RTC
- พอท -10k
- โมดูล LCD 16 * 2
- การเชื่อมต่อสายไฟ
โมดูล RTC:
วิธีที่ใช้กันมากที่สุดสำหรับไมโครคอนโทรลเลอร์ในการติดตามของโลกเวลาจริงหรือวันที่โดยใช้RTC IC คำว่า RTC ย่อมาจาก Real Time Clock; IC นี้ติดตามเวลาและวันที่ในโลกแห่งความเป็นจริงและจะแบ่งปันข้อมูลนี้กับไมโครคอนโทรลเลอร์เมื่อใดก็ตามที่ร้องขอ RTC IC ที่เราใช้อยู่นี้เป็นDS3231 ที่ได้รับความนิยมและแม่นยำที่สุด IC นี้ลอยเพียงไม่กี่วินาทีในแต่ละปีและด้วยเหตุนี้จึงมีความน่าเชื่อถือสูง เพื่อประโยชน์ของบทช่วยสอนนี้เราใช้โมดูล DS3231 RTCซึ่งสามารถซื้อได้ง่ายทางออนไลน์หรือจากร้านฮาร์ดแวร์ในพื้นที่ โมดูลนี้มาพร้อมกับเซลล์เหรียญ 3V ซึ่งขับเคลื่อนโมดูล RTC เสมอและเมื่อตั้งเวลาและวันที่แล้วระบบจะอัปเดตตราบเท่าที่เซลล์เหรียญยังมีชีวิตอยู่
โมดูล DS3231 สื่อสารด้วยความช่วยเหลือของโปรโตคอล I2C ดังนั้นหากคุณไม่ทราบว่ามันคืออะไรและใช้กับ PIC อย่างไรให้อ่าน I2C พร้อมบทช่วยสอน PIC ก่อนดำเนินการต่อ นอกจากนี้ในบทช่วยสอนนี้เราจะสร้างไฟล์ส่วนหัวที่สามารถใช้สื่อสารกับโมดูล RTC ของเราและทดสอบฮาร์ดแวร์ด้วยการแสดงเวลาและวันที่บนจอ LCD ดังนั้นการเรียนรู้วิธีการเชื่อมต่อ LCD จึงเป็นสิ่งสำคัญ แสดงผลด้วยไมโครคอนโทรลเลอร์ PIC ไฟล์ส่วนหัวที่สร้างในบทช่วยสอนนี้สำหรับ DS3231 สามารถใช้ / แก้ไขได้ในภายหลังเพื่อให้เหมาะกับแอปพลิเคชันของคุณ
ก่อนหน้านี้เราเคยใช้DS3231 RTC กับ Arduinoในโครงการด้านล่าง:
- เครื่องป้อนสัตว์เลี้ยงอัตโนมัติโดยใช้ Arduino
- Arduino Data Logger
การเชื่อมต่อ DS3231 RTC กับไมโครคอนโทรลเลอร์ PIC:
แผนภาพวงจรสำหรับ นาฬิกาดิจิตอลที่ใช้ไมโครคอนโทรลเลอร์ PIC แสดง ไว้ด้านล่าง อย่างที่บอกไปก่อนหน้านี้ DS3231 ทำงานด้วยความช่วยเหลือของการสื่อสาร I2C ดังนั้นจึงมี Serial Clock (SCL) และ Serial Data (SDA) pin ซึ่งจะต้องเชื่อมต่อกับพิน I2C บน PIC ของเราซึ่งเป็นพิน 18 (SCL) และพิน 23 (SDA) ตัวต้านทานแบบดึงค่า 4.7k ใช้เพื่อให้บัสอยู่ในสถานะสูงเมื่อไม่ได้ใช้งาน
จอ LCD ยังเชื่อมต่อกับหมุดบนพอร์ต D เพื่อแสดงวันที่และเวลาปัจจุบัน แผนภาพวงจรทั้งหมดได้รับการออกแบบบนโปรตีอุสและแสดงไว้ด้านล่าง เราจะใช้สิ่งเดียวกันนี้เพื่อจำลองหรือตั้งโปรแกรมในบทช่วยสอนนี้ในภายหลัง
ทำตามแผนภาพวงจรและทำการเชื่อมต่อตามนั้นกล่อง I2C ที่แสดงด้านบนใช้สำหรับการดีบัก I2C ดังนั้นเราจะไม่รวมสิ่งนั้นไว้ในการเชื่อมต่อของเรา นอกจากนี้ยังไม่แสดงให้เห็นว่าโมดูล RTC ต้องใช้พลังงานจากแหล่งจ่าย + 5V โดยใช้หมุด Vcc และกราวด์บนโมดูล ฉันใช้เขียงหั่นขนมเพื่อทำการเชื่อมต่อและหลังจากทำการเชื่อมต่อที่จำเป็นแล้วการตั้งค่าของฉันจะมีลักษณะดังนี้
หากคุณยังใหม่กับไมโครคอนโทรลเลอร์ PIC ให้เริ่มต้นด้วยการเริ่มต้นใช้งานไมโครคอนโทรลเลอร์ PIC
การเขียนโปรแกรม PIC สำหรับโมดูล RTC:
โปรแกรมที่สมบูรณ์สำหรับนาฬิกาดิจิตอลนี้สามารถดาวน์โหลดได้จากไฟล์ ZIP ที่นี่ โปรแกรมมีไฟล์ส่วนหัวสามไฟล์พร้อมกัน เป็นไฟล์ lcd.h สำหรับทำงานกับจอ LCD ไฟล์ PIC16F877a_I2C.h สำหรับการทำงานกับการสื่อสาร I2C กับ PIC และสุดท้ายคือ PIC16F877a_DS3231.h ไฟล์เพื่อทำงานกับโมดูล RTC ต้องใช้ไฟล์ส่วนหัวทั้งสามไฟล์สำหรับโปรแกรมนี้และมีอยู่ในไฟล์ ZIP ด้านบน เพิ่มเติมด้านล่างนี้ฉันจะอธิบายโปรแกรมหลักที่ใช้ไฟล์ส่วนหัวทั้งหมดนี้เพื่ออ่านเวลาและวันที่จากโมดูล RTC และแสดงบนหน้าจอ LCD หลังจากนั้นฉันจะอธิบายสิ่งที่เกิดขึ้นจริงในไฟล์ส่วนหัว RTC เช่นเคยเริ่มต้นโปรแกรมด้วยการตั้งค่าบิตการกำหนดค่าและตั้งค่าความถี่สัญญาณนาฬิกาเป็น 20MHz เนื่องจากเป็นสิ่งที่เราใช้ในฮาร์ดแวร์
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (เปิดใช้งาน PWRT) # pragma config BOREN = ON // Brown-out Reset Enable bit (เปิดใช้งาน BOR) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 เป็น Digital I / O, HV บน ต้องใช้ MCLR ในการเขียนโปรแกรม) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory อาจเขียนถึงโดยการควบคุมของ EECON) #pragma config CP = OFF // บิตการป้องกันรหัสหน่วยความจำโปรแกรมแฟลช (ปิดการป้องกันรหัส) #define _XTAL_FREQ 20000000
ขั้นตอนต่อไปคือการกำหนดพิน LCDหากคุณมองไปที่ฮาร์ดแวร์คุณจะสังเกตเห็นว่าเราได้เชื่อมต่อพินของ LCD เข้ากับ PORT D จาก RD2 ถึง RD7 ดังนั้นเราจึงกำหนดเช่นเดียวกับที่แสดงด้านล่าง
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
โดยค่าเริ่มต้นเมื่อคุณซื้อ RTC โมดูลเวลาที่ถูกต้องและวันที่จะไม่ได้ตั้งอยู่ในนั้นดังนั้นเราจึงต้องตั้งมันผ่านโปรแกรมของเราดังนั้นเราจึงประกาศตัวแปรสำหรับแต่ละข้อมูลและฟีดในเวลาและวันที่จริงตามที่แสดงด้านล่าง ตอนอัปโหลดโปรแกรมเวลาและวันที่ของฉันคือ 10:55 น. ของวันที่ 6-5-2018 ดังนั้นฉันจึงตั้งค่าตัวแปรตามด้านล่างนี้ คุณสามารถตั้งเวลาและวันที่ที่ถูกต้องตามใบสมัครจริงของคุณ
/ * ตั้งค่าปัจจุบันของวันที่และเวลาด้านล่าง * / int วินาที = 00; int นาที = 55; int ชั่วโมง = 10; int วันที่ = 06; int เดือน = 05; int ปี = 18; / * ตั้งเวลาและวันที่ * /
ต่อไปเราจะเพิ่มไฟล์ส่วนหัวทั้งหมดที่เราพูดถึง หากคุณดาวน์โหลดและเปิดโปรแกรมจากไฟล์ ZIP จะไม่มีปัญหาอย่างอื่นตรวจสอบให้แน่ใจว่าได้เพิ่มไฟล์ส่วนหัวทั้งหมดลงในไฟล์ต้นฉบับหรือไดเรกทอรีโครงการของคุณแล้ว
# รวม
เนื่องจากเราใช้ PORT D เป็นพินเอาต์พุตสำหรับเชื่อมต่อ LCD เราจึงต้องประกาศให้เป็นพินเอาต์พุตในโปรแกรมของเราและเริ่มต้นการแสดงผล LCDดังที่แสดงด้านล่าง
TRISD = 0x00; // สร้างหมุดพอร์ต D เป็นส่วนบนสำหรับการเชื่อมต่อ LCD Lcd_Start (); // เริ่มต้นโมดูล LCD
RTC สื่อสารโมดูลด้วยความช่วยเหลือของโปรโตคอล I2C ดังนั้นเราจึงต้องให้การสื่อสาร I2C ไมโครคอนโทรลเลอร์ อุปกรณ์ส่วนใหญ่รวมถึงโมดูล DS3231 ของเรามีความถี่ในการทำงาน I2C ที่ 100KHz ดังนั้นเราจึงเริ่มการสื่อสาร I2C ด้วยความถี่ 100KHz ดังที่แสดงด้านล่าง
I2C_Initialize (100); // เริ่มต้น I2C Master ด้วยนาฬิกา 100KHz
ทันทีที่เราได้สร้างการสื่อสาร I2C กับ RTC โมดูลสิ่งแรกที่เราทำคือการกำหนดวันและเวลาปัจจุบันที่เราเข้ามาในโปรแกรมของเราสามารถทำได้โดยเรียกใช้ฟังก์ชัน set_Time_Date ดังที่แสดงด้านล่าง เมื่อตั้งเวลาและวันที่แล้วโมดูลจะติดตามโดยอัตโนมัติและเพิ่มขึ้นเช่นเดียวกับนาฬิกาดิจิทัล
Set_Time_Date (); // ตั้งเวลาและวันที่ในโมดูล RTC
เพื่อระบุว่าโปรแกรมเริ่มต้นแล้วเราจะแสดงข้อความแนะนำเล็ก ๆ ซึ่งจะอยู่บนหน้าจอเป็นเวลา 2 วินาที ข้อความนี้จะแสดง RTC พร้อม PIC –Circuit Digest บนหน้าจอ โปรแกรมสำหรับสิ่งเดียวกันแสดงอยู่ด้านล่าง
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("RTC พร้อม PIC"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("-Circuit Digest"); __delay_ms (1500);
ภายในไม่มีที่สิ้นสุดของเรา ในขณะที่ วงเราควรจะอ่านวันและเวลาปัจจุบันแล้วแสดงค่าในหน้าจอ LCD ของเรา ในการอ่านเวลาและวันที่จากโมดูล RTC สามารถใช้ฟังก์ชัน Update_Current_Time_Date ดังที่แสดงด้านล่าง ฟังก์ชันนี้จะอ่านค่าจากโมดูล RTC และอัปเดตตัวแปรวินาทีนาทีชั่วโมงวันที่เดือนและปีด้วยค่าปัจจุบัน จากนั้นเราสามารถใช้ตามวัตถุประสงค์ของเรา
Update_Current_Date_Time (); // อ่านวันที่และเวลาปัจจุบันจากโมดูล RTC
ตัวแปรเป็นชนิดข้อมูลจำนวนเต็มเราต้องแปลงให้เป็นอักขระแต่ละตัวเพื่อให้แสดงบนหน้าจอ LCD ได้ ดังนั้นเราจึงใช้ตัวดำเนินการโมดูลัสเพื่อให้ได้หลักครั้งเดียวและหารตัวแปรด้วย 10 เพื่อให้ได้หลักสิบ เช่นเดียวกันกับตัวแปรทั้งหมด
// แยกเป็นถ่านเพื่อแสดงบน lcd ถ่าน sec_0 = วินาที% 10; ถ่าน sec_1 = (วินาที / 10); ถ่าน min_0 = นาที% 10; ถ่าน min_1 = นาที / 10; ถ่าน hour_0 = ชั่วโมง% 10; ถ่าน hour_1 = ชั่วโมง / 10; ถ่าน date_0 = วันที่% 10; ถ่าน date_1 = วันที่ / 10; ถ่าน month_0 = เดือน% 10; ถ่าน month_1 = เดือน / 10; ถ่าน year_0 = ปี% 10; ถ่าน year_1 = ปี / 10;
ทั้งหมดที่เหลือจะทำคือการแสดงข้อมูลที่เราได้มาในหน้าจอ LCDสิ่งนี้สามารถทำได้อย่างง่ายดายด้วยฟังก์ชั่น LCD ที่เราได้พูดถึงก่อนหน้านี้ในบทช่วยสอน LCD ของเรา ดังนั้นรหัสในการแสดงเวลาจึงถูกระบุไว้ด้านล่างจึงใช้วิธีเดียวกันนี้ในการแสดงวันที่เช่นกัน จะมีการหน่วงเวลา 500 ms หลังจากแสดงข้อมูลเพื่อให้ทำหน้าที่เป็นช่วงเวลาการอัปเดต
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("TIME:"); Lcd_Print_Char (hour_1 + '0'); Lcd_Print_Char (ชั่วโมง _0 + '0'); Lcd_Print_Char (':'); Lcd_Print_Char (min_1 + '0'); Lcd_Print_Char (min_0 + '0'); Lcd_Print_Char (':'); Lcd_Print_Char (sec_1 + '0'); Lcd_Print_Char (sec_0 + '0');
คำอธิบายโดยย่อของไฟล์ส่วนหัว PIC16F877a_DS3231.h:
สิ่งที่อธิบายจนถึงตอนนี้เพียงพอที่จะใช้โมดูล DS3231 กับ PIC สำหรับโครงการของคุณเอง แต่สำหรับคนที่อยากรู้อยากเห็นอยากรู้ว่าเกิดอะไรขึ้นในไฟล์ส่วนหัวและข้อมูลนั้นได้รับจริงจากโมดูล RTC โดย PIC เพียงแค่ อ่านเพิ่มเติม
วิธีที่ดีที่สุดในการแก้ไขปัญหานี้คือการอ่านเอกสารข้อมูลของ DS3231 ให้ครบถ้วน เพื่อให้ข้อมูลสั้น ๆ เกี่ยวกับสิ่งที่จำเป็นโมดูลจะทำหน้าที่เป็นทาสของ PIC และที่อยู่ของโมดูล DS3231 ทั้งหมดคือ D0 ดังนั้นเขียนข้อมูลลงในโมดูลเราต้องส่งที่อยู่ D0 และในการอ่านข้อมูลจาก RTC เราต้องส่งที่อยู่ D1 หากเราส่งที่อยู่การเขียนไปยังโมดูล RTC เราจะเตรียมรับข้อมูลจาก PIC ดังนั้นข้อมูลที่ตามมาที่เขียนโดย PIC จะได้รับและบันทึกไว้ในโมดูล RTC ในทำนองเดียวกันถ้าเราส่งที่อยู่สำหรับอ่านจากนั้น PIC ควรเตรียมพร้อมที่จะอ่านค่าจาก RTC เนื่องจากโมดูล RTC จะเริ่มส่งข้อมูลทั้งหมดที่มี ลำดับบิตสำหรับทั้ง D0 และ D1 แสดงอยู่ด้านล่างจากแผ่นข้อมูล สังเกตที่อยู่ 0b11010000 ย่อมาจาก D0 (Write) และ 0b11010001 ย่อมาจาก D01 (Read)
เมื่อ PIC ส่งที่อยู่ D0 หรือ D1 เพื่อเขียนหรืออ่านข้อมูลต่อไปนี้ควรอ่านหรือเขียนตามลำดับ คำสั่งนี้แสดงในตารางด้านล่าง ดังนั้นข้อมูลแรกจะเป็นวินาที (00 ชม.) ตามด้วยนาที (01 ชม.) ตามด้วยชั่วโมง (02 ชม.) ตามด้วยวัน (03 ชม.) และไม่เกิน MSB ของอุณหภูมิ
โมดูล RTC ไม่เข้าใจค่าทศนิยมจะสื่อสารผ่านค่า BCD เท่านั้น ดังนั้นก่อนที่จะเขียนค่าใด ๆ ลงในโมดูล RTC ควรแปลงเป็น BCD และค่าที่ได้รับจากโมดูล RTC จะอยู่ในรูปแบบ BCD และควรแปลงเป็นทศนิยมเพื่อให้เหมาะสมกับเรา ด้วยเหตุนี้ให้สร้างฟังก์ชันทั้งหมดที่จำเป็นสำหรับการใช้โมดูล RTC
ฟังก์ชัน BCD_2_DEC และ DEC_2_BCD:
ฟังก์ชั่นสองคนแรกจะใช้ในการแปลงข้อมูล BCD เพื่อทศนิยมและข้อมูลทศนิยมให้ BCD ตั้งแต่โมดูล RTC เข้าใจเพียง BCD สูตรในการแปลง BCD เป็นทศนิยมและสำหรับ BCD เป็นทศนิยมคือ
ทศนิยม = (BCD >> 4) * 10 + (BCD & 0x0F) BCD = ((ทศนิยม / 10) << 4) + (ทศนิยม% 10)
เราต้องใช้สองสูตรนี้เพื่อสร้างฟังก์ชันที่ใช้หน่วยตรงข้ามเป็นพารามิเตอร์และแปลงเป็นรูปแบบที่ต้องการและส่งคืนฟังก์ชันสำหรับการทำเช่นเดียวกันดังแสดงด้านล่าง
int BCD_2_DEC (int to_convert) { return (to_convert >> 4) * 10 + (to_convert & 0x0F); } int DEC_2_BCD (int to_convert) { return ((to_convert / 10) << 4) + (to_convert% 10); }
ฟังก์ชัน Set_Time_Date ():
ฟังก์ชั่นนี้จะเขียนค่าของเวลาและวันที่จาก PIC ในโมดูล ค่าของเวลาจริงและวันที่จะต้องได้รับการอัปเดตในตัวแปรวินาทีนาทีชั่วโมงวันที่เดือนและปีโดยผู้ใช้ จากนั้นค่าเหล่านี้จะถูกแปลงเป็น BCD และเขียนลงในโมดูล RTC
ดังที่เราได้กล่าวไปแล้วในการเขียนค่าไปยังโมดูล RTC เราต้องส่งที่อยู่ D0 และเขียนบูลบิต 0 เพื่อเริ่มกระบวนการเขียน จากนั้นเราสามารถส่งข้อมูลตามลำดับดังตารางด้านบน
เป็นโมฆะ Set_Time_Date () { I2C_Begin (); I2C_Write (0xD0); I2C_Write (0); I2C_Write (DEC_2_BCD (วินาที)); // อัปเดตวินาที I2C_Write (DEC_2_BCD (นาที)); // อัปเดตขั้นต่ำ I2C_Write (DEC_2_BCD (ชั่วโมง)); // อัปเดตชั่วโมง I2C_Write (1); // ละเว้นการอัปเดตวัน I2C_Write (DEC_2_BCD (วันที่)); // วันที่อัปเดต I2C_Write (DEC_2_BCD (เดือน)); // อัปเดตเดือน I2C_Write (DEC_2_BCD (ปี)); // อัพเดทปี I2C_End (); }
Update_Current_Date_Time () ฟังก์ชัน:
ฟังก์ชันสุดท้ายในไลบรารีคือฟังก์ชันที่ใช้ในการอ่านเวลาและวันที่จากโมดูล RTC และส่งต่อไปยังไมโครคอนโทรลเลอร์ PIC ฟังก์ชั่นนี้แบ่งออกเป็นสามส่วนโดยหนึ่งเพื่อเริ่มต้นกระบวนการอ่านที่สองเพื่ออ่านค่าและบันทึกลงในตัวแปรส่วนกลางเช่นวินาทีนาทีชั่วโมงวันที่เดือนและปี และประการที่สามคือการยอมรับว่าการอ่านประสบความสำเร็จ
โปรดสังเกตว่าสำหรับการดำเนินการแต่ละครั้งการสื่อสาร I2C ควรเริ่มต้นและสิ้นสุด
ในการอ่านค่าจาก RTC เราต้องส่งที่อยู่ D0 ตามด้วย 0 สิ่งนี้จะทำให้โมดูล RTC ส่งค่าทั้งหมดที่มีตามลำดับที่แสดงในตารางด้านบน เราสามารถอ่านมันแปลงเป็นทศนิยมและบันทึกลงในตัวแปรตามลำดับเดียวกัน
สุดท้ายหลังจากการอ่านเสร็จสิ้นโมดูล RTC จะส่งบิตการตอบรับซึ่งควรอ่านและรับทราบด้วย
โมฆะ Update_Current_Date_Time () { // เริ่มอ่าน I2C_Begin (); I2C_Write (0xD0); I2C_Write (0); I2C_End (); // อ่านI2C_Begin (); I2C_Write (0xD1); // เริ่มต้นข้อมูลอ่านวินาที = BCD_2_DEC (I2C_Read (1)); นาที = BCD_2_DEC (I2C_Read (1)); ชั่วโมง = BCD_2_DEC (I2C_Read (1)); I2C_Read (1); วันที่ = BCD_2_DEC (I2C_Read (1)); เดือน = BCD_2_DEC (I2C_Read (1)); ปี = BCD_2_DEC (I2C_Read (1)); I2C_End (); // สิ้นสุดการอ่านI2C_Begin (); I2C_Write (0xD1); // เริ่มต้นข้อมูลอ่านI2C_Read (1); I2C_End (); }
จำลองสถานการณ์:
สามารถจำลองโครงการได้โดยใช้ซอฟต์แวร์จำลอง Proteus ทำการเชื่อมต่อตามที่แสดงในแผนภาพวงจรและโหลดไฟล์ฐานสิบหกไปยังตัวควบคุม PIC เมื่อคุณจำลองขึ้นคุณจะพบกล่องป๊อปอัปสองกล่องและวันที่และเวลาแสดงบนจอ LCD ดังที่แสดงด้านล่าง
อันเล็กที่ด้านบนจะแสดงเวลาและวันที่ที่เป็นปัจจุบันภายในโมดูล RTC และป๊อปอัปที่สองคือตัวดีบักเกอร์ I2C เป็นเครื่องมือที่ยอดเยี่ยมในการตรวจสอบข้อมูลที่ส่งผ่านเข้าและออกจากจุดบกพร่องของ I2C
แสดงเวลาและวันที่บน LCD:
เมื่อฮาร์ดแวร์ของคุณพร้อมและดาวน์โหลดรหัสเป็นไฟล์ ZIP ผ่านลิงค์ที่ให้มาเปิดโปรแกรมโดยใช้ MPLABX IDE คุณต้องเปิด IDE ก่อนและใช้ตัวเลือกเปิดโปรเจ็กต์แล้วเรียกดูเนื้อหาภายในไฟล์ ZIP และเปิดโฟลเดอร์. X
เพียงตรวจสอบว่าโปรแกรมรวบรวมและอัปโหลดโค้ดไปยังฮาร์ดแวร์ของคุณหรือไม่โดยใช้ PicKit3 ทันทีที่อัปโหลดโปรแกรมคุณจะเห็นข้อความแนะนำตัวจากนั้นเวลาและวันที่ควรจะแสดงดังที่แสดงด้านล่าง
หากไม่มีสิ่งใดบน LCD ให้ตรวจสอบการเชื่อมต่อของคุณและตรวจสอบให้แน่ใจว่าระดับความคมชัดถูกตั้งค่าไว้อย่างถูกต้องโดยการเปลี่ยนโพเทนชิออมิเตอร์ นั่นคือวิธีที่คุณสามารถแสดงเวลาและวันที่สำหรับโครงการไมโครคอนโทรลเลอร์ PIC ทั้งหมดของคุณและสามารถใช้เป็นนาฬิกาดิจิตอลได้ หวังว่าคุณจะได้เรียนรู้สิ่งใหม่ ๆ และสนุกกับการเรียนบทช่วยสอนนี้ หากคุณประสบปัญหาใด ๆ ให้โพสต์ไว้ในความคิดเห็นด้านล่างหรือในฟอรัมเพื่อขอความช่วยเหลือด้านเทคนิค
ดาวน์โหลดโปรแกรม PIC ที่สมบูรณ์สำหรับโครงการนี้พร้อมไฟล์ส่วนหัวจากที่นี่และตรวจสอบบทช่วยสอน PIC ทั้งหมดของเราได้ที่นี่