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

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

การทดลองที่ 4.1 ( การต่อวงจรไอซีเปรียบเทียบแรงดัน )

วัตถุประสงค์ 
     1. ได้เรียนรู้เกี่ยวกับวิธีการใช้งานตัวต้านทานปรับค่าได้ (Trimpot แบบ 3 ขา)
     2. ฝึกการสร้างแรงดันอ้างอิงจากวลจรโดยใช้ Trimpot
     3. ได้เรียนรู้เกี่ยวกับวิธีการใช้งานไอซี LM393N
     4. ฝึกต่อวงจรโดยใช้ไอซีที่มีตัวเปรียบเทียบแรงดัน (Voltage Comparator) อยู่ภายใน เช่น เบอร์ LM393N (ตัวถังแบบ PDIP-8) 
อุปกรณ์ที่ใช้ในการทดลอง 
     1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน
     2. ไอซีเปรียบเทียบแรงดัน เบอร์ LM393N 1 ตัว
     3. ตัวต้านทานปรับค่าได้แบบสามขา ขนาด 10kΩ หรือ 20kΩ 1 ตัว
     4. ตัวต้านทาน 4.7kΩ หรือ 10kΩ (สำหรับ Pull-Up) 1 ตัว
     5. ตัวต้านทาน 330Ω หรือ 470Ω 1 ตัว
     6. ไดโอดเปล่งแสง (LED) ขนาด 5 มม. 1 ตัว
     7. สายไฟสำหรับต่อวงจร 1 ชุด
     8. มัลติมิเตอร์ 1 เครื่อง
     9. แหล่งจ่ายแรงดันควบคุม 1 เครื่อง
     10. เครื่องกำเนิดสัญญาณแบบดิจิทัล 1 เครื่อง
     11. ออสซิลโลสโคปแบบดิจิทัล 1 เครื่อง
ขั้นตอนการทดลอง
      1. ต่อวงจรโดยใช้ตัวต้านทานปรับค่าได้ ตามผังวงจรในรูปที่ 4.1.1 แล้วป้อนแรงดันไฟเลี้ยง VCC=+5V และ Gnd จากแหล่งจ่ายแรงดันควบคุม ไปยังวงจรบนเบรดบอร์ด


      2. ใช้มัลติมิเตอร์วัดแรงดันระหว่างจุด Vx กับ Gnd และทดลองหมุนปรับค่าที่ตัวต้านทาน สังเกตและจดบันทึกค่าแรงดันต่ำสุดและแรงดันสูงสุดที่วัดได้
      ผลการทดลอง : แรงดันต่ำสุด 0 V และ แรงดันสูงสุด 5.146 V


 
      3. ต่อวงจรบนเบรดบอร์ด โดยใช้ไอซี LM393N ตามผังวงจรในรูปที่ 4.1.2 (เลือกใช้ตัวเปรียบเทียบแรงดันที่อยู่ภายในตัวใดตัวหนึ่งจากที่มีอยู่สองตัว)





      4. สร้างสัญญาณแบบสามเหลี่ยม (Triangular Wave) ให้อยู่ในช่วงแรงดัน 0V ถึง 5V โดยใช้เครื่องกำเนิดสัญญาณ (Function Generator) โดยกำหนดให้ Vpp = 5V (Peak-to-Peak Voltage) และแรงดัน Offset = 2.5V และความถี่ f = 1kHz เพื่อใช้เป็นสัญญาณอินพุต Vin แล้วนำไปป้อนให้ขา
V- ของตัวเปรียบเทียบแรงดันที่ได้เลือกใช้


      5. ใช้ออสซิลโลสโคปวัดสัญญาณ โดยใช้ช่อง A สำหรับวัดสัญญาณที่มาจากเครื่องกำเนิดสัญญาณ (Vin) และช่อง B สำหรับวัดสัญญาณเอาต์พุต (Vout) ที่ขาของตัวเปรียบเทียบแรงดันที่ได้เลือกใช้ (บันทึกภาพที่ได้จากออสซิลโลสโคป เพื่อใช้ประกอบการเขียนรายงานการทดลอง)





      6. ทดลองหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ วัดแรงดัน Vref และสังเกตการเปลี่ยนแปลงค่า DutyCycle ของรูปคลื่นสัญญาณเอาต์พุต






      7. สลับขาสัญญาณอินพุตที่ขา V+ และ V- (ตามผังวงจรในรูปที่ 4.1.3) แล้วทำขั้นตอนที่ 6 ถึง 7 ซ้ำ









      8. เขียนรายงานการทดลอง ซึ่งประกอบด้วย คำอธิบายการทดลองตามขั้นตอน ผังวงจรที่ถูกต้อง
ครบถ้วนตามหลักไฟฟ้า (ให้วาดด้วยโปรแกรม Cadsoft Eagle) รูปถ่ายของการต่อวงจรบน
เบรดบอร์ด รูปคลื่นสัญญาณที่วัดได้จากออสซิลโลสโคปตามโจทย์การทดลอง และตอบคำถาม
ท้ายการทดลอง


คำถามท้ายการทดลอง
      1. ระดับของแรงดันอ้างอิง (Vref) ที่ได้จากตัวต้านทานปรับค่าได้ เพื่อใช้ในการเปรียบเทียบแรงดัน
มีความสัมพันธ์อย่างไรกับระดับของแรงดันเอาต์พุต (Vout) ที่ได้จากตัวเปรียบเทียบแรงดัน และ
ค่า Duty Cycle ของสัญญาณเอาต์พุตที่วัดได้ จงอธิบาย

ตอบ : แรงดันอ้างอิง Vref เป็นการเปรียบเทียบแรงดันระหว่าง Vin และ Vout ที่ได้จากการปรับค่าความต้านทานจาก Trimpot ที่รับแรงดันมาจาก Vin ซึ่ง Vout จะเปลี่ยนแปลงระดับสัญญานแรงดันตามค่าของคสามต้านทานที่ได้จ่กการปรับ Trimpot โดยเมื่อ Vout มีค่า 5 V จะมี Duty Cycle ประมาน 85% และจะลดลงเมื่อปรับ Trimpot จน Vout เข้าใกล้ 0

      2. ถ้าจะให้สัญญาณเอาต์พุต Vout มีค่า Duty Cycle ประมาณ 50% จะต้องหมุนปรับค่าที่ตัว
ต้านทานปรับค่าได้ ให้มีแรงดัน Vref ประมาณเท่าใด

ตอบ : ประมาน 3 V.

      3. เมื่อหมุนปรับค่าที่ตัวต้านทานปรับค่าได้ จากซ้ายสุดไปขวาสุด จะได้ค่า Vref อยู่ในช่วง ….……….. ถึง.……….…….. โวลต์ และได้ค่า Duty Cycle ของสัญญาณเอาต์พุตอยู่ในช่วง ……..…….. ถึง ….………….เปอร์เซ็นต์ 

ตอบ : การทดลองขั้นตอนที่ 6 Vref อยู่ในช่วง 5 - 0 V. Duty Cycle : 85 - 0 %
         การทดลองขั้นตอนที่ 7 Vref อยู่ในช่วง 0 - 5 V. Duty Cycle : 0 - 85 %


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

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

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

วัตถุประสงค์
     1. ศึกษาการทำงานของ 7-Sigment Display เพื่อแสดงตัวเลข
     2. ฝึกการใช้งานบอร์ด Arduino ที่ต่อกับ 7-Sigment Display
     3. ฝึกการเขียนภาษา C/C++ ในโปรแกรม Arduino เพื่อสั่งการทำงานของ 7-Sigment 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


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


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

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



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


**โค้ดสำหรับขั้นตอนการทดลองที่ 6
const byte mins[] = {B0111111, B0000110, B1011011, B1001111, B1100110, B1101101, B1111101, B0000111, B1111111, B1100111};
const byte SEVEN_SEG [7] = {3, 4, 5, 6, 7, 8, 9};
int i=0;
void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode (SEVEN_SEG[i], OUTPUT);
    digitalWrite (SEVEN_SEG[i], HIGH );
  }
}
void loop() {
  byte b = mins[i];
  delay(1000);
  for (int j = 0; j < 8; j++) {
    digitalWrite(SEVEN_SEG[j], b & 1);
    b >>= 1;
  }
  i++;
  if (i == 10)i = 0;
}

**โค้ดสำหรับขั้นตอนการทดลองที่ 8
const byte mins[] = {B0111111, B0000110, B1011011, B1001111, B1100110, B1101101, B1111101, B0000111, B1111111, B1101111};
const byte SEVEN_SEG [7] = {3, 4, 5, 6, 7, 8, 9};
int i = 0;
const byte PB_1 = 2;

void setup() {
  pinMode (PB_1, INPUT);
  for (int i = 0; i < 7; i++) {
    pinMode (SEVEN_SEG[i], OUTPUT);
    digitalWrite (SEVEN_SEG[i], HIGH );
  }
}
void loop() {
    byte b = mins[i];
    delay(1000);
    for (int j = 0; j < 8; j++) {
      digitalWrite(SEVEN_SEG[j],b&1);
      b >>= 1;
    }
    i++;
    if (i == 10)i = 0;
   digitalWrite(10, ! (digitalRead(PB_1)));
   if(digitalRead(PB_1)==HIGH)
   {
       for (int i = 0; i < 7; i++)
       {
            pinMode (SEVEN_SEG[i], OUTPUT);
            digitalWrite (SEVEN_SEG[i], LOW );
      }
   }
}

คำถามท้ายการทดลอง
      1. วงจรทรานซิสเตอร์แบบ NPN ในวงจรนี้ใช้เพื่อวัตถุประสงค์ใด จงอธิบายหลักการทำงาน
ตอบ : ทรานซิสเตอร์นั้นจะประกอบด้วยได โอดจำนวน 2 ตัว ได้แก่ เบส - คอลเลคเตอร์ไดโอด และเบส-อิมิตเตอร์ไดโอด โดยเมื่อเป็นทรานซิสเตอร์ชนิด NPN ไดโอดทั้งสองจะต่อกันแบบหลังชนหลัง
     - รอยต่อเบส-อิมิตเตอร์ เป็นเหมือน ไดโอด.
     - กระแสเบส IB ไหลเฉพาะเมื่อแรงดัน VBE ระหว่างเบส-อิมิตเตอร์เท่ากับ 0.7V หรือมากกว่า
     - กระแสเบส IB น้อยๆควบคุมกระแสคอลเล็คเตอร์ IC ที่สูง
     - IC = hFE ? IB (เว้นแต่ทรานซิสเตอร์ต่อ(on)เต็มที่และอิ่มตัว)
     - hFE คือเกนการขยายกระแส (เป็นเกนกระแส DC) ค่าปรกติสำหรับ hFE คือ 100 (ไม่มีหน่วยเพราะ เป็นอัตราส่วน)
     - ความต้านทานระหว่างคอลเล็คเตอร์-อิมิตเตอร์ RCE ถูกควบคุมโดยกระแส IB โดย:
        IB = 0 RCE = ค่าอนันต์ ทรานซิสเตอร์ตัด(off)
        IB น้อย RCE ลด ทรานซิสเตอร์ต่อ (on)บางส่วน
        IB เพิ่ม RCE = 0 ทรานซิสเตอร์ต่อ(on)เต็มที่ (อิ่มตัว'saturated')

      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] = {
  3, 4, 5, 6, 7, 8, 9};
const byte SEVEN_SEG2 [7] = {
  10, 11, 12, 13, A0,A1 };
int i=0;
int k=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 b = mins[i];
  byte c = mins[k];
  delay(1000);
  for (int j = 0 ; j < 8 ; j++) {
    digitalWrite(SEVEN_SEG1[j], b & 1);
    digitalWrite(SEVEN_SEG2[j], c & 1);
    b >>= 1;
    c >>= 1;
  }
  i++;
  k++;
  if (i == 10 && k ==10)i = 0,k = 0;
}

วงจรที่ออกแบบ




วันพุธที่ 3 กันยายน พ.ศ. 2557

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

การทดลองที่ 3.1 (การต่อวงจรปุ่มกดและไดโอดเปล่งแสงสำหรับ Arduino)

วัตถุประสงค์
     1. ฝึกการต่อวงจรปุ่มกดและวงจรไดโอดเปล่งแสงที่ใช้ไฟเลี้ยงจากคอมพิวเตอร์ และเชื่อมต่อเข้ากับขา input output ของบอร์ด Arduino
     2. ฝึกการเขียนโปรแกรมภาษา C และ C++ เพื่อสั่งการทำงานของวงจรบอร์ด Arduino
     3. เรียนรู้การทำงานของบอร์ด Arduino และโปรแกรมที่ใช้ในการสั่งการทำงานของบอร์ดดังกล่าว
อุปกรณ์ที่ใช้ในการทดลอง
     1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน
     2. บอร์ด Arduino (ใช้แรงดันลอจิก +5V) 1 บอร์ด
     3. ปุ่มกดแบบสี่ขา 2 ตัว
     4. ไดโอดเปล่งแสงขนาด 5 มม. 4 ตัว
     5. ตัวต้านทาน 10kΩ 2 ตัว
     6. ตัวต้านทาน 330Ω หรือ 470Ω 4 ตัว
     7. สายไฟสำหรับต่อวงจร 1 ชุด
ขั้นตอนการทดลอง
      1. ยังไม่ต้องเชื่อมต่อ +5V และ Gnd จากบอร์ด Arduino ไปยังเบรดบอร์ดเพื่อจ่ายเป็นแรงดันไฟเลี้ยง VCC และ GND
      2. ต่อวงจรปุ่มกดพร้อมตัวต้านทานแบบ Pull-up 10kΩ จำนวนสองชุด (PB1 และ PB2) บนเบรดบอร์ด
แล้วนำไปต่อกับขา D2 และ D3 ของบอร์ด Arduino ตามลำดับ โดยใช้ลวดสายไฟสำหรับต่อวงจร (ดูตามผังวงจรในรูปที่ 3.1.1)
      3. ต่อวงจรโดยใช้ไดโอดเปล่งแสง (LED) พร้อมตัวต้านทานแบบอนุกรม 330Ω หรือ 470Ω จำนวน 4 ชุด (LED1, LED2, LED3, LED4) บนเบรดบอร์ด แล้วนำไปต่อกับขา D4, D5, D6, D7, D8 ของบอร์ด Arduino ตามลำดับ โดยใช้ลวดสายไฟสำหรับต่อวงจร (ดูตามผังวงจรในรูปที่ 3.1.1)



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



      5. ตรวจสอบความถูกต้องของวงจรบนเบรดบอร์ดอีกครั้ง จากนั้นจึงเชื่อมต่อ +5V และ Gnd จากบอร์ดArduino ไปยังเบรดบอร์ดเพื่อใช้เป็นแรงดันไฟเลี้ยง (VCC และ GND) ให้ระวังการต่อสลับขั้วสายไฟและ ระวังการต่อถึงกันทางไฟฟ้าของสายไฟทั้งสองเส้น
      6. แก้ไขโค้ดให้แสดงพฤติกรรมการทำงานตามข้อกำหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องในการทำงาน โดยใช้ฮาร์ดแวร์จริง
           6.1 เมื่อเริ่มต้นทำงาน จะมี LED เพียงตัวเดียวที่อยู่ในสถานะ “ติด” (LED1) และที่เหลืออีก 3 ตัว (LED2, LED3, LED4) อยู่ในสถานะ “ดับ”


           6.2 ถ้ากดปุ่ม PB1 แล้วปล่อยในแต่ละครั้ง จะทำให้ตำแหน่งของ LED ที่ “ติด” เลื่อนไปทางขวาทีละ หนึ่งตำแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางซ้ายสุด (LED1 -> LED2 -> LED3 -> LED4 -> …)


           6.3 ถ้ากดปุ่ม PB2 แล้วปล่อยในแต่ละครั้ง จะทำให้ตำแหน่งของ LED ที่ “ติด” เลื่อนไปทางซ้ายทีละหนึ่งตำแหน่ง หรือวนกลับมาเริ่มต้นใหม่ทางขวาสุด (LED1 -> LED4 -> LED3 -> LED2 -> …)


      7. แก้ไขโค้ดให้แสดงพฤติกรรมการทำงานตามข้อกำหนดต่อไปนี้ ตรวจสอบและสาธิตความถูกต้องในการทำงาน
           7.1 ใช้ LED ทั้ง 4 ตัว แสดงเลขในฐานสอง จำนวน 4 หลัก (4-bit binary number) ซึ่งรับสัญญาณเอาต์พุตมาจากบอร์ด Arduino และกำหนดให้บิตที่มีค่า 0 หมายถึง LED “ดับ” และ บิตที่มีค่า
เป็น 1 หมายถึง LED “ติด”และเมื่อเริ่มต้นทำงาน ให้แสดงค่าเป็น 0
           7.2 เมื่อกดปุ่ม PB1 แล้วปล่อยแต่ละครั้ง จะทำให้ค่าเพิ่มขึ้นทีละหนึ่ง จาก 0000, 0001, 0010, …,1111 ตามลำดับ แล้ววนกลับไปเริ่มต้นที่ 0000 ใหม่ได้
           7.3 แต่ถ้ากดปุ่ม PB2 จะทำให้ได้ค่าเป็น 0000 ทันที (หมายถึง การรีเซตค่าเป็นศูนย์) 




**โค้ดสำหรับขั้นตอนการทดลองที่ 6.2-6.3

const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS [4] = {4, 5, 6, 7};
int y = 0;
void setup() {
  pinMode (PB_1, INPUT);
  pinMode (PB_2, INPUT);
  delay (20);
  for (int i = 0; i < 4; i++) {
    pinMode (LEDS [i], OUTPUT);
    digitalWrite (LEDS [i], (i == 0) ? HIGH : LOW);
  }
}

void loop() {
  if (digitalRead(PB_1) == LOW) {
    while (digitalRead (PB_1) == LOW);
    delay (20);
    y++;
    if (y == 4) y = 0;
    for (int i = 0 ; i < 4 ; i++) {
      digitalWrite (LEDS [i], (i == y) ? HIGH : LOW);
    }
  }
  if (digitalRead(PB_2) == LOW) {
    while (digitalRead (PB_2) == LOW);
    delay (20);
    y--;
    if (y < 0) y = 3;
    for (int i = 0 ; i < 4 ; i++) {
      digitalWrite (LEDS [i], (i == y) ? HIGH : LOW);
    }
  }
}


**โค้ดสำหรับขั้นตอนการทดลองที่ 7.2-7.3
const byte PB_1 = 2;
const byte PB_2 = 3;
const byte LEDS [4] = {4, 5, 6, 7};
byte JIB[] = {B0000, B0001, B0010, B0011, B0100, B0101, B0110, B0111, B1000, B1001, B1010, B1011, B1100, B1101, B1110, B1111, B0000};
int a = 0;

void setup() {
  pinMode (PB_1, INPUT);
  pinMode (PB_2, INPUT);
 
  delay (20);
  for (int i = 0; i < 4; i++) {
    pinMode (LEDS [i], OUTPUT);
    digitalWrite (LEDS [i], (i == 0) ? HIGH : LOW);
  }
}
void loop() {
  a += (digitalRead(PB_1) == LOW)?((a==15)?-a:1):0;
  a += (digitalRead(PB_2) == LOW)?((a==15)?-a:1):0;
  byte b = JIB[a];
  for(int i = 0; i < 4; i++){
    digitalWrite(LEDS[i], b&1);
    b >>= 1;
  }
  delay(100);
}

วันพุธที่ 27 สิงหาคม พ.ศ. 2557

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


การทดลองที่ 2.2 ( การสร้างลอจิกเกตพื้นฐานโดยใช้ไอซี 74HCT00 )

วัตถุประสงค์ในการทดลอง

     1. เข้าใจและเรียนรู้เกี่ยวกับลอจิกเกตพื้นฐาน
     2. ฝึกการต่อวงจรโดยใช้โดยใช้ไอซีลอจิกเกต 74HCT00 บนเบรดบอร์ด
     3. สามารถสร้างลอจิกเกตพื้นฐานได้ เช่น OR AND NOR โดยใช้ลอจิกเกต NAND ในไอซี 74HCT00
     4. ฝึกการต่อวงจรปุ่มกดแบบและวงจรไดโอดเปล่งแสง เพื่อใช้เป็น input และ output ของลอกจิกเกตที่สร้างขึ้น

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

     1. แผงต่อวงจร (เบรดบอร์ด) 1 อัน
     2. ไอซี 74HCT00 1 ตัว
     3. ปุ่มกดแบบสี่ขา 2 ตัว
     4. ไดโอดเปล่งแสงขนาด 5 มม. 1 ตัว
     5. ตัวต้านทาน 10kΩ 2 ตัว
     6. ตัวต้านทาน 330Ω หรือ 470Ω 1 ตัว
     7. สายไฟสำหรับต่อวงจร 1 ชุด
     8. แหล่งจ่ายควบคุมแรงดัน 1 ชุด

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

     1. ออกแบบและวาดผังวงจร สำหรับสร้างลอจิกเกตที่มีอินพุตสองขาและเอาต์พุตหนึ่งขา โดยใช้ไอซี 74HCT00 เพียงตัวเดียวเท่านั้น โดยแบ่งเป็นสามกรณี ได้แก่ AND OR และ NOR พร้อมวงจรปุ่มกด
ที่มีตัวต้านทาน 10kΩ แบบ Pull-Up จำนวน 2 ชุด (SW1 และ SW2) สำหรับขาอินพุตทั้งสองของ
ลอจิกเกต และวงจรไดโอดเปล่งแสง (LED1) พร้อมตัวต้านทาน 330Ω หรือ 470Ω เพื่อใช้แสดง
สถานะสำหรับเอาต์พุต

การออกแบบและวาดวงจรสำหรับสร้างลอจิกเกต โดยใช้โปรแกรม Fritzing

          1. วงจร AND



           2. วงจร OR


    
          3. วงจร NOR




      2. ต่อวงจรบนเบรดบอร์ดตามที่ได้ออกแบบไว้ เพื่อสร้างลอจิกเกต AND และมีวงจรปุ่มกด SW1 และ SW2 เพื่อใช้เป็นอินพุต และวงจรไดโอดเปล่งแสง LED1 เพื่อใช้แสดงสถานะสำหรับเอาต์พุต

การต่อวงจร AND ขณะทำการทดลอง

     3. สร้างอินพุตทั้งสองขาของลอจิกเกต ให้ครบ 4 กรณี แล้วสังเกตผลที่ได้ บันทึกผลลงในตารางที่ 2.1.1

     4. ยกเลิกการต่อวงจรบนเบรดบอร์ด

     5. ต่อวงจรบนเบรดบอร์ดตามที่ได้ออกแบบไว้ เพื่อสร้างลอจิกเกต OR และมีวงจรปุ่มกด SW1 และ
SW2 เพื่อใช้เป็นอินพุต และวงจรไดโอดเปล่งแสง LED1 เพื่อใช้แสดงสถานะสำหรับเอาต์พุต

การต่อวงจร OR ขณะทำการทดลอง

     6. สร้างอินพุตทั้งสองขาของลอจิกเกต ให้ครบ 4 กรณี แล้วสังเกตผลที่ได้ บันทึกผลลงในตารางที่ 2.1.2

     7. ยกเลิกการต่อวงจรบนเบรดบอร์ด

     8. ต่อวงจรบนเบรดบอร์ดตามที่ได้ออกแบบไว้ เพื่อสร้างลอจิกเกต NOR และมีวงจรปุ่มกด SW1 และ SW2 เพื่อใช้เป็นอินพุต และวงจรไดโอดเปล่งแสง LED1 เพื่อใช้แสดงสถานะสำหรับเอาต์พุต

การต่อวงจร NOR ขณะทำการทดลอง

     9. สร้างอินพุตทั้งสองขาของลอจิกเกต ให้ครบ 4 กรณี แล้วสังเกตผลที่ได้ บันทึกผลลงในตารางที่ 2.1.3

ผลการทดลอง 


ปุ่มกด SW1
ปุ่มกด SW2
สถานะของไดโอดเปล่งแสง ( ติด / ดับ)
0
0
ดับ
0
1
ดับ
1
0
ดับ
1
1
ติด

ตารางที่ 2.2.1: ผลการทดลองสำหรับลอจิกเกต AND



ปุ่มกด SW1
ปุ่มกด SW2
สถานะของไดโอดเปล่งแสง ( ติด / ดับ)
0
0
ดับ
0
1
ติด
1
0
ติด
1
1
ติด

  ตารางที่ 2.2.2: ผลการทดลองสำหรับลอจิกเกต OR



ปุ่มกด SW1
ปุ่มกด SW2
สถานะของไดโอดเปล่งแสง ( ติด / ดับ)
0
0
ติด
0
1
ดับ
1
0
ดับ
1
1
ดับ

ตารางที่ 2.2.3: ผลการทดลองสำหรับลอจิกเกต NOR

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

1. จากผลการทดลองต่อวงจรสำหรับสร้างลอจิกเกต AND OR และ NOR ตามลำดับ เป็นไปตามตาราง
ค่าความจริงสำหรับลอจิกเกตดังกล่าวหรือไม่ จงอธิบาย 
ตอบ : เป็นไปตามตาราง เพราะว่า อินพุตของลอจิกเกตก็คือ ตัวแปรบูลีน และเอาต์พุตก็คือ ค่าที่
ได้จากฟังก์ชันบูลีน ซึ่งค่าที่ได้ออกมาจากการทดลองขึ้นอยู่กับอินพุทที่เราใส่เข้าไปทำให้ออกมาตรงตามตารางค่าความจริง

2. เมื่อต่อวงจรปุ่มกดที่มีตัวต้านทาน 10kΩ แบบ Pull-Down (แทน Pull-Up) เพื่อสร้างสัญญาณอินพุต
ให้ลอจิกเกต จะให้ผลแตกต่างจากที่ได้ทดลองไปหรือไม่ จงอธิบาย
ตอบ :  ต่างกัน เพราะว่า การต่อแบบ Pull-Up ลอจิกเมื่อยังไม่กดปุ่ม เป็น 1 นั่นคือไฟติดและกดปุ่มลอจิกเป็น 0 คือไฟดับ แต่การต่อแบบ Pull-Down เมื่อยังไม่กดปุ่มลอจิกที่ได้เป็น 0 คือไฟดับและ เมื่อกดปุ่มลอจิกเป็น 1 ซึ่งเมื่อเราใส่อินพุทเข้าไปจะทำให้ผลการทดลองแตกต่างกันนั่นเอง

3. ถ้าจะสร้างวงจรตรรกะตามฟังก์ชันบูลีน โดยใช้ไอซี 74HCT00 เท่านั้น ซี 74HCT00 เท่านั้น
จะต้องออกแบบอย่างไร (ให้วาดรูปผังวงจร)
ตอบ :