- ส่วนประกอบที่ต้องการ:
- แผนภูมิวงจรรวม:
- การใช้ TIMER ที่ 8051 สำหรับการวัดความถี่:
- 555 จับเวลาเป็นแหล่งความถี่:
- คำอธิบายการทำงานและรหัส:
ความถี่กำหนดเป็นจำนวนรอบต่อวินาที นอกจากนี้ยังสามารถกำหนดให้เป็นซึ่งกันและกันของเวลาทั้งหมด 'T' ในโครงการนี้เราจะนับจำนวนพัลส์ที่เข้าสู่พอร์ต 3.5 ของไมโครคอนโทรลเลอร์ 8051 และแสดงบนจอ LCD 16 * 2 โดยพื้นฐานแล้วเราได้วัดความถี่ของสัญญาณที่พอร์ต 3.5 ของ 8051 ที่นี่เราใช้ชิปAT89S52 8051 และ 555 IC ใช้ในโหมด Astable เพื่อสร้างพัลส์ตัวอย่างสำหรับการสาธิต ก่อนหน้านี้เราได้สร้างตัวนับความถี่โดยใช้ Arduino
ส่วนประกอบที่ต้องการ:
- ไมโครคอนโทรลเลอร์ 8051 (AT89S52)
- จอ LCD 16 * 2
- แหล่งความถี่ (555 Timer)
- โพเทนชิออมิเตอร์
- การเชื่อมต่อสายไฟ
แผนภูมิวงจรรวม:
การใช้ TIMER ที่ 8051 สำหรับการวัดความถี่:
ไมโครคอนโทรลเลอร์ 8051 เป็นไมโครคอนโทรลเลอร์ 8 บิตซึ่งมี 128 ไบต์บนชิป RAM, 4K ไบต์ของชิป ROM, ตัวจับเวลาสองตัว, พอร์ตอนุกรมหนึ่งพอร์ตและพอร์ต 8 บิตสี่พอร์ต ไมโครคอนโทรลเลอร์ 8052 เป็นส่วนขยายของไมโครคอนโทรลเลอร์ ในการกำหนดค่าพอร์ต 3.5 เป็นตัวนับค่าลงทะเบียน TMOD จะถูกตั้งค่าเป็น 0x51 รูปด้านล่างแสดงการลงทะเบียน TMOD
ประตู | C / T | M1 | M0 | ประตู | C / T | M1 | M2 |
ตัวจับเวลา 1 | ตัวจับเวลา 0 |
GATE -เมื่อตั้งค่า GATE ตัวจับเวลาหรือตัวนับจะเปิดใช้งานเฉพาะเมื่อขา INTx สูงและขาควบคุม TRx ถูกตั้งค่าไว้ เมื่อล้าง GATE ตัวจับเวลาจะเปิดใช้งานเมื่อใดก็ตามที่มีการตั้งค่าบิตควบคุม TRx
C / T -เมื่อ C / T = 0 จะทำหน้าที่เป็น Timer เมื่อ C / T = 1 จะทำหน้าที่เป็นตัวนับ
M1และM0หมายถึงโหมดการทำงาน
สำหรับ TMOD = 0x51 ตัวจับเวลา 1 จะทำหน้าที่เป็นตัวนับและทำงานในโหมด 1 (16 บิต)
16 * 2 LCDใช้เพื่อแสดงความถี่ของสัญญาณในเฮิรตซ์ (Hz) หากคุณยังใหม่กับ LCD 16x2 โปรดตรวจสอบเพิ่มเติมเกี่ยวกับพินของ LCD 16x2 และคำสั่งที่นี่ ตรวจสอบวิธีการเชื่อมต่อ LCD กับ 8051 ด้วย
555 จับเวลาเป็นแหล่งความถี่:
แหล่งความถี่ควรสร้างคลื่นสี่เหลี่ยมและแอมพลิจูดสูงสุดถูก จำกัด ไว้ที่5Vเนื่องจากพอร์ตของไมโครคอนโทรลเลอร์ 8051 ไม่สามารถรองรับแรงดันไฟฟ้าที่มากกว่า 5V ได้ ความถี่สูงสุดที่จะสามารถวัดเป็น 655.35 KHzเนื่องจากข้อ จำกัด ของหน่วยความจำ TH1 และ TL1 ทะเบียน (8bit แต่ละคน) ใน 100 มิลลิวินาที TH1 และ TL1 สามารถรองรับได้ถึง 65535 ครั้ง ดังนั้นความถี่สูงสุดที่สามารถวัดได้คือ65535 * 10 = 655.35 KHz
ในโครงการเครื่องวัดความถี่ 8051นี้ฉันใช้ตัวจับเวลา 555 ตัวในโหมด astable เพื่อสร้างคลื่นสี่เหลี่ยมความถี่ตัวแปร ความถี่ของสัญญาณที่สร้างโดย 555 IC สามารถเปลี่ยนแปลงได้โดยการปรับโพเทนชิออมิเตอร์ตามที่แสดงในวิดีโอที่ระบุในตอนท้ายของโครงการนี้
ในโปรเจ็กต์นี้ Timer1 (T1) จะนับจำนวนพัลส์ที่เข้าสู่พอร์ต 3.5 ของไมโครคอนโทรลเลอร์ 8051 เป็นเวลา 100 มิลลิวินาที ค่าการนับจะถูกเก็บไว้ในการลงทะเบียน TH1 และ TL1 ตามลำดับ ในการรวมค่าของทะเบียน TH1 และ TL1 จะใช้สูตรด้านล่าง
พัลส์ = TH1 * (0x100) + TL1
ตอนนี้ 'ชีพจร' จะมีจำนวนรอบใน 100 มิลลิวินาที แต่ความถี่ของสัญญาณกำหนดเป็นจำนวนรอบต่อวินาที ในการแปลงเป็นความถี่จะใช้สูตรด้านล่าง
พัลส์ = พัลส์ * 10
คำอธิบายการทำงานและรหัส:
โปรแกรม C สมบูรณ์สำหรับความถี่นี้ Meter จะได้รับในตอนท้ายของโครงการนี้ รหัสจะแบ่งออกเป็นส่วนเล็ก ๆ ที่มีความหมายและอธิบายไว้ด้านล่าง
สำหรับการเชื่อมต่อ LCD 16 * 2 กับไมโครคอนโทรลเลอร์ 8051 เราต้องกำหนดพินที่จอ LCD 16 * 2 เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051 ขา RS ของจอ LCD 16 * 2 เชื่อมต่อกับ P2.7, ขา RW ของจอ LCD 16 * 2 เชื่อมต่อกับ P2.6 และขา E ของจอ LCD 16 * 2 เชื่อมต่อกับ P2.5 พินข้อมูลเชื่อมต่อกับพอร์ต 0 ของไมโครคอนโทรลเลอร์ 8051
sbit rs = P2 ^ 7; sbit rw = P2 ^ 6; sbit th = P2 ^ 5;
ต่อไปเราจะต้อง กำหนดฟังก์ชั่นบางอย่าง ที่ใช้ในโปรแกรม ฟังก์ชัน Delay ใช้เพื่อสร้างการหน่วงเวลาที่ระบุ ฟังก์ชัน Cmdwrt ใช้เพื่อส่งคำสั่งไปยังจอแสดงผล LCD 16 * 2 ฟังก์ชัน datawrt ใช้ในการส่งข้อมูลไปยังจอ LCD 16 * 2
ความล่าช้าเป็นโมฆะ (int ไม่ได้ลงนาม); เป็นโมฆะ cmdwrt (ถ่านที่ไม่ได้ลงนาม); เป็นโมฆะ datawrt (ถ่านที่ไม่ได้ลงชื่อ);
ในส่วนของรหัสนี้เราจะส่งคำสั่งไปยัง 16 * 2 จอแอลซีดี คำสั่งดังกล่าวเป็นจอแสดงผลที่ชัดเจนเคอร์เซอร์เพิ่มขึ้นบังคับเคอร์เซอร์ไปยังจุดเริ่มต้นของ 1 เซนต์สายจะถูกส่งไป 16 * 2 จอแสดงผล LCD หนึ่งโดยหนึ่งหลังจากที่ล่าช้าบางเวลาที่ระบุไว้
สำหรับ (i = 0; i <5; i ++) {cmdwrt (cmd); ล่าช้า (1); }
ในส่วนนี้ของรหัสจับเวลา 1 ถูกกำหนดค่าเป็นตัวนับและโหมดการทำงานถูกตั้งค่าเป็นโหมด 1
Timer0 มีการกำหนดค่าเป็นตัวจับเวลาและโหมดของการดำเนินงานมีการตั้งค่าโหมด 1 ตัวจับเวลา 1 ใช้สำหรับการนับจำนวนพัลส์และตัวจับเวลา 0 ใช้สำหรับสร้างการหน่วงเวลา ค่า TH1 และ TL1 ถูกตั้งค่าเป็น 0 เพื่อให้แน่ใจว่าการนับเริ่มจาก 0
TMOD = 0x51; TL1 = 0; TH1 = 0;
ในส่วนนี้ของรหัสตัวจับเวลาถูกสร้างขึ้นเพื่อให้ทำงานเป็นเวลา 100 มิลลิวินาที สร้างความล่าช้า100 มิลลิวินาทีโดยใช้ฟังก์ชันหน่วงเวลา TR1 = 1 ใช้สำหรับเริ่มจับเวลาและ TR1 = 0 ใช้สำหรับหยุดตัวจับเวลาหลังจากผ่านไป 100 มิลลิวินาที
TR1 = 1; ล่าช้า (100); TR1 = 0;
ในส่วนของรหัสนี้ค่านับนำเสนอใน TH1 และ TL1 ลงทะเบียนจะรวมกันแล้วก็จะคูณด้วย 10 จะได้รับจำนวนรอบใน 1 วินาที
พัลส์ = TH1 * (0x100) + TL1; พัลส์ = พัลส์ * 10;
ในส่วนนี้ของรหัสค่าความถี่จะถูกแปลงเป็นไบต์เดียวเพื่อให้แสดงบนจอ LCD 16 * 2 ได้ง่าย
d1 = พัลส์% 10; s1 = พัลส์% 100; s2 = พัลส์% 1,000; s3 = พัลส์% 10000; s4 = พัลส์% 100000; d2 = (s1-d1) / 10; d3 = (s2-s1) / 100; d4 = (s3-s2) / 1,000; d5 = (s4-s3) / 10,000; d6 = (พัลส์ -4) / 100000;
ในส่วนนี้ของรหัสนี้ค่าความถี่แต่ละหลักจะถูกแปลงเป็นรูปแบบASCIIและจะแสดงบนจอ LCD 16 * 2
ถ้า (พัลส์> = 100000) datawrt (0x30 + d6); ถ้า (พัลส์> = 10,000) datawrt (0x30 + d5); ถ้า (พัลส์> = 1,000) datawrt (0x30 + d4); ถ้า (พัลส์> = 100) datawrt (0x30 + d3); ถ้า (พัลส์> = 10) datawrt (0x30 + d2); datawrt (0x30 + d1);
ในส่วนนี้ของรหัสเรากำลังส่งคำสั่งไปยังจอ LCD 16 * 2 คำสั่งถูกคัดลอกไปยังพอร์ต 0 ของไมโครคอนโทรลเลอร์ 8051 RS ถูกทำให้ต่ำสำหรับการเขียนคำสั่ง RW ถูกทำให้ต่ำสำหรับการเขียน ใช้พัลส์สูงถึงต่ำบนพินเปิดใช้งาน (E) เพื่อเริ่มดำเนินการเขียนคำสั่ง
เป็นโมฆะ cmdwrt (ถ่าน x ที่ไม่ได้ลงชื่อ) {P0 = x; rs = 0; rw = 0; th = 1; ล่าช้า (1); th = 0; }
ในส่วนของรหัสนี้เราจะส่งข้อมูลไปยังจอแสดงผล 16 * 2 จอแอลซีดี ข้อมูลจะถูกคัดลอกไปยังพอร์ต 0 ของไมโครคอนโทรลเลอร์ 8051 RS ถูกสร้างให้สูงสำหรับการเขียนคำสั่ง RW ถูกทำให้ต่ำสำหรับการเขียน ใช้พัลส์สูงถึงต่ำบนพินเปิดใช้งาน (E) เพื่อเริ่มการดำเนินการเขียนข้อมูล
เป็นโมฆะ datawrt (ถ่าน y ที่ไม่ได้ลงชื่อ) {P0 = y; rs = 1; rw = 0; th = 1; ล่าช้า (1); th = 0; }
นี่คือวิธีที่เราสามารถวัดความถี่ของสัญญาณใด ๆ โดยใช้ไมโครคอนโทรลเลอร์ ตรวจสอบโค้ดเต็มและวิดีโอสาธิตด้านล่าง