CONTACT | TEL : 02-728-3440, EMAIL : SALES@ASTRONLOGIC.COM
ระบบนับจำนวนแสดงตัวเลข 0-9999 (0-9999 Counter)

» ระบบนับจำนวนแสดงตัวเลข 0-9999 (0-9999 Counter)

ระบบนับจำนวนแสดงตัวเลข 0-9999 (0-9999 Counter)

ตัวนับข้อมูลหรือเคาน์เตอร์ (Counter) เป็นอุปกรณ์พื้นฐานที่ถูกนำมาใช้งานกันอย่างกว้างขวาง เช่นในระบบโรงงานอุตสาหกรรมอาจจะใช้เป็นตัวนับจำนวนผลผลิตเพื่อให้รู้ยอดผลิต หรือนับจำนวนครั้งของการใช้งานเครื่องจักรสำหรับการตรวจสอบสภาพการทำงานของเครื่องจักร แม้แต่ในงานเกษตรกรรม ก็ยังนำตัวนับมาใช้ในการนับผลผลิตที่ได้ว่ามีจำนวนเท่าไหร่ ในการประยุกต์ใช้งาน CPLD ในส่วนนี้จะเป็นการออกแบบ CPLD ให้ทำหน้าที่เป็นตัวนับจำนวนสำหรับนับตัวเลขตั้งแต่เลข 0 ถึง 9999 เพื่อให้ผู้สนใจสามารถนำไปประยุกต์ใช้งานเป็นตัวนับต่างๆ ต่อไป

หลักการทำงานของวงจรนับ

ระบบนับจำนวนแสดงตัวเลข 0 – 9999 ที่เราจะทำการออกแบบกันนั้นจะมีคุณสมบัติดังนี้คือ สามารถนับจำนวนได้ตั้งแต่ 0 – 9999 และมีสัญญาณตัวทดออกมาในกรณีที่นับจนถึง 9999 คน , มีสวิตย์สำหรับเริ่มต้นการนับและมีสวิตย์สำหรับเคลียร์ผลการนับ เราสามารถนำหลักการของระบบนับนี้ไปใช้เป็นระบบนับจำนวนวัตถุหรือผลผลิตก็ได้ สำหรับหลักการทำงานของระบบทั้งหมดแสดงดังในรูปที่ A1.1

รูปที่ A1.1 หลักการทำงานของวงจรนับจำนวนแสดงตัวเลข 0 – 9999

จากวงจรในรูปที่ A1.1 เมื่อมีสัญญาณพัลช์จากชุด Sensor ส่งเข้ามาที่วงจรนับสิบชุดที่ 1 ( Decade Counter 1 ) วงจรนับชุดที่ 1 จะทำการนับขึ้นครั้งละ 1 เมื่อทำการนับสัญญาณพัลช์ได้ 10 ลูก (แสดงว่านับถึง 9) ก็จะส่งสัญญาณตัวทดออกมาที่วงจรนับสิบชุดที่ 2 และเมื่อวงจรนับชุดที่ 2 ทำการนับสัญญาณตัวทดได้ 10 ครั้ง (แสดงว่านับถึง 99) ก็จะส่งสัญญาณตัวทดออกมาที่วงจรนับชุดที่ 3 และหากวงจรนับชุดที่ 3 ทำการนับสัญญาณตัวทดที่ส่งมาจากวงจรนับชุดที่ 2 ครบ 10 ครั้ง (แสดงว่านับถึง 999) ก็จะส่งสัญญาณตัวทดให้แก่วงจรนับชุดที่ 4 และเมื่อวงจรนับชุดที่ 4 ทำการนับสัญญาณตัวทดจากวงจรนับชุดที่ 3 ครบ 10 ครั้ง (แสดงว่านับถึง 9999) ก็จะส่งสัญญาณตัวทดออกมา และระบบก็จะวนกลับมาเริ่มนับ 0000 ใหม่อีกครั้งหนึ่ง
ผลลัพธ์ที่ได้จากการนับของวงจรนับสิบแต่ละชุดจะถูกส่งเข้าสู่วงจร Multiplexer เข้า 4 ชุด ออก 1 ชุด เพื่อทำการ Multiplex ออกวงจรแปลงรหัส BCD เป็นรหัส 7 เซ็กเมนต์ เพื่อแสดงค่าตัวเลขที่ 7 เซ็กเมนต์ต่อไป ในส่วนของวงจร 0 – 3 Counter จะทำหน้าที่เป็นวงจรนับ 0 – 3 ผลลัพธ์ที่ได้จากการนับจะนำมาเป็นตัวเลือกช่องสัญญาณที่จะทำการ Multiplex และเป็นตัวเลือกหลักของ 7 เซ็กเมนต์ที่จะทำการแสดงผล วงจรที่ใช้สำหรับเลือก 7 เซ็กเมนต์จะใช้วงจร Decoder 2 line to 4 line ซึ่งจะต้องทำการเลือก 7 เซ็กเมนต์ให้สอดคล้องกับข้อมูลที่ส่งมาจากวงจร Multiplexer ด้วย

หลักการออกแบบและการสร้าง

ในส่วนนี้จะเป็นการออกแบบวงจรทั้งหมดในรูปที่ A1.1 โดยใช้วิธีการเขียนแผนผังวงจร (Schematics) ซึ่งจะแบ่งการออกแบบเป็นส่วนต่างๆ ดังต่อไปนี้

1.วงจร Decade Counter

วงจร Decade Counter เป็นวงจรที่ทำหน้าที่ในการนับเลข 0 – 9 เพื่อทำการนับสัญญาณพัลช์ที่ส่งมาจากวงจร Sensor และเมื่อนับเลขจนถึงเลข 9 ก็จะส่งสัญญาณพัลช์ออกมาทาง Carry เพื่อเป็นสัญญาณกระตุ้นให้กับวงจรนับในชุดถัดไป ลักษณะของวงจร Decade Counter แสดงดังรูปที่ A1.2(a) ในส่วนของทฏษฏีและวิธีการออกแบบวงจร Decade Counter นั้นสามารถศึกษาได้ จากการทดลองที่ 10 สำหรับวงจร Decade Counter ที่จะสร้างขึ้นมานั้น ให้บันทึกเป็นไฟล์ชื่อ S_Decade.gdf และทำการสร้างสัญลักษณ์ของวงจร Decade Counter จะได้ดังรูปที่ A1.2(b) โดยที่
- สัญญาณ CLK จะเป็นสัญญาณอินพุทขนาด 1 บิต สำหรับรับสัญญาณพัลช์จากวงจร Sensor
- สัญญาณ CLR เป็นสัญญาณอินพุทขนาด 1 บิต สำหรับเคลียร์ข้อมูลทางเอาท์พุทให้เป็น “0000”
- สัญญาณ Q[3..0] เป็นสัญญาณเอาท์พุทขนาด 4 บิต ข้อมูลการนับจะถูกส่งออกมาทางสัญญาณ Q[3..0] นี้
- สัญญาณ Car เป็นสัญญาณเอาท์พุทขนาด 1 บิต เมื่อวงจรนับทำการนับมาจนถึงเลข 9 สัญญาณ Car จะมีค่าเป็นลอจิก “0” สำหรับเป็นสัญญาณกระตุ้นให้แก่วงจรนับชุดต่อไป
และผลการจำลองการทำงาน (Simulate) ดังรูปที่ A1.2(c)

รูปที่ A1.2(a) วงจร Decade Counter

รูปที่ A1.2(b) สัญลักษณ์ของวงจร Decade Counter

รูปที่ A1.2(c) ผลการจำลองการทำงานของวงจร Decade Counter

2.วงจร Multiplexers แบบเข้า 4 ออก 1

วงจร Multiplexers แบบเข้า 4 ออก 1 เป็นวงจรที่ทำหน้าที่ในการเลือกชุดข้อมูลที่ได้จากวงจร Decade ทั้งสี่ชุด ส่งไปเข้าวงจรแปลงรหัส BCD เป็นรหัส 7 เซ็กเมนต์ เพื่อแสดงตัวเลขออกที่ 7 เซ็กเมนต์ต่อไป โดยที่ข้อมูลในแต่ละชุดจะมีขนาด 4 บิต แสดงวงจร Multiplexers ดังรูปที่ A1.3(a) ในส่วนของการออกแบบวงจร Multiplexers นั้น สามารถศึกษาได้จากการทดลองที่ 5 และบันทึกวงจรที่ได้ออกแบบมาเป็นไฟล์ชื่อ Multiplex.gdf

รูปที่ A1.3(a) วงจร Multiplexers แบบเข้า 4 ชุดออก 1 ชุด ข้อมูลชุดละ 4 บิต

รูปที่ A1.3(b) สัญลักษณ์ของวงจร Multiplexers แบบเข้า 4 ชุดออก 1 ชุด ข้อมูลชุดละ 4 บิต

รูปที่ A1.3(c) ผลการจำลองการทำงานของวงจร Multiplexers แบบเข้า 4 ชุดออก 1 ชุด ข้อมูลชุดละ 4 บิต

หลังจากคอมไพล์วงจรในรูปที่ A1.3(a) จนผ่านเป็นที่เรียบร้อยแล้ว ทำการสร้างสัญลักษณ์ของวงจร Multiplexers จะได้ดังรูปที่ A1.3(b) โดยที่
- สัญญาณ A[3..0] เป็นอินพุทขนาด 4 บิต สำหรับรับค่าตัวเลขจากวงจร Decade Counter ชุดที่ 1
- สัญญาณ B[3..0] เป็นอินพุทขนาด 4 บิต สำหรับรับค่าตัวเลขจากวงจร Decade Counter ชุดที่ 2
- สัญญาณ C[3..0] เป็นอินพุทขนาด 4 บิต สำหรับรับค่าตัวเลขจากวงจร Decade Counter ชุดที่ 3
- สัญญาณ D[3..0] เป็นอินพุทขนาด 4 บิต สำหรับรับค่าตัวเลขจากวงจร Decade Counter ชุดที่ 4
- สัญญาณ SEL[3..0] เป็นอินพุทขนาด 4 บิต สำหรับเลือกชุดข้อมูลที่จะส่งออกเอาท์พุทจะมีตารางความจริงดังตารางที่ A1.1
- สัญญาณ DATA[3..0] เป็นเอาท์พุทขนาด 4 บิต สำหรับแสดงข้อมูลที่ได้ทำการเลือก โดยสัญญาณ SEL[3..0] มีตารางความจริงดังตารางที่ A1.1

ตารางที่ A1.1 ตารางความจริงของวงจร Multiplexers

 

INPUTS
OUTPUTS
SEL3
SEL2
SEL1
SEL0
DATA[3..0]
1
1
1
0
A[3..0]
1
1
0
1
B[3..0]
1
0
1
1
C[3..0]
0
1
1
1
D[3..0]

 
 

3.วงจรนับเลข 0 – 3

วงจรนับเลข 0 – 3 จะทำหน้าที่ในการนับเลขจาก 0 ถึง 3 ซึ่งข้อมูลนี้จะใช้สำหรับเลือกชุดข้อมูล ที่จะทำการ Multiplexers และสำหรับเลือก 7 เซ็กเมนต์ที่จะให้แสดงผลตัวเลข สำหรับวงจรภายในของวงจรนับเลข 0 – 3 แสดงดังรูปที่ A1.4(a) เมื่อวาดรูปวงจรเสร็จเรียบร้อยแล้วให้บันทึกเป็นไฟล์ชื่อ Count4.gdf หลังจากนั้นทำการคอมไพล์วงจรและทำการสร้างสัญลักษณ์ของวงจรนับเลข 0 – 3 จะได้ดังรูปที่ A1.4(b) โดยที่
- สัญญาณ CLK เป็นสัญญาณอินพุทขนาด 1 บิต สำหรับรับสัญญาณคล็อกเข้ามากระตุ้นวงจรนับให้ทำงาน
- สัญญาณ CLR เป็นสัญญาณอินพุทขนาด 1 บิต สำหรับเคลียร์เอาท์พุทให้มีค่าเท่ากับ 0
- สัญญาณ Q[1..0] เป็นสัญญาณเอาท์พุทขนาด 2 บิต เป็นเอาท์พุทสำหรับแสดงค่าตัวเลขของวงจรนับ 0 – 3 ข้อมูลที่แสดงออกมาจะเป็นข้อมูลแบบไบนารี่
เมื่อวาดวงจรเสร็จแล้วให้ทำการจำลองการทำงาน (Simulate) จะได้ผลการจำลองการทำงานดังรูปที่ A1.4(c)

รูปที่ A1.4(a) วงจรนับ 0 – 4

รูปที่ A1.4(b) สัญลักษณ์ของวงจรนับ 0 – 4

รูปที่ A1.4(c) ผลการจำลองการทำงานของวงจรนับ 0 – 4

4.วงจร Decode 2 line to 4 line

วงจร Decode 2 line to 4 line เป็นวงจรที่ทำหน้าที่ถอดรหัส 2 สายเป็น 4 สาย โดยจะรับข้อมูลไบนารี่จากวงจรนับ 0 – 3 แล้วทำการถอดรหัสข้อมูล ข้อมูลที่ได้จากการถอดรหัสจะถูกแบ่งออกเป็น 2 ส่วน ส่วนหนึ่งจะส่งเข้าวงจร Multiplexers เพื่อทำการเลือกชุดข้อมูลที่จะทำการ Multiplex และอีกส่วนหนึ่งจะส่งเข้าวงจรขับ 7 เซ็กเมนต์ เพื่อขับ 7 เซ็กเมนต์ให้แสดงผลตรงกับข้อมูลที่ได้จากการ Multiplex วงจร Decode 2 line to 4 line แสดงดังรูปที่ A1.5(a) หลังจากวาดวงจรเรียบร้อยแล้ว ให้ทำการบันทึกเป็นไฟล์ชื่อ Decode2to4.gdf เมื่อทำการคอมไพล์เสร็จเรียบร้อยแล้วให้ทำการสร้างเป็นสัญลักษณ์ของวงจร Decode 2 line to 4 line จะได้ดังรูปที่ A1.5(b) โดยที่
- สัญญาณ A และ B เป็นสัญญาณอินพุทขนาด 1 บิตทำหน้าที่ในการรับข้อมูลไบนารี่จากวงจรนับ 0 – 4
- สัญญาณ Y0N – Y3N เป็นสัญญาณเอาท์พุทขนาด 1 บิต ข้อมูลที่ได้จากการถอดรหัสจะถูกส่งออกที่ขา Y0N – Y3N โดยที่ Y0N จะมีความสำคัญต่ำสุด แสดงตารางความจริงได้ดังตารางที่ A1.2

ตารางที่ A1.2 ตารางความจริงของวงจร Decode 2 line to 4 line

 

INPUTS
OUTPUTS
B
A
Y0N
Y1N
Y2N
Y3N
0
0
0
1
1
1
0
1
1
0
1
1
1
0
1
1
0
1
1
1
1
1
1
0

 
 

หลังจากนั้นทำการจำลองการทำงาน (Simulate) เพื่อดูผลการทำงาน โดยจะมีผลการจำลองการทำงานดังรูปที่ A1.5(c)

รูปที่ A1.5(a) วงจร Decode 2 line to 4 line

รูปที่ A1.5(b) สัญลักษณ์ของวงจร Decode 2 line to 4 line

รูปที่ A1.5(c) ผลการจำลองการทำงาน

5.ประกอบวงจรต่างๆเข้าด้วยกันเป็นวงจรนับ 0 – 9999

หลังจากออกแบบวงจรต่างๆ เสร็จเรียบร้อยแล้ว เราจะต้องนำสัญลักษณ์ของวงจรเหล่านั้นมาประกอบเป็นวงจรนับจำนวนเพื่อแสดงผลตัวเลขตั้งแต่ 0 ถึง 9999 ดังรูปที่ A1.6

รูปที่ A1.6(a) วงจรนับจำนวน 0 – 9999

รูปที่ A1.6(b) สัญลักษณ์ของวงจรนับจำนวน 0 – 9999

รูปที่ A1.6(c) ผลการจำลองการทำงาน

เมื่อวาดรูปวงจรนับ 0 – 9999 ในรูปที่ A1.6(a) เรียบร้อยแล้ว ทำการบันทึกเป็นไฟล์ชื่อ Count9999.gdf และสร้างเป็นสัญลักษณ์ของวงจรนับ 0 – 9999 จะได้สัญลักษณ์ดังรูปที่ A1.6(b) หลังจากนั้นทำการจำลองการทำงานของวงจรนับ 0 – 9999 จะได้ผลการจำลองการทำงานดังรูปที่ A1.6(c)

ทดสอบการทำงานจริง

สำหรับการทดสอบการทำงานของวงจรนับ 0 – 9999 ทีได้ออกแบบมานั้น วงจรสำหรับทดสอบการทำงานแสดงดังรูปที่ A1.7

รูปที่ A1.7 วงจรทดสอบการทำงานของวงจรนับ 0 – 9999


จากวงจรในรูปที่ A1.7 ในส่วนของ CPLD จะใช้โมดูล CPLD รุ่น Ezy PLD-DEV02 ซึ่งภายในโมดูล Ezy PLD-DEV02 จะใช้ CPLD เบอร์ EPM3064ALC44-10 ส่วน OSC1 เป็นโมดูลออสซิเลเตอร์ทำหน้าที่ในการกำเนิดสัญญาณคล็อกให้แก่ Ezy PLD-DEV01 ซึ่งสัญญาณคล็อกนี้จะใช้กับวงจร Multiplexers เพื่อเป็นการเลือกข้อมูลจากวงจร Decade Counter เพื่อเสดงผลออกที่ 7 เซ็กเมนต์ต่อไป รายละเอียดดังที่กล่าวมาแล้วในขั้นตอนการออกแบบวงจร Multiplexers ซึ่งความถี่ที่โมดูลออสซิเลเตอร์ผลิตออกมานั้นจะมีความถี่ 9.6 MHz หากเรานำความถี่นี้ป้อนเข้าวงจร Multiplexers โดยตรงจะทำให้มีการ Multiplex ข้อมูลด้วยความเร็วสูง ทำให้การแสดงผลตัวเลขเร็วมากจนอาจมองเห็นว่า 7 เซ็กเมนต์ทุกตัวสว่างเหมือนกัน ดูไม่ออกว่าเป็นตัวเลขอะไร เพราะฉนั้นเราจะต้องทำการหารความถี่จาก 9.6 MHz ลงมาให้เหลือความถี่ที่เหมาะสมกับการแสดงผลตัวเลขที่ 7 เซ็กเมนต์ 4 หลัก สำหรับการทดสอบวงจรนับ เราจะทำการเพิ่มวงจรหารความถี่ดังรูปที่ A1.8

รูปที่ A1.8 วงจรทดสอบการทำงานของวงจรนับ 0 – 9999

ในส่วนของวงจรหารความถี่ที่เพิ่มเข้ามาจะใช้ไอซี 74393 ซึ่งทำหน้าที่เป็นวงจรนับแบบไบนารี่ 4 ชุดมาต่อเข้าด้วยกัน เอาท์พุทของวงจรหาร สัญญาณความถี่ทางอินพุทที่ป้อนเข้ามาจะถูกหารด้วย จะทำให้ได้สัญญาณคล็อกที่ป้อนให้แก่ ขา CLK ของวงจร Count9999 เท่ากับ 9.6 MHz / = 585.9375 Hz ซึ่งเมื่อนำไปทำการ Multiplexers เพื่อส่งข้อมูลให้แก่ 7 เซ็กเมนต์ทั้ง 4 หลัก จะทำให้ 7 เซ็กเมนต์ในแต่ละหลักแสดงผลข้อมูลด้วยความเร็วประมาณ 585.9375 / 4 = 146.484375 Hz ด้วยความเร็วในการแสดงผลระดับนี้จะทำให้เราเห็นตัวเลขในแต่ละหลักชัดเจนและไม่กระพริบ
เมื่อวาดวงจรในรูปที่ A1.8 เสร็จเรียบร้อยแล้ว ให้ทำการบันทึกเป็นไฟล์ชื่อ t_count9999.gdf ทำการตรวจสอบความถูกต้องของวงจรที่วาด หลังจากนั้นกำหนดเบอร์ CPLD ที่จะใช้เป็น EPM3064ALC44-10 ทำการคอมไพล์ และกำหนดตำแหน่งขาที่จะใช้งานดังตารางที่ A1.3

ตารางที่ 1.3 การจัดตำแหน่งขาของ CPLD

 
 

NAME
EPM3064ALC44
Pins
NAME
EPM3064ALC44
Pins
CLK9M6
43
e

34

SENSOR
2
f
0
SW1
1
g
1
a
41
SEL0
1
b
40
SEL1
1
c
39
SEL2
1
d
37
SEL3
1

 
 

เมื่อจัดตำแหน่งขาเสร็จเรียบร้อยแล้ว ทำการคอมไพล์ใหม่อีกครั้ง และโปรแกรมลงวงจรทดสอบในรูปที่ A1.7 ทดสอบการทำงานโดยการต่อชุด Sensor เข้าที่ขา Sensor ของวงจรทดสอบ เริ่มต้นจ่ายไฟให้กับวงจรสังเกตุที่ 7 เซ็กเมนต์จะต้องแสดงเป็นตัวเลข 0000 และเมื่อมีวัตถุเคลื่อนที่ผ่านชุด Sensor จะทำให้มีพัลช์เข้ามาที่วงจรนับจะทำให้วงจรนับแสดงเป็นตัวเลข 0001 และเมื่อมีวัตถุเคลื่อนที่ผ่าน Sensor อีก วงจรนับก็จะทำการนับเพิ่มขึ้นมาอีกครั้งละ 1 เราสามารถนำวงจรนับนี้ไปประยุกต์ใช้งานเป็นเครื่องนับจำนวนผลิตภัณฑ์ที่ผลิตได้ หรือนำไปประยุกต์เป็นเครื่องนับจำนวนนักเรียนที่เข้าใช้บริการห้องสมุด หรือประยุกต์ใช้งานเป็นเครื่องนับอื่นๆ ได้อีก

<<..............ดาวน์โหลดซอร์สโค้ด..............>>