RTC เป็นอุปกรณ์อิเล็กทรอนิกส์ที่มีบทบาทสำคัญใน การออกแบบระบบฝังตัวแบบเรียลไทม์ . ให้เวลาและวันที่ที่แม่นยำในแอปพลิเคชั่นต่างๆเช่นนาฬิการะบบระบบการเข้าเรียนของนักเรียนและนาฬิกาปลุกเป็นต้นซึ่งจะติดตามเวลาปัจจุบันและให้ผลลัพธ์ที่สอดคล้องกันกับงานนั้น ๆ บทความนี้นำเสนอการเชื่อมต่อ RTC กับ 8051microcotrolle และการเข้าถึงขั้นพื้นฐานของการลงทะเบียนภายใน
การเชื่อมต่อ RTC กับไมโครคอนโทรลเลอร์ 8051
การเขียนโปรแกรม RTC และการเชื่อมต่อ
การเชื่อมต่อ RTC กับไมโครคอนโทรลเลอร์ 8051 นั้นคล้ายกับ“ นาฬิกาเรียลไทม์” ทุกชนิดที่เชื่อมต่ออยู่ ดังนั้นให้เราดูการเชื่อมต่อ RTC แบบง่าย ๆ ไมโครคอนโทรลเลอร์ 8051 และขั้นตอนการเขียนโปรแกรมที่เกี่ยวข้อง
ขั้นตอนที่ 1: เลือกอุปกรณ์ RTC
ชิป RTC ชนิดต่างๆมีอยู่ในโลกฝังตัวแบบเรียลไทม์ซึ่งจำแนกตามเกณฑ์ต่างๆเช่นประเภทบรรจุภัณฑ์แรงดันไฟฟ้าและการกำหนดค่าพินเป็นต้นอุปกรณ์ RTC บางประเภท ได้แก่
- อินเทอร์เฟซแบบอนุกรมสองสาย (บัส I2C)
- อินเทอร์เฟซแบบอนุกรมสามสาย (USB BUS)
- อินเทอร์เฟซแบบอนุกรมสี่สาย (SPI BUS)
ขั้นแรกเราต้องเลือกประเภทของอุปกรณ์ RTC ตามหมวดหมู่ตามข้อกำหนดเช่น I2C Bus RTC หรือ SPI Bus RTC หรืออื่น ๆ ที่เหมาะสมกับการเชื่อมต่อกับไมโครคอนโทรลเลอร์ตามลำดับ จากนั้นเราสามารถเลือกคุณสมบัติของอุปกรณ์ RTC ขึ้นอยู่กับความต้องการของการใช้งานเช่นอายุการใช้งานแบตเตอรี่แพ็คเกจที่เหมาะสมและความถี่สัญญาณนาฬิกา ให้เราพิจารณาการเชื่อมต่อแบบสองสาย RTC กับไมโครคอนโทรลเลอร์ 8051 เช่น DS1307 .
ขั้นตอนที่ 2: การลงทะเบียนภายในและที่อยู่ของอุปกรณ์ RTC
RTC ย่อมาจากนาฬิกาแบบเรียลไทม์ซึ่งแสดงปีเดือนสัปดาห์วันชั่วโมงนาทีและวินาทีตามความถี่คริสตัล RTC ประกอบด้วย inbuilt หน่วยความจำ RAM สำหรับจัดเก็บข้อมูล . จะมีการสำรองแบตเตอรี่ในกรณีที่แหล่งจ่ายไฟหลักขัดข้องโดยเชื่อมต่อแบตเตอรี่กับอุปกรณ์ RTC
การกำหนดค่า RTC DB1307:
RTC Internal Blocks และ Pin Diagram
A0, A1, A2: เป็นพินแอดเดรสของชิป RTC DB1307 ซึ่งสามารถใช้สื่อสารกับอุปกรณ์หลัก เราสามารถควบคุมอุปกรณ์แปดเครื่องที่มีการเชื่อมต่อ RTC ด้วย ไมโครคอนโทรลเลอร์ 8051 โดย A0, A1, A2 บิตโดยใช้โปรโตคอล I2C
VCC และ GND: VCC และ GND เป็นแหล่งจ่ายไฟและหมุดกราวด์ตามลำดับ อุปกรณ์นี้ทำงานด้วยช่วง 1.8V ถึง 5.5V
VBT: VBT คือขาจ่ายไฟของแบตเตอรี่ แหล่งพลังงานแบตเตอรี่ต้องอยู่ระหว่าง 2V ถึง 3.5V
SCL: SCL เป็นพินนาฬิกาอนุกรมและใช้เพื่อซิงโครไนซ์ข้อมูลบนอินเทอร์เฟซแบบอนุกรม
SDL: เป็นพินอินพุตและเอาต์พุตแบบอนุกรม ใช้ในการส่งและรับข้อมูลบนอินเทอร์เฟซแบบอนุกรม
นาฬิกาออก: เป็นพินเอาต์พุตคลื่นสี่เหลี่ยมที่เป็นอุปกรณ์เสริม
OSC0 และ OSC1: นี่คือพินคริสตัลออสซิลเลเตอร์ซึ่งใช้เพื่อส่งสัญญาณนาฬิกาไปยังอุปกรณ์ RTC ความถี่ผลึกควอตซ์มาตรฐานคือ 22.768KHzs
ที่อยู่อุปกรณ์:
โปรโตคอลบัส I2C อนุญาตให้มีอุปกรณ์ทาสจำนวนมากพร้อมกัน อุปกรณ์ทาสทุกชิ้นต้องประกอบด้วยที่อยู่ของตัวเองเพื่อแสดงบนอุปกรณ์นั้น อุปกรณ์หลักสื่อสารกับอุปกรณ์ทาสโดยเฉพาะตามที่อยู่ ที่อยู่อุปกรณ์ RTC คือ“ 0xA2” โดยที่“ 1010” ได้รับจากผู้ผลิตและ A0, A1, A2 เป็นที่อยู่ที่ผู้ใช้กำหนดซึ่งใช้ในการสื่อสารอุปกรณ์ RTC แปดเครื่องบน โปรโตคอลบัส I2C .
การเพิ่มอุปกรณ์
R / W bit ใช้เพื่อดำเนินการอ่านและเขียนใน RTC ถ้า R / W = 0 จะดำเนินการเขียนและ R / W = 1 สำหรับการอ่าน
ที่อยู่ของการดำเนินการอ่านของ RTC =“ 0xA3”
ที่อยู่ของการดำเนินการเขียนของ RTC =“ 0xA2”
รีจิสเตอร์หน่วยความจำและที่อยู่:
การลงทะเบียน RTC ตั้งอยู่ในตำแหน่งที่อยู่ตั้งแต่ 00h ถึง 0Fh และการลงทะเบียนหน่วยความจำ RAM จะอยู่ในตำแหน่งที่อยู่ตั้งแต่ 08h ถึง 3Fh ดังแสดงในรูป การลงทะเบียน RTC ใช้เพื่อให้ฟังก์ชันปฏิทินและเวลาขับเคลื่อนของวันและเพื่อแสดงวันหยุดสุดสัปดาห์
รีจิสเตอร์หน่วยความจำและที่อยู่
การควบคุม / การลงทะเบียนสถานะ:
DB1307 ประกอบด้วยการลงทะเบียนเพิ่มเติมสองรายการเช่น control / status1 และ control / status2 ซึ่งใช้เพื่อควบคุมนาฬิกาเวลาจริงและ ขัดจังหวะ .
การควบคุม / การลงทะเบียนสถานะ 1:
ทะเบียนสถานะการควบคุม 1
- TEST1 = 0 โหมดปกติ
= 1 โหมดทดสอบ EXT-clock
- STOP = 0 RTC เริ่มต้น
= 1 หยุด RTC
- TESTC = 0 เปิดปิดการรีเซ็ต
= เปิดใช้งานการรีเซ็ต
ควบคุม / ลงทะเบียนสถานะ 2:
ลงทะเบียนสถานะการควบคุม 2
- TI / TP = 0 INT ใช้งานตลอดเวลา
= 1 INT เวลาที่ต้องการใช้งาน
- AF = 0 การเตือนไม่ตรงกัน
= 1 นาฬิกาปลุกที่ตรงกัน
- TF = 0 Timer overflow ไม่เกิดขึ้น
= 1 Timer overflow เกิดขึ้น
- ALE = 0 การแจ้งเตือนขัดจังหวะปิดใช้งาน
= 1 เปิดใช้งานการขัดจังหวะการเตือนภัย
- TIE = 0 ตัวจับเวลาขัดจังหวะปิดใช้งาน
= 1 ตัวจับเวลาขัดจังหวะเปิดใช้งาน
ขั้นตอนที่ 3: การเชื่อมต่อ RTC ds1307 กับ 8051
RTC ได้ เชื่อมต่อกับไมโครคอนโทรลเลอร์ โดยใช้โปรโตคอลบัสอนุกรมที่แตกต่างกันเช่น I2C และ โปรโตคอล SPI ที่ให้การเชื่อมโยงการสื่อสารระหว่างกัน ภาพแสดงนาฬิกาเรียลไทม์ที่เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051 โดยใช้โปรโตคอลบัส I2C I2C เป็นโปรโตคอลอนุกรมแบบสองทิศทางซึ่งประกอบด้วยสายไฟสองเส้นเช่น SCL และ SDA เพื่อถ่ายโอนข้อมูลระหว่างอุปกรณ์ที่เชื่อมต่อกับบัส ไมโครคอนโทรลเลอร์ 8051 ไม่มีอุปกรณ์ RTC ในตัวดังนั้นเราจึงเชื่อมต่อภายนอกผ่านไฟล์ การสื่อสารแบบอนุกรม เพื่อให้มั่นใจว่าข้อมูลประกอบด้วย
การเชื่อมต่อ RTC กับไมโครคอนโทรลเลอร์ 8051
อุปกรณ์ I2C มีเอาต์พุตท่อระบายน้ำแบบเปิดดังนั้นตัวต้านทานแบบดึงขึ้นจะต้องเชื่อมต่อกับสายบัส I2C ด้วยแหล่งแรงดันไฟฟ้า หากตัวต้านทานไม่ได้เชื่อมต่อกับสาย SCL และ SDL บัสจะไม่ทำงาน
ขั้นตอนที่ 4: รูปแบบกรอบข้อมูล RTC
เนื่องจาก RTC เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051 ใช้บัส I2C ดังนั้นการถ่ายโอนข้อมูลจึงอยู่ในรูปแบบของไบต์หรือแพ็กเก็ตและแต่ละไบต์จะตามด้วยการตอบรับ
การส่งกรอบข้อมูล:
ในโหมดการส่งข้อมูลต้นแบบจะปล่อยเงื่อนไขการเริ่มต้นหลังจากเลือกอุปกรณ์ทาสตามบิตแอดเดรส บิตแอดเดรสประกอบด้วย 7 บิตซึ่งระบุอุปกรณ์ทาสเป็นที่อยู่ ds1307 ข้อมูลอนุกรมและนาฬิกาอนุกรมจะถูกส่งบนสาย SCL และ SDL เงื่อนไข START และ STOP ถือเป็นจุดเริ่มต้นและสิ้นสุดของการถ่ายโอนแบบอนุกรม การดำเนินการรับและส่งตามด้วยบิต R / W
การส่งเฟรมข้อมูล
เริ่ม: โดยพื้นฐานแล้วลำดับการถ่ายโอนข้อมูลที่เริ่มต้นโดยต้นแบบที่สร้างเงื่อนไขเริ่มต้น
ที่อยู่ 7 บิต: หลังจากนั้นต้นแบบจะส่งที่อยู่ทาสในรูปแบบ 8 บิตสองรูปแบบแทนที่จะเป็นที่อยู่ 16 บิตเดียว
ที่อยู่ควบคุม / ลงทะเบียนสถานะ: ที่อยู่การควบคุม / การลงทะเบียนสถานะคือการอนุญาตให้ลงทะเบียนสถานะการควบคุม
การควบคุม / การลงทะเบียนสถานะ 1: ทะเบียนสถานะการควบคุม 1 ใช้เพื่อเปิดใช้งานอุปกรณ์ RTC
ควบคุม / ลงทะเบียนสถานะ 2: ใช้เพื่อเปิดและปิดการขัดจังหวะ
R / W: หากบิตการอ่านและเขียนอยู่ในระดับต่ำการดำเนินการเขียนจะดำเนินการ
อนิจจา: หากดำเนินการเขียนในอุปกรณ์ Slave เครื่องรับจะส่ง ACK แบบ 1 บิตไปยังไมโครคอนโทรลเลอร์
หยุด: หลังจากเสร็จสิ้นการดำเนินการเขียนในอุปกรณ์ทาสไมโครคอนโทรลเลอร์จะส่งเงื่อนไขการหยุดไปยังอุปกรณ์ทาส
รับกรอบข้อมูล:
การรับ Data Frame
เริ่ม: โดยพื้นฐานแล้วลำดับการถ่ายโอนข้อมูลที่เริ่มต้นโดยต้นแบบที่สร้างเงื่อนไขเริ่มต้น
ที่อยู่ 7 บิต: หลังจากนั้นต้นแบบจะส่งที่อยู่ทาสในรูปแบบ 8 บิตสองรูปแบบแทนที่จะเป็นที่อยู่ 16 บิตเดียว
ที่อยู่ควบคุม / ลงทะเบียนสถานะ: ที่อยู่การควบคุม / การลงทะเบียนสถานะคือการอนุญาตให้ลงทะเบียนสถานะการควบคุม
การควบคุม / การลงทะเบียนสถานะ 1: การลงทะเบียนสถานะการควบคุม 1 ที่ใช้เพื่อเปิดใช้งานอุปกรณ์ RTC
ควบคุม / ลงทะเบียนสถานะ 2: ใช้เพื่อเปิดและปิดการขัดจังหวะ
R / W: หากบิตการอ่านและเขียนสูงการดำเนินการอ่านจะดำเนินการ
อนิจจา: หากดำเนินการเขียนในอุปกรณ์ Slave เครื่องรับจะส่ง ACK แบบ 1 บิตไปยังไมโครคอนโทรลเลอร์
หยุด: หลังจากเสร็จสิ้นการดำเนินการเขียนในอุปกรณ์ทาสไมโครคอนโทรลเลอร์จะส่งเงื่อนไขการหยุดไปยังอุปกรณ์ทาส
ขั้นตอนที่ 5: การเขียนโปรแกรม RTC
เขียนการดำเนินการจาก Master to Slave:
- ออกเงื่อนไขการเริ่มต้นจากต้นแบบเป็นทาส
- ถ่ายโอนที่อยู่ทาสในโหมดเขียนบนบรรทัด SDL
- ส่งที่อยู่ทะเบียนควบคุม
- ส่ง control / status register1value
- ส่งค่า control / status register2
- ส่งวันที่ของนาทีวินาทีและชั่วโมงที่ชอบ
- ส่งบิตหยุด
# รวม
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
เริ่มต้นเป็นโมฆะ ()
โมฆะโฮสต์ (ถ่านที่ไม่ได้ลงชื่อ)
ล่าช้า (ถ่านที่ไม่ได้ลงชื่อ)
เป็นโมฆะ main ()
{
เริ่มต้น ()
เขียน (0xA2) // ที่อยู่ทาส //
เขียน (0x00) // ควบคุมที่อยู่ลงทะเบียน //
เขียน (0x00) // ควบคุมรีจิสเตอร์ 1 ค่า //
เขียน (0x00) // ควบคุม regiter2 vlaue //
เขียน (0x28) // ค่าวินาที //
เขียน (0x50) // ค่านาที //
เขียน (0x02) // ค่าชั่วโมง //
}
เริ่มต้นเป็นโมฆะ ()
{
SDA = 1 // การประมวลผลข้อมูล //
SCL = 1 // นาฬิกาสูง //
ล่าช้า (100)
SDA = 0 // ส่งข้อมูล //
ล่าช้า (100)
SCL = 0 // สัญญาณนาฬิกาต่ำ //
}
เขียนเป็นโมฆะ (ถ่าน d ที่ไม่ได้ลงชื่อ)
{
ถ่าน k ที่ไม่ได้ลงชื่อ, j = 0 × 80
สำหรับ (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
ล่าช้า (4)
SCL = 0
}
SDA = 1
SCL = 1
ล่าช้า (2)
c = SDA
ล่าช้า (2)
SCL = 0
}
ความล่าช้าเป็นโมฆะ (int p)
{
ไม่ได้ลงนามข
สำหรับ (a = 0a<255a++) //delay function//
สำหรับ (b = 0b
อ่านการดำเนินการจาก Slave to Master:
# รวม
sbit SCL = P2 ^ 5
sbit SDA = P2 ^ 6
เริ่มต้นเป็นโมฆะ ()
เขียนเป็นโมฆะ (ถ่าน usigned)
เป็นโมฆะอ่าน ()
เป็นโมฆะ ack ()
ความล่าช้าเป็นโมฆะ (ถ่านที่ไม่ได้ลงชื่อ)
เป็นโมฆะ main ()
{
เริ่มต้น ()
เขียน (0xA3) // ที่อยู่ทาสในโหมดอ่าน //
อ่าน()
อนิจจา()
วินาที = ค่า
}
เริ่มต้นเป็นโมฆะ ()
{
SDA = 1 // การประมวลผลข้อมูล //
SCL = 1 // นาฬิกาสูง //
ล่าช้า (100)
SDA = 0 // ส่งข้อมูล //
ล่าช้า (100)
SCL = 0 // สัญญาณนาฬิกาต่ำ //
}
เขียนเป็นโมฆะ (ถ่าน d ที่ไม่ได้ลงชื่อ)
{
ถ่าน k ที่ไม่ได้ลงชื่อ, j = 0 × 80
สำหรับ (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
ล่าช้า (4)
SCL = 0
}
SDA = 1
SCL = 1
ล่าช้า (2)
c = SDA
ล่าช้า (2)
SCL = 0
}
ความล่าช้าเป็นโมฆะ (int p)
{
ไม่ได้ลงนามข
สำหรับ (a = 0a<255a++) //delay function//
สำหรับ (b = 0b
อ่านเป็นโมฆะ ()
{
ถ่านที่ไม่ได้ลงนาม j, z = 0 × 00, q = 0 × 80
SDA = 1
สำหรับ (j = 0j<8j++)
{
SCL = 1
ล่าช้า (100)
ธง = SDA
ถ้า (ธง == 1)
z = (z
เป็นโมฆะ ack ()
{
SDA = 0 // สาย SDA ไปต่ำ //
SCL = 1 // นาฬิกาสูงไปต่ำ //
ล่าช้า (100)
SCL = 0
}
นี่คือขั้นตอนที่จำเป็นสำหรับการเชื่อมต่อ RTC กับไมโครคอนโทรลเลอร์ 8051 นอกเหนือจากขั้นตอนเหล่านี้แล้วยังมีการกล่าวถึงกรอบข้อมูลที่ใช้ในการถ่ายโอนและรับข้อมูลในบทความนี้เพื่อให้ผู้ใช้เข้าใจด้วยการเขียนโปรแกรมที่เหมาะสม สำหรับความช่วยเหลือเพิ่มเติมเกี่ยวกับแนวคิดนี้คุณสามารถแสดงความคิดเห็นด้านล่าง