วันพฤหัสบดีที่ 4 กันยายน พ.ศ. 2557

การใช้อุปกรณ์7-Segment Display เพื่อแสดงตัวเลขBCD

การทดลองที่ 3.2 
การใช้อุปกรณ์7-Segment Display เพื่อแสดงตัวเลขBCD


วัตถุประสงค์


1. ฝึกต่อวงจรโดยใช้อุปกรณ์7-Segment Display บนเบรดบอร์ด และใช้งานร่วมกับบอร์ดArduino
2. เขียนโปรแกรมArduino เพื่อแสดงตัวเลข โดยใช้อุปกรณ์7-Segment Display

รายการอุปกรณ์

  • บอร์ดArduino (ใช้แรงดัน+5V)                    1 บอร์ด 
  • อุปกรณ์7-Segment Display                         1 ตัว 
  • ปุ่มกดแบบสี่ขา                                            1 ตัว 
  • ตัวต้านทาน330Ω หรือ470Ω                        7 ตัว 
  • ตัวต้านทาน1kΩ                                           1 ตัว 
  • ตัวต้านทาน10kΩ                                         1 ตัว 
  • ทรานซิสเตอร์NPN เบอร์PN2222A              1 ตัว 
  • สายไฟสําหรับต่อวงจร                                 1 ชุด
  • แผงต่อวงจร(เบรดบอร์ด)                             1 อัน

ขั้นตอนการทดลอง

1. ศึกษาการใช้งาน และตําแหน่งของขาต่างๆ ของอุปกรณ์7-Segment Display (ใช้แบบCommonCathode) จากเอกสาร(ดาต้าชีทของผู้ผลิต) วาดรูปอุปกรณ์ ระบุขาต่างๆ และการกําหนดสถานะ LOW หรือHIGH ที่ขาเหล่านั้น เพื่อให้สามารถแสดงตัวเลขในแต่ละกรณีได้ระหว่าง0 ถึง9

datasheet


2. ต่อตัวต้านทาน330Ω หรือ470Ω จํานวน7 ตัว แบบอนุกรมกับขาa, b, c, d, e, f, g แต่ละขาของอุปกรณ์7-Segment Display ตามผังวงจรในรูปที่3.2.1

ผังวงจรที่ 3.2.1

3. ต่อขาCC (Common Cathode) ไปยังGnd ของวงจร

4. เชื่อมต่อขา D3, D4, D5, D6, D7, D8, D9 ของบอร์ดArduino ไปยังขาa, b, c, d, e, f, g ของอุปกรณ์7-Segment Display (ผ่านตัวต้านทาน330Ω หรือ470Ω ที่ต่ออนุกรมอยู่สําหรับแต่ละขา)

5. เขียนโค้ดตามตัวอย่างโดยใช้Arduino IDE แล้วทําขั้นตอนคอมไพล์และอัพโหลดโปรแกรมไปยังบอร์ด Arduino



6. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดก่อน เมื่อถูกต้องแล้ว จึงเชื่อมต่อ+5V และGnd จากบอร์ดArduino ไปยังเบรดบอร์ด เพื่อใช้เป็นแรงดันไฟเลี้ยง(VCC และGND) และไม่ต้องใช้ แหล่งจ่ายควบคุมแรงดันจากภายนอก ให้ระวังการต่อสลับขั้วสายไฟ และระวังการต่อถึงกันทางไฟฟ้า ของสายไฟทั้งสองเส้น

7. แก้ไขโค้ดสําหรับArduino ให้สามารถแสดงตัวเลขตั้งแต่0 ถึง9 แล้ววนซ้ํา โดยเว้นระยะเวลาในการ
เปลี่ยนเป็นตัวเลขถัดไปประมาณ1 วินาที

8. แก้ไขวงจร โดยต่อวงจรตามผังวงจรในรูปที่3.2.2 ให้สังเกตว่า มีการต่อวงจรปุ่มกดแบบPull-up เพื่อใช้เป็นอินพุต-ดิจิทัลให้บอร์ดArduino และมีการต่อวงจรทรานซิสเตอร์แบบNPN เพื่อใช้ควบคุม การไหลของกระแสจากขาCC ของ7-Segment Display ผ่านตัวทรานซิสเตอร์NPN จากขา Collector (C) ไปยังขาEmitter (E) และGND ของวงจรตามลําดับ

ผังวงจรที่ 3.2.2


9. แก้ไขโค้ดสําหรับArduino เพื่อให้แสดงตัวเลขตั้งแต่0 ถึ ง9 แล้ววนซ้ํา โดยเว้นระยะเวลาในการ เปลี่ยนเป็นตัวเลขถัดไปประมาณ1 วินาที แต่จะแสดงผลก็ ต่อเมื่อกดปุ่มPB1 ค้างไว้ แต่ถ้าไม่กด จะต้องไม่แสดงผลตัวเลขใดๆ(ไม่ติด)

ผลการทดลอง

การทดลองที่ 3.2.1

รูปการต่อวงจรจริง


โค้ด Arduino การทดลองที่ 3.2.1

const byte SEVEN_SEG[7] = { 3,4,5,6,7,8,9};
byte Digit[10] = {
B0111111,
B0000110, B1011011,
B1001111,
B1100110,
B1101101,
B1111101,
B0000111,
B1111111,
B1101111
};
int num = 0;

void setup() {
  for (int i=0; i < 7; i++) {
    pinMode( SEVEN_SEG[i], OUTPUT );
    digitalWrite( SEVEN_SEG[i], HIGH );
  }
}

void loop() {
   disp(num);
   num = (num + 1) % 10; delay(1000);
}

void disp(byte num) {
   byte value = Digit[num];
   for (int i = 0; i < 7; i++) {
     digitalWrite( SEVEN_SEG[i], (1 & value) );
     value >>= 1;
   }
}

การทดลองที่ 3.2.2

รูปการต่อวงจรจริง





โค้ด Arduino การทดลองที่ 3.2.2

const byte SW1 = 2; 
const byte npn = 10; 
const byte SEVEN_SEG[7] = { 3, 4, 5, 6, 7, 8, 9 }; 
byte Digit[10] = { 
B0111111,//0 
B0000110,//1 
B1011011,//2 
B1001111,//3 
B1100110,//4 
B1101101,//5 
B1111101,//6 
B0000111,//7 
B1111111,//8 
B1101111//9 }; 
int num = 0;

void setup() { 
  for (int i = 0; i < 7; i++) { 
    pinMode( SEVEN_SEG[i], OUTPUT ); 
    digitalWrite( SEVEN_SEG[i], HIGH ); 
  } 
  pinMode( npn, OUTPUT ); 
}

void loop() {
   if (digitalRead(SW1) == LOW) { 
     disp(num); num = (num + 1) % 10; 
     digitalWrite(npn, HIGH); 
   else {
     num = 0; 
     digitalWrite( npn, LOW ); 
   } 
   delay(1000); 
}

void disp(byte num) { 
    byte value = Digit[num]; 
    for (int i = 0; i < 7; i++) { 
      digitalWrite( SEVEN_SEG[i], (1 & value) ); 
      value >>= 1; 
   } 
}

คําถามท้ายการทดลอง

1. วงจรทรานซิสเตอร์แบบNPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทํางาน

ตอบ ทรานซิสเตอร์ในวงจร มีไว้เพื่อควบคุมการติด-ดับ ของ 7Segment โดยเมื่อกดปุ่มค้างไว้ แรงดันจะไหลไปที่ขา B ของทรานซิสเตอร์  ทำให้กระแสไหลจาก 7Segment ไปที่ขา C และ E ของทรานซิสเตอร์ เพื่อลง GND ตัว 7Segment จึงติด

2. ถ้าจะใช้7-Segment Display สองหลักพร้อมกัน เช่น เพื่อแสดงผลเป็นตัวเลข“00” ถึง“99” โดยเพิ่มขึ้นทีละหนึ่ง ทุกๆ1 วินาที(1000 มิลลิวินาที ) แล้ ววนกลับไปที่“00” ใหม่ได้ จะต้องออกแบบวงจร และเขียนโค้ดArduino ควบคุมอย่างไร
ตอบ

ผังวงจร


โค้ด Arduino

const byte mins[] = {
B0111111, 
B0000110, 
B1011011, 
B1001111, 
B1100110, 
B1101101, 
B1111101, 
B0000111,
B1111111, 
B1100111
};
const byte SEVEN_SEG1 [7] = {1, 2, 3, 4, 5, 6, 7};
const byte SEVEN_SEG2 [7] = {8, 9, 10, 11, 12, 13 };
int i = 0;
int j = 0;

void setup() {
   for (int i = 0; i < 7; i++) {
     pinMode (SEVEN_SEG1[i], OUTPUT);
     digitalWrite (SEVEN_SEG1[i], HIGH );
     pinMode (SEVEN_SEG2[i], OUTPUT);
     digitalWrite (SEVEN_SEG1[i], HIGH );
   }
}

void loop() {
   byte x = mins[i];
   byte y = mins[j];
   delay(1000);
   for (int k = 0 ; k < 8 ; k++) {
     digitalWrite(SEVEN_SEG1[j], x & 1);
     digitalWrite(SEVEN_SEG2[j], y & 1);
     x >>= 1;
     y >>= 1;
   }
   i++;
   j++;
   if (i == 10 && j ==10)i = 0,j = 0;
}


อ้างอิง: เอกสารประกอบการสอน โดย ดร.เรวัต ศิริโภคาภิรมย์

ไม่มีความคิดเห็น:

แสดงความคิดเห็น