วันศุกร์ที่ 5 กันยายน พ.ศ. 2557

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

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

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

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

1. ศึกษาการใช้งาน และตําแหนง่ของขาต่างๆ ของอุปกรณ์ 7-Segment Display (ใช้แบบ Common- Cathode) จากเอกสาร (ดาต้าชีทของผู้ผลิต) วาดรูปอุปกรณ์ ระบุขาต่างๆ และการกําหนดสถานะ LOW หรือ HIGH ที่ขาเหล่านั้น เพื่อให้สามารถแสดงตัวเลขในแต่ละกรณีได้ระหว่าง 0 ถึง 9 
2. ต่อตัวต้านทาน 330Ω หรือ 470Ω จํานวน 7 ตัว แบบอนุกรมกับขา a, b, c, d, e, f, g แต่ละขาของ อุปกรณ์ 7-Segment Display ตามผังวงจรในรูปที่ 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 วินาที


โค้ด Arduino Sketch

const byte SEVEN_SEG[7] = {3,4, 5, 6, 7 ,8, 9};
void setup() {
  // put your setup code here, to run once:
for (int i = 0; i < 7; i++) {
    pinMode(SEVEN_SEG[i], OUTPUT);
    digitalWrite(SEVEN_SEG[i], HIGH);
  }
  Serial.begin(9600);
}
int a=0;
byte N[10] = { B1111110, B0110000, B1101101, B1111001, B0110011, B1011011, B1011111, B1110000, B1111111, B1111011};
void loop() {
  // put your main code here, to run repeatedly:
  displayLED(a);
  a++;
  if(a>9){a=0;}
  delay(1000);
 Serial.println(a); 
}
  void displayLED(int j){
  byte t=N[j];
  for(int i=6;i>=0;i--){
    
    digitalWrite(SEVEN_SEG[i], t & 1);
    Serial.print(i); 
    Serial.print(" "); 
    Serial.println(t & 1,BIN); 
    t >>= 1;
  }
}

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

โค้ด Arduino Sketch


const byte SEVEN_SEG[7] = {3,4, 5, 6, 7 ,8, 9};
void setup() {
  // put your setup code here, to run once:
pinMode(10, INPUT);
for (int i = 0; i < 7; i++) {
    pinMode(SEVEN_SEG[i], OUTPUT);
    digitalWrite(SEVEN_SEG[i], HIGH);
  }

}
int a=0;
byte N[10] = { B1111110, B0110000, B1101101, B1111001, B0110011, B1011011, B1011111, B1110000, B1111111, B1111011};
void loop() {
  // put your main code here, to run repeatedly:
  int SW = digitalRead(2);
  if(SW == LOW){
    digitalWrite(10, 1);
  } else {   
    digitalWrite(10, 0);
  }
  
  displayLED(a);
  a++;
  if(a>9){a=0;}
  delay(1000);
 Serial.println(a); 
}
  void displayLED(int j){
  byte t=N[j];
  for(int i=6;i>=0;i--){
    
    digitalWrite(SEVEN_SEG[i], t & 1);
    Serial.print(i); 
    Serial.print(" "); 
    Serial.println(t & 1,BIN); 
    t >>= 1;
  }
}

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

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