Un มัลติเพล็กเซอร์ เป็นวงจรรวมที่มีอินพุตหลายตัวและเอาต์พุตข้อมูลเดียว ด้วยวิธีนี้จึงเป็นไปได้ที่จะเลือกทางเข้าเพียงทางเดียวเพื่อส่งไปยังทางออก นั่นคือคุณสามารถเลือกจากอินพุตที่จะรับข้อมูลหรือบิตที่อยู่ที่อินพุตและละเว้นอินพุตที่เหลือ นี่เป็นเรื่องปกติมากในอุปกรณ์อิเล็กทรอนิกส์เมื่อการเชื่อมต่อหลายสายต้องใช้สายเดี่ยวหรือบัสร่วมกัน
นั่นคือโดยการควบคุมมัลติเพล็กเซอร์คุณสามารถทำได้ เลือกอินพุตที่เหมาะสมตลอดเวลา. สิ่งที่ทำให้เป็นไปได้ว่าแม้จะมีการเชื่อมต่อเพียงครั้งเดียว แต่คุณสามารถทำงานกับอุปกรณ์อินพุตหลายตัวพร้อมกันได้โดยที่อุปกรณ์เหล่านี้ไม่รบกวนกัน นอกจากนี้คุณควรทราบว่าโดยทั่วไปแล้ว demultiplexer จะใช้ร่วมกับมัลติเพล็กเซอร์ในหลาย ๆ โครงการ ...
มัลติเพล็กเซอร์คืออะไร?
บริการแบบผสมผสานเหล่านี้เรียกว่า มัลติเพล็กเซอร์ พวกเขามักจะไม่ซับซ้อน พวกเขาประกอบด้วยลอจิกเกตสองสามประตูขึ้นอยู่กับจำนวนอินพุตข้อมูลและการควบคุมอาจเพิ่มความซับซ้อนได้ ซึ่งมักจะรวมถึง 2n อินพุตและเอาต์พุตเดียวเช่นเดียวกับสายควบคุม และหลายใบสามารถใช้ร่วมกันเพื่อเพิ่มจำนวนตั๋วที่มีอยู่
สามารถเข้าใจได้ว่า ตัวเลือก ตัวอย่างเช่นสมมติว่าคุณมีอินพุตที่เรียบง่ายมากที่มีอินพุตสองอินพุตแบบที่ง่ายที่สุดที่สามารถสร้าง วงจรนั้นจะมีอินพุตและเอาต์พุตควบคุมเพียงช่องเดียว ถ้าอินพุตเป็น A และ B ด้วยอินพุตควบคุมจะเป็นไปได้ที่จะควบคุมว่า A เป็นใครส่งผ่านค่าไปยังเอาต์พุต S หรือถ้าเป็น B ใครเป็นผู้ทำ ในการทำเช่นนี้คุณต้องเปลี่ยนค่าของเส้นควบคุม C เช่นถ้า C = 0 มันจะเป็น A และถ้า C = 1 มันจะเป็น B
ตามที่คุณจะเข้าใจหากมีอินพุตมากกว่านี้จำเป็นต้องมีมากขึ้น อินพุตควบคุม สำหรับการเลือก ในความเป็นจริงมัลติเพล็กเซอร์เป็นตัวถอดรหัสชนิดพิเศษที่มีสัญญาณเปิดใช้งานสำหรับประตู AND แต่ละอันที่รวมอยู่และประตูหรือประตูระหว่างเอาท์พุตและประตู AND วิธีนั้นสามารถเลือกได้อย่างง่ายดาย
สำหรับแอปพลิเคชันคุณสามารถใช้งานได้ สำหรับสิ่งต่างๆมากมาย:
- ตัวเลือกอินพุตเพื่อแชร์บัสหรือสายเดียวเมื่อคุณมีอินพุตหลายตัว
- Serializer เพื่อให้รับค่าของแต่ละอินพุตตามลำดับ
- สำหรับการส่งแบบมัลติเพล็กซ์โดยใช้สายเชื่อมต่อเดียวกันสำหรับข้อมูลต่างๆจากอุปกรณ์ต่างๆ ตัวอย่างเช่นสมมติว่าคุณต้องการใช้พินข้อมูลเดียวกันของไมโครคอนโทรลเลอร์เพื่อเชื่อมต่อเอาต์พุตอุปกรณ์หลายตัว แต่สามารถส่งข้อมูลได้ทีละรายการเท่านั้น ...
- ทำหน้าที่ทางตรรกะ ฯลฯ
ประเภทมัลติเพล็กเซอร์
ขึ้นอยู่กับวิธีการแบ่งการส่งสัญญาณมี หลากหลายชนิด มัลติเพล็กเซอร์หรือมัลติเพล็กซ์:
- ตามการแบ่งความถี่
- ตามการแบ่งเวลา
- โดยการแบ่งรหัส
- ตามการแบ่ง ความยาวคลื่น
อย่างที่คุณสามารถจินตนาการได้ว่าพวกมันถูกควบคุมโดยความถี่ตามเวลาโดยนาฬิกาโดยรหัสไบนารีและตามความยาวคลื่น แต่ที่นี่ฉันสนใจเฉพาะแบบธรรมดา ...
นอกเหนือจากประเภทเช่นเดียวกับตัวแยกสัญญาณแล้วคุณสามารถค้นหาได้ด้วย ช่องมากหรือน้อย 2, 4, 8, 16 เป็นต้นขึ้นอยู่กับสิ่งที่คุณต้องการสำหรับโครงการ DIY ของคุณ
ความแตกต่างกับ demultiplexer
ในอุปกรณ์อิเล็กทรอนิกส์ดิจิทัลมี demultiplexerวงจรผสมที่เป็นตัวต่อต้านของมัลติเพล็กเซอร์ ในกรณีนี้จะมีการป้อนข้อมูลเพียงช่องเดียว แต่สามารถส่งผ่านเอาต์พุตต่างๆได้ กล่าวอีกนัยหนึ่งในกรณีนี้จะถูกตัดสินโดยใช้สัญญาณควบคุมที่ส่งออกข้อมูลอินพุตที่ส่งออก
Si คุณเชื่อมต่อตัวแยกสัญญาณเข้ากับเอาต์พุตของมัลติเพล็กเซอร์คุณสามารถมีระบบที่มีประโยชน์มากสำหรับการเรียนรู้ว่าอุปกรณ์ทั้งสองทำงานอย่างไร
ซื้อที่ไหน?
โดยปกติอุปกรณ์เหล่านี้จะใช้งานในรูปแบบ จุ่มชิป ง่ายมาก. คุณสามารถพบได้ในแบรนด์ต่างๆมากมายและมีอินพุตหรือเอาต์พุตจำนวนมากในกรณีที่เป็นตัวแยกสัญญาณ นอกจากนี้ยังพบได้ง่ายในสื่อเฉพาะทางต่างๆหรือร้านค้าออนไลน์ หากคุณสนใจที่จะซื้อในราคาที่ดีสิ่งเหล่านี้อาจเป็นตัวอย่างที่ดีในการเริ่มต้นโครงการของคุณ:
- ไอทีมัลติเพล็กเซอร์ 8 แชนเนล
- มัลติเพล็กเซอร์ 8 แชนเนล
- ผลิตภัณฑ์ที่ไม่พบ
- CD74HC4067 16 Channel Multiplexer / Demultiplexer
ฉันแนะนำให้คุณอ่าน เอกสารข้อมูล จากผู้ผลิตเพื่อให้ได้แนวคิดที่ชัดเจน pinoutเนื่องจากอาจแตกต่างกันไปขึ้นอยู่กับผู้ผลิตหรือประเภทที่คุณซื้อ
cd74hc4067
นอกจากนี้อย่างที่คุณเห็นยังมีโมดูลที่ดีมากที่ช่วยให้คุณมีอุปกรณ์ทั้งสองในเครื่องเดียว มันเป็นกรณีของ รู้จัก CD74HC4067โมดูลขนาดเล็กพร้อมเทคโนโลยี TTL ที่สามารถช่วยให้คุณทำงานกับ 16 ดานัลในแบบสองทิศทางโดยมี MUX / DEMUX นั่นคือคุณสามารถใช้มันเป็นสวิตช์อัจฉริยะชนิดหนึ่ง
ดังนั้น Arduino ของคุณสามารถอ่านและเขียนได้สูงสุด 16 อุปกรณ์ที่แตกต่างกัน ด้วยพิน 5 พินโดยใช้ 4 พินสำหรับควบคุมและอีกอันเพื่อรวบรวมสัญญาณที่ตั้งใจจะอ่านหรือเขียนตามช่องสัญญาณที่เลือก
สิ่งที่ดีเกี่ยวกับชิปนี้ก็คือ ใช้งานได้กับทั้งสัญญาณดิจิตอลและอนาล็อกทำให้เข้ากันได้กับเซ็นเซอร์จำนวนมากที่ทำงานบนชิปอนาล็อกและดิจิทัลอื่น ๆ รวมถึงองค์ประกอบอิเล็กทรอนิกส์ที่แตกต่างกันมากมาย มันให้ความเก่งกาจ นั่นคือเหตุผลที่พวกเขาเรียกอีกอย่างว่าตัวขยาย I / O หรือเครื่องขยายสัญญาณอินพุตและเอาต์พุต ...
คุณยังสามารถใช้สำหรับ การสื่อสารผ่านพอร์ตอนุกรม, บัส I2C หรือ SPI ซึ่งเราได้พูดไปแล้วในโอกาสอื่น ๆ
แน่นอนก่อนที่จะทำงานกับเขาคุณต้องแน่ใจว่า ตอบสนองแรงดันไฟฟ้าและกระแส ที่ยอมรับวงจรนี้เพื่อไม่ให้เกิดความเสียหาย ตัวอย่างเช่นในกรณีนี้สามารถให้ได้ถึง 20 mA และแรงดันไฟฟ้า 2 ถึง 6v อย่างไรก็ตามหากคุณต้องการทำงานกับกระแสที่สูงขึ้น คุณสามารถใช้รีเลย์ หรือผ่านทรานซิสเตอร์
บูรณาการกับ Arduino
รูปแบบของ มีอินพุตเพิ่มเติมบนบอร์ด Arduino ของคุณหรือเอาต์พุตเพิ่มเติมคือการใช้มัลติเพล็กเซอร์และตัวแยกสัญญาณ ด้วยพวกเขาคุณจะหลีกเลี่ยงไม่ต้องซื้อบอร์ดราคาสูงกว่าที่มีพินมากขึ้นหรือต้องใช้เทคนิคอื่น ๆ เพื่อเชื่อมต่อทุกสิ่งที่คุณต้องการ
ตัวอย่างเช่นคุณสามารถใช้ไฟล์ โมดูล MUX และ DEMUX เพื่อให้สามารถมีทั้งสององค์ประกอบในองค์ประกอบเดียวจากนั้นรวมเข้ากับโครงการของคุณด้วย Arduino ได้ง่ายๆ ด้วย CD74HC4067 คุณสามารถเชื่อมต่อได้อย่างง่ายดายดังนั้นคุณต้องปฏิบัติตามกฎเหล่านี้:
- Vcc ของชิป MUX / DEMUX คุณต้องเชื่อมต่อกับ Vcc ของ Arduino หรือ 5V
- GND กราวด์คุณต้องเชื่อมต่อกับ GND ของ Arduino
- หมุดที่มีเครื่องหมาย S0, S1, S2, S3 เป็นหมุดที่ควบคุมช่องสัญญาณที่ใช้งานอยู่โดยมี Arduino Digital I / O สี่ตัวเช่น D8, D9, D10 และ D11
- นอกจากนี้ EN ยังเปิดใช้งานเพื่อให้ทำงานเป็นมัลติเพล็กเซอร์ที่คุณสามารถเชื่อมต่อกับ GND ของ Arduino
- และ SIG คือสัญญาณเอาต์พุตที่จะกำหนดช่องสัญญาณที่เลือก สามารถเชื่อมต่อกับ Arduino หรืออุปกรณ์ใด ๆ ที่ต้องการอ่านเอาต์พุต ในกรณีนี้ฉันได้เชื่อมต่อกับ A0 เพื่อรับค่าจาก Arduino เอง
- ที่ปลายอีกด้านของโมดูลคุณจะมีอินพุตในกรณีนี้ซึ่งก็คือ C0-C10 ที่คุณสามารถเชื่อมต่อกับอุปกรณ์ของคุณได้
เมื่อเชื่อมต่อแล้วรหัส Arduino สามารถทำได้ง่าย Arduino IDE ร่างเป็นมัลติเพล็กเซอร์ อาจเป็นดังต่อไปนี้ (รหัสนี้จะปิดและเปิดช่องตามลำดับเท่านั้น แต่คุณสามารถแก้ไขเพื่อสร้างโปรเจ็กต์ที่คุณต้องการได้):
const int muxSIG = A0; const int muxS0 = 8; const int muxS1 = 9; const int muxS2 = 10; const int muxS3 = 11; int SetMuxChannel(byte channel) { digitalWrite(muxS0, bitRead(channel, 0)); digitalWrite(muxS1, bitRead(channel, 1)); digitalWrite(muxS2, bitRead(channel, 2)); digitalWrite(muxS3, bitRead(channel, 3)); } void setup() { pinMode(muxSIG, OUTPUT); pinMode(muxS0, OUTPUT); pinMode(muxS1, OUTPUT); pinMode(muxS2, OUTPUT); pinMode(muxS3, OUTPUT); } void loop() { for (byte i = 0; i < 16; i++) { SetMuxChannel(i); digitalWrite(muxSIG, HIGH); delay(200); digitalWrite(muxSIG, LOW); delay(200); } }
หากคุณต้องการใช้เป็น DEMUX คุณควรพิจารณาว่า C0-C10 เป็นเอาต์พุตเท่านั้นและ SIG จะเป็นอินพุต ในกรณีที่คุณต้องการ ใช้เป็นตัวแยกสัญญาณรหัสจะเปลี่ยนไปในลักษณะนี้:
onst int muxSIG = A0; const int muxS0 = 8; const int muxS1 = 9; const int muxS2 = 10; const int muxS3 = 11; int SetMuxChannel(byte channel) { digitalWrite(muxS0, bitRead(channel, 0)); digitalWrite(muxS1, bitRead(channel, 1)); digitalWrite(muxS2, bitRead(channel, 2)); digitalWrite(muxS3, bitRead(channel, 3)); } void setup() { Serial.begin(9600); pinMode(muxS0, OUTPUT); pinMode(muxS1, OUTPUT); pinMode(muxS2, OUTPUT); pinMode(muxS3, OUTPUT); } void loop() { for (byte i = 0; i < 16; i++) { SetMuxChannel(i); byte muxValue = analogRead(muxSIG); Serial.print(muxValue); Serial.print("\t"); } Serial.println(); delay(1000); }
โปรดจำไว้ว่าคุณสามารถรับข้อมูลเพิ่มเติมได้ด้วยความช่วยเหลือของเรา หลักสูตรการเขียนโปรแกรม Arduino ฟรี.
สวัสดีฉันกำลังทำโปรเจ็กต์สิ่งที่ฉันทำในการใช้ 74hc4067 สำหรับอินพุตของเซ็นเซอร์สิ่งกีดขวางอินฟราเรด 16 ตัวและเซ็นเซอร์แต่ละตัวจะทำให้ฉันได้รับเอาต์พุตที่แตกต่างกัน ถ้าฉันสามารถทำได้กับ arduino mega แต่ฉันต้องใช้เซ็นเซอร์อินฟราเรด 50 ตัวและแต่ละตัวจะเปิดเอาต์พุตนั่นคือ 50 เอาต์พุตฉันกำลังคิดว่าจะใช้ 744067 หลายตัวสำหรับอินพุตเซ็นเซอร์และ tlc5940 สำหรับเอาต์พุต แต่รหัสการเขียนโปรแกรมคืออะไรฉันหายไปเล็กน้อยขอบคุณล่วงหน้าสำหรับความช่วยเหลือ