วันเสาร์ที่ 12 กันยายน พ.ศ. 2558

Digital Weekly Jurnal#5 :: COMBINATIONAL LOGIC FUNCTIONS

LED 7 - Segment
      เป็นอุปกรณือิเล็คทรอนิคส์ที่มีไว้เพื่อแสดงตัวเลขระบบเลขฐานสิบหก ซึ่งภายในนั้นก็คือหลอดไฟ LED ธรรมดาที่ต่อเรียงกันไว้เพื่อให้มันแสดงตัวเลขออกมา
ภาพแสดงโครงสร้างภายในของ 7-Segment.
        ประเภทของ 7 - Segment นั้นจะมีอยู่ 2 ประเภทคือ
            1.) Common Anode จะอิงไฟเลี้ยงเป็นหลัก คือเวลาต่อใช้งานก็ต่อเข้า Vcc จากนั้นก็ต่อขาที่จะแสดงผลลงกราวน์ไป
            2.) Common Cathode จะอิง GND เป็นหลัก คือ ไฟเลี้ยงจะต่อเข้าหลอด LED แต่ละหลอด แล้วจากนั้นไฟเลี้ยงทั้งหมดจะลงไปรวมกราวน์ที่ กราวน์ของ 7-Segment 
ชนิดของ 7 - Segment
การต่อใช้งาน 7-Segment
การต่อ 7-segment นั้นถ้าจะต่อให้แสดงตัวเลขขึ้นมาก็ต้องต่อให้ถูกขาด้วยนะ ซึ่งดูได้จากรูปภาพนี้
Truth Table OF 7-Segment.


การแสดงผลของ 7-Segment
หมายเหตุ :: ขา Dp คือ ไฟแสดงจุดทศนิยม.
       ซึ่งการต่อ 7-Segment นั้น แน่นอนว่ามันคือหลอด LED ที่ต่อเรียงกัน ดังนั้นแล้ว กระแส ก็เป็นปัจจัยสำคัญที่จะทำให้ 7-Segment เสียหายได้ ดังนั้นเราควรต่อ Resister กันกระแสไว้ด้วย
Decoder - ไอซีถอดรหัส
       เป็น IC ที่ทำหน้าที่ถอดรหัสเลขฐานสองให้กลายเป็นเลขฐานสิบหก ซิ่งเหมาะกับการนำไปใช้เปิด - ปิด อุปกรณ์บางชิ้นได้ และเช่นเดียวกัน เราก็ใช้ IC ตัวนี้หล่ะ แปลงเลขฐานสองให้กลายเป็นเลขฐานสิบหก เพื่อนำไปแสดงใน 7- Segment
Binary To Hex
       ในชุดฝึก NX-100 นั้น ได้มีโซน BINARY TO HEX DECODER ไว้เพื่อให้เราทดลองต่อ Logic เข้ากับ 7-Segment เพื่อดูตัวเลขที่แปลงจากฐานสองไปเป็นฐานสิบหก
   Classwork I :: ต้องการแสดงเลขฐานสองให้กลายเป็นเลขฐานสิบเพื่อให้ดูเข้าใจง่ายขึ้น
     - BCD -> Binary Coded Decimal
ลองดูผังก่อนว่าจะออก Truth Table ยังไง
หลังจากดูผังแล้วสามารถเขียน Truth Table ได้แบบนี้
จากนั้นทำการออกแบบ GATE โดยใช้โปรแกรม Logic Friday ได้ดังนี้
จากนั้นทำการต่อวงจรจริง

ผลการทำงาน ถือว่าใช้ได้อย่างดีเยี่ยม

        ปัญหาที่พบ 
         นั่งสับสนกับขา F0-F7 นานมาก ซึ่งตอนแรกก็แก้โดยการยอมต่อวงจรใหม่ทั้งหมด 3 รอบแต่สุดท้ายแล้ว ผิดตรงต่อ Output ผิด นั่้งโง่ตั้งนาน

*-------------------------------------------------------------------------------------------*

Encoder - ไอซีเข้ารหัส
      IC ที่ทำหน้าที่เปลี่ยนข้อมูลดิบต่างๆ ให้เป็นข้อมูลระบบใดระบบหนึ่งในวงจรดิจิตอล เช่นข้อมูลจากสวิตซ์อินพุตจำนวน 8 ตัวใช้สายข้อมูลจำนวน 3 เส้น เป็นต้น



*-------------------------------------------------------------------------------------------*

Multiplexer (Mux)
        มัลติเพล็กเซอร์ คือ วงจรที่ใช้เลือกสัญญาณ Input ที่มีหลายๆทางให้ออก Output ทางเดียวเท่านั้น เปรียบเสมือนสวิทซ์ชนิดแกนเดียวหลายตัวเลือก (Selector Switch) โดยที่จำนวน Input (n) จะมีค่าเท่ากับ 2^m เมื่อ m คือจำนวน Input ที่ใช้ในการควบคุมการเลือก ดังรูป
      2 To 1 MUX
        เป็นวงจรเลือกข้อมูล 2 ข้อมูล โดยเลือกข้อมูลใดข้อมูลหนึ่งออกมาทาง Output โดยมีInputเลือกหนึ่งInputเป็นตัวเลือกเป็นช่องทางในการเลือกข้อมูล
      4 To 1 MUX
         เป็นวงจรเลือกข้อมูล 4 ข้อมูล โดยเลือกข้อมูลใดข้อมูลหนึ่งออกมาทาง Output โดยมีInputสองInputเป็นตัวเลือกในการทำงาน ซึ่งถ้าเปรียบกับ Op-Amp ก็ใช้ในการเลือกช่วงขยายสัญญาณนั่นเอง
DeMultiplexer (Demux)
วงจรดีมัลติเพล็กเซอร์เป็นวงจรที่มีการทำงานตรงกันข้ามกับวงจรมัลติเพล็กเซอร์ โดยจะมีInputเพียงInputเดียว ส่งออกมายัง Output หลายๆ Output เหมือนกับสวิทซ์ที่มีทางออกหลายทาง
       1 To 4 Demux
          เป็นวงจรที่ใช้เลือกข้อมูลทั้งหมดเข้ามา โดยจะได้ข้อมูลออกมาทาง Output 4 Output โดยมีInputเลือก 2 Input เป็นตัวเลือก
  Class Work II :: ทำ Mux 4 To 1 จาก 2 To 1 Mux
       
           การทดลอง Ep.นี้ จะทดลองสร้าง 4 To 1 Mux ขึ้นมาโดยใช้หลักการจาก 2 To 1 Mux

Truth Table 2 To 1 Mux และ 4 To 1 Mux
 อันดับแรกก็ต่อ 2 To 1 Mux จำนวน 2 ชุด เพื่อทดสอบการส่งข้อมูลของ Input ทั้ง 4
จากนั้นก็นำ 2 To 1 Mux จำนวน 2 ชุดนั้นมาสร้างเป็น Truth Table 
 Truth Table 2 To 1 Mux จำนวน 2 ชุด
สุดท้ายแล้ว จะได้ Truth Table หน้าตาแบบนี้

จากนั้นก็ทำการ Map To Gate ออกมา
ในการทดลองนี้ได้ทดลองต่อโดยลองใช้หลักโครงสร้างของตัว 2 To 1 Mux มาลองต่อเล่นก่อน
หลังจากนั้นก็ใช้ IC 74HC257 แทน
 Simulation ก่อนต่อวงจรจริง
จากนั้นทำการต่อวงจรจริง

ผลการทำงาน ถือว่าใช้ได้อย่างดีเยี่ยม
      หมายเหตุ :: วันนั้นอากาศเย็นกำลังดี ฝนตกลงมาดับกระหายร้อนช่วยให้ชีวิตอยู่ง่ายขึ้น นึกคะนองทดลองต่อวงจรโดยไม่ใช้เจ้า NX-100 Plus ทดลองใช้ความรู้เกี่ยวกับ TTL และ CMOS ในเรื่องของ Levels HIGH กับ LOW โดยไฟ 5 V. แทน HIGH และไฟ 0 V. แทน LOW ปรากฏว่า ใช้งานได้เหมือนกัน

       UpGread การทดลองต่อมา ลองเปลี่ยน OR เป็น XOR เพื่อเพิ่มความมั่นใจว่าข้อมูลที่ได้นั้นเป็นข้อมูลที่มาจากเส้นใดกันแน่ 
 Truth Table 2 To 1 Mux จำนวน 2 ชุด เหมือนเดิม
สุดท้ายแล้ว จะได้ Truth Table หน้าตาแบบนี้ 

จากนั้น Simulation โดยพบว่า ใช้งานได้เหมือนกับ 4 To 1 Mux ทุกประการ และ Sure กว่าใช้ OR
  OR VS XOR
  - OR ผลรวมสุดท้าย ถ้า SS=0 แล้ว A=1 ก็หมายความว่า ส่งข้อมูล A ออกไป แต่ถ้า C=1 ด้วย มันก็ส่งข้อมูล C ไป เลยทำให้ผลสุดท้าย กลายเป็น 1,1 มันก็ OUTPUT เป็น 1 แต่ก็ทำให้ไม่รู้ว่ามันส่งข้อมูลจากทางไหนมาแน่ๆ เปรียบเสมือน Don't Care 
  - XOR ผลรวมสุดท้าย ถ้า SS=0 แล้ว A=1 ก็หมายความว่า ส่งข้อมูล A ออกไป แต่ถ้า C=1 ด้วย มันก็ส่งข้อมูล C ไป เลยทำให้ผลสุดท้าย กลายเป็น 1,1 คราวนี้ XOR ก็ให้ OUTPUT เป็น 0 วงจรไม่ทำงาน เพราะว่ามันต้องตรวจสอบให้แน่นอนว่าเราต้องการส่งข้อมูลไหนออกไปกันแน่ เลยทำให้ SURE ในเรื่องการส่งข้อมูล  

ปัญหาที่พบ
        ช่วงแรกไฟ LED ติดตลอดเวลา ก็นั่งงมวงจรตั้งนาน โดยตอนแรกก็เชควงจรส่วนของ 2 To 1 Mux ก่อนก็ทำงานได้ปกติ ต่อมาเชคส่วนของ OR GATE ปรากฏว่า ใช้งานได้ปกติ จากกการเชค Truth Table ของ OR GATE จนสุดท้ายกลับมาเชคตัว IC 74HC257 พบว่าลืมต่อไฟ GND เข้าขา 15 ของตัว IC 74HC257 เลยทำให้ ไฟ LED นั้นติดตลอดเวลา

วันอังคารที่ 1 กันยายน พ.ศ. 2558

Digital Weekly Jurnal#4 :: KARNAUGH MAPS

      ในเรื่องการยุบวงจร Logic Gates นั้น ซึ่งจาก Block ที่แล้วนั้นได้รู้จักกับ Boolean Expression แล้ว ซึ่งถ้าคนที่แม่นทางคณิตศาสตร์ก็สามารถนำวิธีนี้ไปใช้ยุบวงจรได้  แต่เนื่องด้วยความซับซ้อนส่วนบุคคลนั้นจะทำให้เราได้รู้จักการยุบวงจรอีกหนึ่งวิธีซึ่งก็คือ Karnaugh Maps.

       Karnaugh Maps
           เป็นการเขียน Output ในรูปแบบตาราง Matrix เพื่อให้ดูง่ายต่อการลดรูปวงจร แถวยังรวดเร็วด้วย
       การใส่ค่า Truth Table ลง K-map.
         - มุมซ้ายของตาราง กำหนดให้เป็นช่องของ A แล้วไล่ 0 1 ลงมา
         - บนหัวตารางเป็นของช่อง B ใสเลข 0 1 เรียงไปทางขวา
          - นั่งเทียบผล Output ว่าตรงกันช่องไหน แล้วเขียนลงไป
           - จากนั้นก็ทำการ วงกลม เลข '1' (กรณีทำ SOP) หรือเลข '0' (กรณีทำ POS) ที่อยู่ติดกันเฉพาที่อยู่ในด้าน บน - ล่าง - ซ้าย - ขวา เท่านั้น (ห้ามวงเฉียงหรือวงแบบโดนัทเด็ดขาด)

       - การวงต้องวงให้ครอบคลุมจำนวน 2^n โดยไม่มีเลข '0' (กรณีทำ SOP) หรือเลข '1' (กรณีทำ POS) อยู่ด้วย
กรณีทำ K-map 3 Input.
         คราวนี้ตารางมีหน้าตาเปลี่ยนไปเป็นแบบ 2*3 แล้ว (ไม่ใช่ 3*3 นะแจ๊ะ) การเขียนตารางเพื่อไล่เขียน Output นั้น ต้องมีฝั่งใดฝั่งหนึ่งมี 2 ตัวแปร(เพื่อนรัก)อยู่ด้วยกัน และอีกฝั่งก็มีเพียงตัวแปรเดียวเหมือนเดิม จะเขียนได้เป็น (A กับ BC)หรือ(AB กับC) แบบนี้ แต่ การเรียงเลขบนตาราง K-map นั้นจะเรียงจาก 00 -> 01 -> 11 -> 10 ทำไม ?? ทำไมมันไม่เรียงตาม Binary ทำไม TT
แล้วอะไรคือ Gray Code ???
คือรหัสที่แต่ละค่าเปลี่ยนแปลงไป จะมีค่าต่างจากค่อก่อนหน้า 1 bit เสมอ 
Decimal
Binary
Gray Code
0
0000
0000
1
0001
0001
2
0010
0011
3
0011
0010
4
0100
0110
5
0101
0111
     
     เป็นรหัสตัวเลขที่ไม่เหมาะแก่การนำไปคำนวณ แต่มีข้อดีคือโอกาสเกิด error ในการส่งข้อมูลจะลดลง ซึ่ง Gray Code ถูกนำมาใช้ใน K-map เพื่อช่วยทำให้ Boolean ที่ร่วมกันมาอยู่ในช่องที่ติดกัน
                 เกร็ดความรู้เกี่ยวกับ Gray Code.
                ขั้นตอนการแปลงเลขฐานสอง เป็น รหัสเกรย์
            1.) เริ่มจากบิตแรกซึ่งถือว่ามีนัยสำคัญมากที่สุด (MSB) ดึงมาไว้เป็นบิตแรกเช่นเดิม
            2.) นำบิตแรกไปบวกกับบิตตัวที่ 2
            3.) นำบิตตัวที่ 2 ไปบวกกับบิตตัวที่ 3
            4.) นำบิตตัวที่ 3 ไปบวกกับบิตตัวที่ 4 ไปเรื่อยๆจนหมด ผลบวกที่เราได้ ก็คือ Gray Code เช่น
                   . Binary________1110011001
                   . Gray Code_____1001010101
                ขั้นตอนการแปลงจากรหัสเกรย์ เป็นเลขฐานสอง
            มีหลักคล้ายๆกับ การแปลงเลข Binary ให้เป็น Gray Code โดยเริ่มต้นจาก MSB เช่นเดียวกัน นั่นคือ
           1.) MSB ของเลข Binary จะมีค่าเหมือนกับ MSB ของ Gray Code
           2.) นำ MSB ของเลข Binary บวกกับบิตที่ 2 (นับจาก MSB) ของ Gray Code ผลบวกที่ได้คือ บิตที่ 2 ของเลข Binary
           3.) บิตที่ 2 ของเลข Binary บวกกับบิตที่ 3 ของ Gray Code ผลบวกที่ได้คือ บิตที่ 3 ของเลข Binary
           4.) บวกกันเช่นนี้ไปเรื่อยๆจนหมด เช่น
                 . Gray Code_______1110111010
                 . Binary__________10110100011
        เอาหล่ะ พอหอมปากหอมคอกับ Gray Code กับแล้ว กลับมาสู่เรื่องของ K-Map แบบ 3 input อีกครั้งเถอะนะ.
ตัวอย่างการเขียน K-map แบบ 3 Input
Hint :: คราวนี้ ตารางของเรานั้นสามารถม้วนเข้าหากันเพื่อให้วงกลมนั้นมันเชื่อมต่อกันได้ด้วยนะ
คราวนี้ลองมาเขียน K-map ของตัวอย่างข้างบนกันเถอะ
จะเห็นว่า มันช่างง่ายและดูดีกว่านั่งไล่ Boolean Expression แล้วไปเข้า Boolean Algieba ชะอีกเมื่อเปรียบเที่ยบ
 
K-map แบบ 4 ตัวแปร
              การเขียนตารางก็เหมือนแบบ 3 input แต่เป็นแบบ 4*4 และทั้งทางซ้ายและบัวบนมีตัวแปร 2 ตัวและไล่รหัส Gray Code เหมือนเดิม
 
       Hint :: คราวนี้ ตารางของเรานั้นสามารถพับเข้าหากันเพื่อให้วงกลมนั้นมันเชื่อมต่อกันได้ด้วยนะ
เช่นกันนั้น เราสามารถทำในรูปของ POS ได้เช่นกันดังที่กล่าวไว้แล้วในข้างต้น
Don't care Term.
            กรณีที่ Output ของ State หรือเงื่อนไขของ Input นั้น ไม่ส่งผลใดๆต่อการทำงานของระบบ ไม่ว่า Output นั้นจะให้ค่าเป็น '0' หรือ '1' ก็ตาม
             ลองมาดู CASE ของ Don't care term กันบ้างดีกว่า
 CASE ไฟแสดงความเร็วในการปั่นจักรยาน
 Truth Table ของวงจรแสดงไฟ
 ทำ K-Map ของแต่ละ Output
 แปลงเป็น Digital logic circuit.
 เรื่อง Don't care บางกรณีก็คิดได้ ถ้ามันส่งผลให้ได้ Gate Minimize ก็ควรนำมันไปคำนวณด้วย แต่ถ้ามันไม่ได้ช่วย ก็ควรละทิ้งมันไป อิอิ  
K - Map กรณี 5 ตัวแปร.
      - ลักษณะจะเป็นตาราง 4*8 ที่มีเส้นคั่นอยู่ตรงกลาง
      - ฝั่งหนึ่งมีตัวแปร 2 ตัว อีกฝั่งมีตัวแปร 3 ตัว เรียงรหัส gray code
      - มองโดยรวมแล้วจะเป็นเหมือนขนมชั้นที่มีแค่ 2 ชั้นเท่านั้น
K - Map 6 ตัวแปร.
      - ลักษณะจะเป็นตาราง 8*8 ที่มีเส้นคั่นอยู่ตรงระหว่างกลาง
      - มีตัวแปรฝั่งละ 3 ตัว เรียงรหัส gray code
      - มองโดยรวมแล้วจะเป็นเหมือนขนมชั้นที่มีอยู่ 4 ชั้นด้วยกัน
      - ซับซ้อนสุดๆๆ
คำแนะนำในการแปลงวงจร Logic Gate. 
    - 1-2 ตัวแปรแนะนำ Boolean Algrbra
    - 3-4 ตัวแปรแนะนำ K - Maps.
    - 5-6 ตัวแปรอาจจะ powerful ใช้ K-map หรือ Computer ก็ได้
    - มากกว่า 7 ตัวแปร ใช้ Computer คำนวณเถอะนะ...
     ในปัจจุบันการลดรูป Logic โดยใช้คอมพิวเตอร์นั้นก็กำลังนิยมมาก ซึ่งผู้พัฒนา Software นั้นก็ต้องเชี่ยวชาญเรื่องการลดวงจรโดยใช้มืออย่างถ่องแท้แน่นอน
     แนะนำโปรแกรมลดรูปวงจร Logic Friday ใช้งานง่ายเพียงแค่ปลายนิ้วกด Enter เท่านั้น ดาวน์โหลดโล้ด 
**** หมายเหตุ เรื่องเกี่ยวกับ DeMorgan's Theorems นั้นผมขอลงไว้ที่ลิ้งของ Week 3 แล้วครับ****  คลิ๊กที่ตรงนี้^^
ปัญหาที่เกิดขึ้นจากบทเรียนนี้
   - เรียนครั้งแรกยังเข้าใจอยู่ครับ แต่พอขึ้น 3 Input เริ่มสับสนแล้วครับว่าจะจับประเด็นเขียนตารางลง Output อย่างไร
   - ที่สับสนยิ่งกว่านั้นคือ การวงตัวเลข 1 นั้น ที่มันสามารถพับ หรือ ม้วนได้ ยิ่งทำให้ช่วงแรกๆดูยากแต่พอได้ลองทำจริงแล้ว เข้าใจขึ้นมาบ้าง และดู output เข้าใจมากขึ้น