CD74HC4067 模块的使用-Arduino中文社区 - Powered by Discuz! Archiver

Zoologist 发表于 2017-8-25 17:29

CD74HC4067 模块的使用

CD74HC4067 作用是选通一路对十六路模拟信号,更详细的说,根据芯片上 S0-S3 四个不同管脚的组合,让SIG管脚和C0-C15导通。因此,最常见的用法是用来测试模拟信号。比如,ArduinoUno上面只有6个模拟输入,用一个CD74HC4067可以多扩展出来16个,于是可以支持6+16-1=21个模拟引脚。
                              这个芯片的使用方法非常简单,例如: S0-S3 分别是 0 0 0 0时,SIG就和 C0是导通的。因此,这里我做一个实验,将一些电阻串联起来,分别接在C1 C3 C5 C9 C11 上面,然后测量换算每个Pin的电压.//Mux control pins
int s0 = 7;
int s1 = 6;
int s2 = 5;
int s3 = 4;

//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()
{
        int v;

        //Loop through and read all 16 values
        //Reports back Value at channel 6 is: 346
        for(int i = 0; i < 16; i ++)
        {
                Serial.print("Value at channel ");
                Serial.print(i);
                Serial.print(" is : ");
                v = readMux(i);
                Serial.println(v * 5.0 / 1024);
        }
        Serial.println(" ");
        delay(3000);
}


int readMux(int channel)
{
        int controlPin[] = {s0, s1, s2, s3};

        int muxChannel =
        {
                {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, muxChannel);
        }

        //read the value at the SIG pin
        int val = analogRead(SIG_pin);

        //return the value
        return val;
}
最终运行结果如下: 同时我使用万用表测量,两者相差在 0.02V左右,证明还是非常准确的. 除了当作模拟的扩展之外,这个芯片还可以用来控制 LED。在电路的世界里,即便最简单的芯片都可以玩出让人匪夷所思的效果。参考:1.   http://bildr.org/2011/02/cd74hc4067-arduino/#2.   http://www.tigoe.com/pcomp/code/arduinowiring/540/

micyb00 发表于 2018-11-8 11:36

不错 这个扩展还可以

李长安 发表于 2019-4-18 21:36

楼主您好,请问这个模块的内阻是多少?可以用该模块来拓展引脚制作电压表吗?

Zoologist 发表于 2019-4-18 21:45

李长安 发表于 2019-4-18 21:36
楼主您好,请问这个模块的内阻是多少?可以用该模块来拓展引脚制作电压表吗? ...

不知道,建议你去找一下 datasheet

我觉得可以用来做电压表

李长安 发表于 2019-4-18 21:52

Zoologist 发表于 2019-4-18 21:45
不知道,建议你去找一下 datasheet

我觉得可以用来做电压表

好的,谢谢您!

剑出鞘1214 发表于 2019-5-15 15:09

我想问下练好电路后还要在程序写你上面的程序对吗,谢谢

Zoologist 发表于 2019-5-15 17:08

剑出鞘1214 发表于 2019-5-15 15:09
我想问下练好电路后还要在程序写你上面的程序对吗,谢谢

是的 就是这样的,硬件软件需要配合起来

nongminbobo 发表于 2019-6-23 10:23

楼主您好,咱这个有电阻么?不知道要不要接电阻。

Zoologist 发表于 2019-6-24 08:16

nongminbobo 发表于 2019-6-23 10:23
楼主您好,咱这个有电阻么?不知道要不要接电阻。

你说什么电阻?

nongminbobo 发表于 2019-6-24 09:03

Zoologist 发表于 2019-6-24 08:16
你说什么电阻?

额,我也不知道怎么描述这个事情;
或者您这个示例有接线图么?代码我已经看到了,大概能看懂,但是这个芯片不会接,或者您可以加我QQ么?我的QQ409814558,我想请教点问题,如果有机会我会把我的疑问和您的回答都备份到论坛中。
页: [1] 2 3
查看完整版本: CD74HC4067 模块的使用