นางสาวพรรณพิลาศ ศรีสมศักดิ์ 6031280015 1สทค1
นางสาวรัตนาพร กลิ่นผล 6031280040 1สทค2
7 Segment คืออะไร
7 Segment คือหน้าจอแสดงผลตัวเลข
- ตัวอักษร (ได้บางตัว) ที่มีหน้าจอทำมาจากการจัดวางหลอด LED ในแนวยาว เมื่อทำให้หลอด LED แต่ละดวงติดพร้อมกัน ก็จะทำให้แสดงออกมาเป็นตัวเลขทรงเหลี่ยมได้
1. รูปร่างหน้าตาของ 7 Segment 1 หลัก (ขอบคุณรูปภาพจากเว็บไซต์ tandyonline.co.uk)
2. รูปแสดง 7 Segment ที่แสดงผลออกมาเป็นตัวเลขต่างๆ (ขอบคุณรูปภาพจาก maruen.tistory.com)
3. แสดงขาของ 7 Segment (ขอบคุณรูปภาพจาก projectcircuitpack.yolasite.com)
การแบ่งแยก 7 Segment
แบ่งตามขา Common
- Common Anode
- ขาคอมม่อนจะต้องต่ออยู่กับขั่วบวก
แล้วขาอื่นๆ ต่ออยู่กับกราว์ด จึงจะทำให้ส่วนนั้นๆติดสว่าง
- Common
Cathode - ขาคอมม่อนจะต้องต่ออยู่กับขั่วลบ แล้วขาอื่นๆ ต่ออยู่กับขั้วบวก
จึงจะทำให้ส่วนนั้นๆติดสว่าง
แบ่งตามขนาด
7 Segment มีด้วยกันหลายขนาด
ขนาดที่เป็นมาตรฐานใช้งานทั่วไปคือขนาด 0.56 นิ้ว มีขนาดเล็กกว่า
หรือใหญ่กว่าให้เลือกใช้งานด้วย
แบ่งตามจำนวนตัวเลข
ใน 7 Segment อาจจะมีตัวเลขแสดงผลหลายๆตัวติดอยู่ด้วยกัน
ทำให้การต่อวงจรง่ายมากยิ่งขึ้น
แบ่งตามสี
- สีแดง
- สีเขียว
- สีอื่นๆ -
ผสมสีเพื่อให้สีไม่เหมือนกันในแต่ละจุดได้
การสั่งงาน 7 Segment
7 Segment มีขาหลักๆอยู่ด้วยกันทั้งหมด
9 ขา คือ a b c d e f g dot และ common ในกรณีที่มีตัวเลขจำนวนหลักมากขึ้น ก็จะมีขา Common เพิ่มมากขึ้น เป็น com1 สำหรับควบคุมการแสดงผลหลักที่ 1 , com2 ควบคุมการแสดงผลหลักที่ 2 , com(n) ควบคุมการแสดงผลหลักที่ n
จากรูปที่ 2 จะเห็นว่าในแต่ละแถบยาว จะมีตัวอักษรกำกับอยู่
ซึ่งเป็นชื่อของขาที่ใช้ควบคุมแถบนั้น ตัวอย่างเช่น หากต้องการให้แสดงผลตัวเลข 1 จะต้องให้แถบ b และ c ติดสว่าง จึงจะได้เป็นรูปเลข 1 ที่สมบูรณ์ และหากต้องการให้ติดเลข 3 จะต้องให้แถบ a b c d และ g ติดสว่าง จึงจะทำให้แสดงเลข 3 ที่สมบูรณ์
การจะทำให้แถบแต่ละแถบติดสว่างได้
จะต้องทราบก่อนว่า 7 Segment นั้นเป็นคอมม้อนอะไร
เมื่อทราบแล้วจะทำให้สามารถควบคุมการติดดับของแต่ละแถบได้ แบบเดียวกับการควบคุม LED โดยที่หากเป็นคอมม้อน Anode จะต้องต่อขาคอมม้นเข้ากับขั้วบวกของแหล่งจ่ายไฟ (5V) และหากต้องการให้แถบใดติดสว่าง
จะต้องให้ขาของแถบนั้นต้องลงกราว์ด (เป็นลอจิก LOW หรือที่เรียกว่า ลอจิกศูนย์)
แต่ถ้าหากเป็นคอมม้อน Cathode จะต้องต่อขาคอมม้อนเข้ากับกราว์ด
แล้วต่อขาของแถบที่ต้องการแสดงผลเข้าที่ขั้วบวกของแหล่งจ่าย (เป็นลอจิก HIGH หรือที่เรียกว่าลอจิกหนึ่ง)
การดูขา
LED 7-Segment ส่วนใหญ่แบบตัวเดียวเดี่ยวๆ
มันจะมีขาทั้งหมด 10 ขา ข้างละ 5 ขาใช่ไหมครับ
และขาที่เป็น Common ส่วนใหญ่มันจะเป็นขา กลาง
ของทั้งสองด้าน วิธีวัดก็เอามิเตอร์ มาแล้วบิดมาที่ x1 เหมือนวัดค่า
R แล้วเอาสายสีแดงของมิเตอร์มาจับที่ขากลางใช่ไหมครับ
ส่วนสายสีดำก็ กวาดเลยทุกขาอย่างรวดเร็วเลยครับ ถ้ามันติดมีไฟออกเป็นสี ก็แสดงว่า7-Segment นั้นเป็น Common Cathode ครับ แต่ถ้าไม่ติดก็สลับเอาสายสีดำของมิเตอร์มาจับที่ขากลาง
แล้วใช้สายสีแดงมากวาดที่ขาอื่นๆแทน มันควรจะติดล่ะทีนี้ ซึ่งหมายความว่า 7-Segment ตัวนั้นเป็น Common Anode ครับ
การตรวจสอบขาของ 7-Segment (ถ้าไม่มี datasheet)
โดยปกติถ้าเราไปซื้อ 7 Segment ตามร้านทั่วๆไปนั้นเขาจะไม่มี
datasheet ครับ ซึ่งจะต้องเป็นหน้าที่ของเราเองครับ
ว่าจะต้องตรวจสอบตำแหน่งขา ตรวจสอบคอมมอนให้แน่ใจเสียก่อน ซึ่งการตรวจสอบก็ไม่ได้ยากเย็นอะไรนักหรอกครับแต่ต้องใช้เวลาและความอดทนนิด
หน่อยเท่านั้นเอง ซึ่งจะแนะนำวิธีที่ผมเคยใช้อยู่บ่อยๆดังนี้
1. การตรวจสอบโดยใช้มัลติมิเตอร์แบบเข็ม
จะใช้ย่านวัดโอห์มในการวัด
โดยปรับย่านวัดไปที่ X1 ก่อน จากนั้นใช้ที่วัด วัดไปที่ขาของ
7 segment เรื่อยๆ จนกว่าจะเจอว่าขาอะไรเป็นขารวม
หรือขาคอมมอน หากแน่ใจแล้วว่าขาที่ได้เป็นขาคอมมอน
ให้ดูที่มิเตอร์ว่าขาคอมมอนของเรานั้นต่อกับสายสีอะไรของมัลติมิเตอร์
ถ้าต่ออยู่กับสายสีดำ แสดงว่าเป็นคอมมอน A
ถ้าต่ออยู่กับสายสีแดง แสดงว่าเป็นคอมมอน
K
** การจ่ายไฟของย่านวัดค่าโอห์มจะจ่ายสลับขั้วกัน
จากนั้นเมื่อเราหาได้แล้ว
เราก็ทำการหาขาทีเหลือคือ ขา A - G และ
จุด ต่อไปได้ไม่ยากเลย
2. การตรวจสอบโดยใช้ถ่านไฟฉายธรรมดานี่หละ
เราจะใช้ไฟประมาณ 3V ในการตรวจสอบ โดยทำแบบเดียวกับการใช้มิเตอร์ คือต้องหาขาร่วมให้ได้ก่อน
และเมื่อแน่ใจแล้วว่าได้ขาร่วมหรือขาคอมมอนแล้วดูที่สายไฟว่าต่ออยู่กับขั้ว ไปอะไร
ถ้าต่ออยู่กับขั้วบวก(+)
แสดงว่าเป็นคอมมอน A
ถ้าต่ออยู่กับขั้วลบ(-)
แสดงว่าเป็นคอมมอน K
** ซึ่งจะกลับกับขั้วของมัลติมิเตอร์
จากนั้นเมื่อเราหาได้แล้ว
เราก็ทำการหาขาทีเหลือคือ ขา A - G และ
จุด ต่อไปได้ไม่ยากเลย
การเลือกซื้อ 7 Segment มาใช้งานนั้นต้องบอกผู้ขายหรือคำนึงถึงส่วนต่างๆดังนี้
1. จะใช้แบบกี่หลัก คือว่าจะใช้กี่ตัวต่อกัน
2. ขาที่ต้องการใช้กี่ขา เพราะ 7 Segment จะมีทั้งแบบรวมขาและแยกขาตามที่ได้กล่าวมาแล้ว
3. สีที่ต้องการ อันนี้ก็แล้วแต่จะเลือกก็แล้วกันครับ
4. ต้องการคอมมอนอะไร อันนี้สำคัญครับ
เพราะในการออกแบบเราต้องระบุไปก่อนว่าจะออกแบบโดยใช้ 7 Segment แบบ คอมมอนอะไร
5. ความสูงหรือขนาดนั้นเอง โดยปกติแล้ว ตัว 7
Segment จะบอกความสูงของตัวเลขเป็นนิ้วครับ เช่น 0.4" หรือ 0.56" เป็นต้น
Cr. http://ktmanetic.blogspot.com/2013/01/led-7-segment.html
Cr. https://www.ioxhop.com/article/32/การใช้งาน-7-segment-กับ-arduino-ตอนที่-1-7-segment-หลักเดียว
อุปกรณ์ที่ใช้
1. โฟโต้บอร์ด 1 บอร์ด
2. 7 segment
3. บอร์ด Arduino 1 บอร์ด
4. ตัวต้านทาน 220𝛀 1 ตัว
5. สายไฟ ผู้ - ผู้ 9 เส้น
6. สายอัปโหลด
รูปวงจร
ดาวน์โหลดรูปวงจร ที่นี่
Code
void setup() {
// initialize serial communication:
Serial.begin(9600);
// initialize the LED pins:
for (int thisPin = 2; thisPin < 10; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
// initialize serial communication:
Serial.begin(9600);
// initialize the LED pins:
for (int thisPin = 2; thisPin < 10; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// read the sensor:
if (Serial.available() > 0) {
int inByte = Serial.read();
// do something different depending on the character received.
// The switch statement expects single number values for each case; in this
// example, though, you're using single quotes to tell the controller to get
// the ASCII value for the character. For example 'a' = 97, 'b' = 98,
// and so forth:
// read the sensor:
if (Serial.available() > 0) {
int inByte = Serial.read();
// do something different depending on the character received.
// The switch statement expects single number values for each case; in this
// example, though, you're using single quotes to tell the controller to get
// the ASCII value for the character. For example 'a' = 97, 'b' = 98,
// and so forth:
switch (inByte) {
case '0':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
break;
case '1':
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
break;
case '2':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
break;
case '3':
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
break;
case '4':
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
case '5':
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
case '6':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
case '7':
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
break;
case '8':
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
case '9':
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
break;
default:
// turn all the LEDs off:
for (int thisPin = 2; thisPin < 10; thisPin++) {
digitalWrite(thisPin, HIGH);
}
}
}
}
// turn all the LEDs off:
for (int thisPin = 2; thisPin < 10; thisPin++) {
digitalWrite(thisPin, HIGH);
}
}
}
}
ดาวน์โหลดโค้ด Arduino ที่นี่
คำอธิบายวงจร
วงจรนี้เป็นวงจร แสดงตัวเลข 0-9 โดยใช้ 7 segment แสดงตัวเลขโดยที่เราป้อนค่าเข้าไปใน serial monitor โดยที่ป้อนค่า 0 จะแสดงเลข 0 ป้อนเลข 1 จะแสดงเลข 1 ป้อนเลข 2 จะแสดงเลข 2 ตามลำดับ โดยที่เรากำหนดไว้ 9 เคส ก็ป้อนตามเลขเคสที่เรากำหนดเข้าไปและในแต่ละเคสจะกำหนดไว้ว่าให้แสดงเป็นตัวเลขที่เราต้องการ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น