- วัสดุที่ต้องการ:
- RTC คืออะไร ??
- การเชื่อมต่อ DS3231 RTC กับ MSP430:
- การเขียนโปรแกรม MSP430 สำหรับโมดูล RTC:
ในบทช่วยสอนนี้เราจะสร้างนาฬิกาดิจิตอลโดยเชื่อมต่อโมดูล RTC DS3231 กับ MSP430และแสดงเวลาและวันที่บนจอ LCD 16x2 MSP-EXP430G2 เป็นเครื่องมือสำหรับการพัฒนาหรือที่รู้จักกันในชื่อ LaunchPad ที่จัดทำโดย Texas Instruments เพื่อเรียนรู้และฝึกฝนการใช้ไมโครคอนโทรลเลอร์ บอร์ดนี้อยู่ภายใต้หมวดหมู่ MSP430 Value Line ซึ่งเราสามารถตั้งโปรแกรมไมโครคอนโทรลเลอร์ MSP430 ซีรีส์ทั้งหมดได้ หากคุณยังใหม่กับ MSP ให้ตรวจสอบการเริ่มต้นใช้งาน MSP430 บทช่วยสอนของเรา
วัสดุที่ต้องการ:
- MSP430
- โมดูล DS3231 RTC
- พอท -10k
- โมดูล LCD 16 * 2
- การเชื่อมต่อสายไฟ
- เขียงหั่นขนม
RTC คืออะไร ??
DS3231 เป็นโมดูล RTC (นาฬิกาเวลาจริง) ใช้เพื่อรักษาวันที่และเวลาสำหรับโครงการอิเล็กทรอนิกส์ส่วนใหญ่ โมดูลนี้มีแหล่งจ่ายไฟเซลล์แบบเหรียญของตัวเองโดยใช้ซึ่งจะรักษาวันที่และเวลาแม้ว่าจะถอดไฟหลักออกหรือ MCU ผ่านการฮาร์ดรีเซ็ตแล้วก็ตาม ดังนั้นเมื่อเราตั้งวันที่และเวลาในโมดูลนี้ระบบจะติดตามมันอยู่เสมอ RTC IC มีหลายประเภทเช่น DS1307, DS3231 เป็นต้น
ก่อนหน้านี้เราเคยใช้ RTC กับไมโครคอนโทรลเลอร์อื่น ๆ ในโครงการด้านล่าง:
หมายเหตุ: เมื่อใช้โมดูลนี้เป็นครั้งแรกคุณต้องตั้งวันที่และเวลา คุณยังสามารถใช้ RTC IC DS1307 ซึ่งก่อนหน้านี้เราเคยใช้ DS1307 กับ Arduino
การเชื่อมต่อ DS3231 RTC กับ MSP430:
แผนภาพวงจรสำหรับ นาฬิกาดิจิตอลที่ใช้ไมโครคอนโทรลเลอร์ MSP430 แสดง ไว้ด้านล่าง อย่างที่บอกไปก่อนหน้านี้ DS3231 ทำงานด้วยความช่วยเหลือของการสื่อสาร I2C ดังนั้นจึงมี Serial Clock (SCL) และ Serial Data (SDA) pin ซึ่งจะต้องเชื่อมต่อกับพิน I2C บน MSP430 ของเราซึ่งเป็นพิน 9 (PIN 2.1, SCL) และพิน 10 (PIN 2.2, SDA)
MSP430 ให้ 3.3V Vcc แต่เราต้องการ 5V เพื่อเชื่อมต่อกับโมดูล LCD และ RTC ดังนั้นเราจะใช้แฮ็คมีจัมเปอร์ที่มีชื่อว่า TP1 ใกล้ขั้วต่อสาย USB คุณสามารถใช้ 5V จากที่นั่น
แผนภูมิวงจรรวม:
การเขียนโปรแกรม MSP430 สำหรับโมดูล RTC:
ที่นี่เรากำลังใช้ Energia IDE สำหรับการเขียนโปรแกรม เหมือนกับ Arduino IDE และใช้งานง่าย หากคุณยังใหม่กับ MSP และ Energia ให้เริ่มต้นด้วย MSP โดยใช้ Energia IDE ในการเชื่อมต่อโมดูล RTC เราต้องการไลบรารีสำหรับบอร์ดนี้ ดาวน์โหลดห้องสมุด RTC จากลิงค์นี้และติดตั้ง
เรายังต้องการ Wire (ใช้สำหรับการสื่อสาร I2C) และไลบรารี liquidcrystal ซึ่งติดตั้งไว้ล่วงหน้าใน Energia IDE
รหัสที่สมบูรณ์สำหรับนาฬิกาดิจิตอล MSP430 นี้มีให้ในตอนท้ายของบทความนี้ รหัสเป็นเรื่องง่ายและเข้าใจได้ง่าย เรากำลังอธิบายบางส่วนของมัน
อันดับแรกเราต้องรวมไลบรารีที่จำเป็น
ด้านล่างไลบรารีสำหรับการสื่อสาร I2C ระหว่างโมดูล RTC และ MSP430 หมุด SDA และ SCK ถูกกำหนดไว้แล้วในไลบรารีนี้ดังนั้นเราจึงไม่จำเป็นต้องประกาศพินเหล่านี้แยกกัน
# รวม
จากนั้นเราได้รวมไลบรารี RTClib.h สำหรับนาฬิกา RTC และ LiquidCrystal.h สำหรับฟังก์ชัน LCD
# รวม "RTClib.h" # รวม
หลังจากนี้เราต้องสร้างอินสแตนซ์เพื่อเริ่มต้นโมดูล RTC ของเรา
RTC_DS3231 rtc;
จากนั้นสร้างอาร์เรย์ขนาด 7 และจัดเก็บทั้งเจ็ดวันโดยมีชื่ออยู่ในนั้น
ถ่าน daysOfTheWeek = {"วันอาทิตย์", "วันจันทร์", "วันอังคาร", "วันพุธ", "วันพฤหัสบดี", "วันศุกร์", "วันเสาร์"};
นี่คือการประกาศ Pins ของ MSP430 ที่จะใช้กับจอแสดงผล LCD: (RS (P2.0), EN (P1.4), D4 (P1.5), D5 (P2.3), D6 (P2.4), D7 (P2.5))
LiquidCrystal LCD (8, 6, 7,11,12,13);
ใน โมฆะการตั้งค่า () , เราได้เริ่มต้นได้ติดต่อไปยังหน้าจอแอลซีดีและ RTC และระบุขนาด (กว้างและความสูง) ของจอแสดงผล จะเริ่มต้น ()
จะต้องมีการเรียกว่าก่อนคำสั่งห้องสมุดอื่น ๆ
การตั้งค่าเป็นโมฆะ () { lcd.begin (16, 2); lcd.setCursor (3,0); lcd.print ("นาฬิกา RTC"); ล่าช้า (3000); lcd.clear (); rtc.begin (); // rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); }
ตอนนี้เวลาที่แสดงบนหน้าจอถูกต้อง แต่มีปัญหาทุกครั้งที่คุณรีสตาร์ท / รีเซ็ตไมโครคอนโทรลเลอร์ LCD จะแสดงเวลาที่คุณอัปโหลดรหัส เนื่องจากฟังก์ชั่น rtc.adjust () ได้จัดเก็บเวลาของคอมพิวเตอร์ของคุณดังนั้นเมื่อคุณรีเซ็ตฟังก์ชันนี้จะเริ่มต้นด้วยเวลานั้น
ในการแก้ไขปัญหานี้ขั้นแรกให้อัปโหลดโปรแกรมด้วยฟังก์ชั่น rtc.adjust () ที่ไม่มี การใส่ข้อคิดเห็น จากนั้นแสดงความคิดเห็นในบรรทัดเดียวกันทันทีและอัปโหลดโปรแกรมอีกครั้ง ตอนนี้วันที่และเวลาของคุณถูกตั้งค่าแล้วและจะไม่ได้รับผลกระทบจากการรีเซ็ตไมโครคอนโทรลเลอร์
ใน วง ฟังก์ชั่นที่เราใช้เวลาวันที่และเวลาจากโมดูล RTC และเก็บในตัวแปรที่กำหนดไว้ล่วงหน้าที่เรียกว่า ตอนนี้ และแสดงผลบนหน้าจอ LCD ใช้ lcd.print () ฟังก์ชั่น
โมฆะ loop () { DateTime now = rtc.now (); lcd.clear (); lcd.setCursor (3,0); lcd.print (now.day (), ธันวาคม); lcd.print ("/"); …. …….
รหัสที่สมบูรณ์และวิดีโอได้รับด้านล่าง