การเชื่อมต่อ RTC (DS1307) กับไมโครคอนโทรลเลอร์และการเขียนโปรแกรม

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





RTC เป็นอุปกรณ์อิเล็กทรอนิกส์ที่มีบทบาทสำคัญใน การออกแบบระบบฝังตัวแบบเรียลไทม์ . ให้เวลาและวันที่ที่แม่นยำในแอปพลิเคชั่นต่างๆเช่นนาฬิการะบบระบบการเข้าเรียนของนักเรียนและนาฬิกาปลุกเป็นต้นซึ่งจะติดตามเวลาปัจจุบันและให้ผลลัพธ์ที่สอดคล้องกันกับงานนั้น ๆ บทความนี้นำเสนอการเชื่อมต่อ RTC กับ 8051microcotrolle และการเข้าถึงขั้นพื้นฐานของการลงทะเบียนภายใน

การเชื่อมต่อ RTC กับไมโครคอนโทรลเลอร์ 8051

การเชื่อมต่อ 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

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

ทะเบียนสถานะการควบคุม 1

  • TEST1 = 0 โหมดปกติ

= 1 โหมดทดสอบ EXT-clock

  • STOP = 0 RTC เริ่มต้น

= 1 หยุด RTC

  • TESTC = 0 เปิดปิดการรีเซ็ต

= เปิดใช้งานการรีเซ็ต

ควบคุม / ลงทะเบียนสถานะ 2:

ลงทะเบียนสถานะการควบคุม 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

การเชื่อมต่อ 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

การรับ Data Frame

เริ่ม: โดยพื้นฐานแล้วลำดับการถ่ายโอนข้อมูลที่เริ่มต้นโดยต้นแบบที่สร้างเงื่อนไขเริ่มต้น

ที่อยู่ 7 บิต: หลังจากนั้นต้นแบบจะส่งที่อยู่ทาสในรูปแบบ 8 บิตสองรูปแบบแทนที่จะเป็นที่อยู่ 16 บิตเดียว

ที่อยู่ควบคุม / ลงทะเบียนสถานะ: ที่อยู่การควบคุม / การลงทะเบียนสถานะคือการอนุญาตให้ลงทะเบียนสถานะการควบคุม

การควบคุม / การลงทะเบียนสถานะ 1: การลงทะเบียนสถานะการควบคุม 1 ที่ใช้เพื่อเปิดใช้งานอุปกรณ์ RTC

ควบคุม / ลงทะเบียนสถานะ 2: ใช้เพื่อเปิดและปิดการขัดจังหวะ

R / W: หากบิตการอ่านและเขียนสูงการดำเนินการอ่านจะดำเนินการ

อนิจจา: หากดำเนินการเขียนในอุปกรณ์ Slave เครื่องรับจะส่ง ACK แบบ 1 บิตไปยังไมโครคอนโทรลเลอร์

หยุด: หลังจากเสร็จสิ้นการดำเนินการเขียนในอุปกรณ์ทาสไมโครคอนโทรลเลอร์จะส่งเงื่อนไขการหยุดไปยังอุปกรณ์ทาส

ขั้นตอนที่ 5: การเขียนโปรแกรม RTC

เขียนการดำเนินการจาก Master to Slave:

  1. ออกเงื่อนไขการเริ่มต้นจากต้นแบบเป็นทาส
  2. ถ่ายโอนที่อยู่ทาสในโหมดเขียนบนบรรทัด SDL
  3. ส่งที่อยู่ทะเบียนควบคุม
  4. ส่ง control / status register1value
  5. ส่งค่า control / status register2
  6. ส่งวันที่ของนาทีวินาทีและชั่วโมงที่ชอบ
  7. ส่งบิตหยุด

# รวม

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 นอกเหนือจากขั้นตอนเหล่านี้แล้วยังมีการกล่าวถึงกรอบข้อมูลที่ใช้ในการถ่ายโอนและรับข้อมูลในบทความนี้เพื่อให้ผู้ใช้เข้าใจด้วยการเขียนโปรแกรมที่เหมาะสม สำหรับความช่วยเหลือเพิ่มเติมเกี่ยวกับแนวคิดนี้คุณสามารถแสดงความคิดเห็นด้านล่าง