ویژگی های ماژول مالتی پلکسر 16 کاناله CD74HC4067
از ماژول مالتی پلکسر 16 کاناله CD74HC4067 میتوان برای زمانی که تعداد زیادی ورودی آنالوگ در یک مدار وجود دارد، استفاده کرد. در این حالت نیاز است در هر زمان یکی از آن ورودیها انتخاب شده و پردازش شوند. از این مالتی پلکسر میتوان برای انتخاب از بین 16 ورودی آنالوگ استفاده کرد. برای این منظور 4 پایه S0-3 تعبیه شدهاند که با دادن مقادیر مناسب به آنها یکی از ورودیهای آنالوگ انتخاب شده و در پایه SIG به عنوان خروجی قرار میگیرد.
معرفی پایه ها (Pinout) ماژول مالتی پلکسر 16 کاناله CD74HC4067
ماژول مالتی پلکسر 16 کاناله CD74HC4067 دارای 24 پایه به شرح زیر است:
- VCC: تغذیه ماژول –5 ولت
- GND: زمین
- EN: پایه Enable (این پایه اصطلاحا Active Low است.)
- S0-3: انتخاب یکی از 16 پایه ورودی آنالوگ به عنوان سیگنال خروجی نهایی
- C0-15: ورودیهای آنالوگ
- SIG: سیگنال خروجی
پین اوت (Pinout) این ماژول را میتوانید در تصویر زیر مشاهده کنید.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
راه اندازی ماژول مالتی پلکسر 16 کاناله CD74HC4067
گام اول: سیم بندی
برای کار کردن با این ماژول باید مطابق مدار زیر، ماژول را به آردوینو وصل کنید.
سپس ورودیهای آنالوگ دلخواه را باید به پایههای C0-15 متصل کنید.
برای تست عملکرد مدار و کد، می توان از تقسیم مقاومتی مطابق سیمبندی زیر استفاده کرد.
گام دوم: کد
مدار تقسیم مقاومتی را مطابق تصویر فوق ببندید. کد زیر را روی برد آردوینو آپلود کنید. پس از آپلود کد، پنجره ی Serial Monitor را باز کنید.
/*
Modified on Nov 28, 2020
Modified by MehranMaleki from Arduino Examples
Home
*/
//Mux control pins
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;
//Mux in "SIG" pin
int SIG_pin = 0;
void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
Serial.begin(9600);
}
void loop(){
//Loop through and read all 16 values
for(int i = 0; i < 16; i ++){
Serial.print("Value at channel ");
Serial.print(i);
Serial.print("is : ");
Serial.println(readMux(i));
delay(1000);
}
}
float readMux(int channel){
int controlPin[] = {s0, s1, s2, s3};
int muxChannel[16][4]={
{0,0,0,0}, //channel 0
{1,0,0,0}, //channel 1
{0,1,0,0}, //channel 2
{1,1,0,0}, //channel 3
{0,0,1,0}, //channel 4
{1,0,1,0}, //channel 5
{0,1,1,0}, //channel 6
{1,1,1,0}, //channel 7
{0,0,0,1}, //channel 8
{1,0,0,1}, //channel 9
{0,1,0,1}, //channel 10
{1,1,0,1}, //channel 11
{0,0,1,1}, //channel 12
{1,0,1,1}, //channel 13
{0,1,1,1}, //channel 14
{1,1,1,1} //channel 15
};
//loop through the 4 sig
for(int i = 0; i < 4; i ++){
digitalWrite(controlPin[i], muxChannel[channel][i]);
}
//read the value at the SIG pin
int val = analogRead(SIG_pin);
//return the value
float voltage = (val * 5.0) / 1024.0;
return voltage;
}
در کد بالا با دادن مقادیر مناسب به پایههای S0-3 در هر ثانیه به ترتیب پایههای C0-15 را انتخاب کرده و ولتاژ پایه SIG را که باید معادل پایه انتخاب شده باشد، در Serial Monitor نمایش میدهیم.
خروجی کد به شکل زیر است.