16-канальный аналоговый мультиплексор CD74HC4067
Аналоговый цифровой преобразователь позволяет преобразовывать аналоговый мир в цифровой. Все сигналы, обнаруженные и обработанные человеком, являются аналоговыми сигналами
Платы Arduino обычно имеют встроенный цифровой аналоговый преобразователь далее (АЦП), но здесь мы имеем больше функций и больше разрешение. Например, у Arduino UNO есть 6 10-битных АЦП, но здесь мы имеем 16-битное разрешение.
При использовании внешнего АЦП мы освобождаем процессор.
У ESP8266 есть только 1 10-разрядный АЦП, который измеряет в диапазоне 0 В и 1 В. Это делает преобразование зависимым от сопротивлений, которые используются для делителя напряжения. Используя внешний АЦП, мы получим большую точность и качество преобразования.
Связь между внешним АЦП и Arduino или ESP8266 осуществляется через I2C.
При использовании внешнего АЦП мы освобождаем процессор.
У ESP8266 есть только 1 10-разрядный АЦП, который измеряет в диапазоне 0 В и 1 В. Это делает преобразование зависимым от сопротивлений, которые используются для делителя напряжения. Используя внешний АЦП, мы получим большую точность и качество преобразования.
Связь между внешним АЦП и Arduino или ESP8266 осуществляется через I2C.
Управляющие входы модуля S0-S3 подключаем на любые свободные выходы arduino.
Вход ЕN модуля соединяем с массой или подключаем на выход arduino чтобы иметь возможность выключать микросхему.
SIG сигнальный вход\выход мультиплексора подключаем на аналоговый вход arduino.
Вход ЕN модуля соединяем с массой или подключаем на выход arduino чтобы иметь возможность выключать микросхему.
SIG сигнальный вход\выход мультиплексора подключаем на аналоговый вход arduino.
Выходы датчиков подключаем к выходам С0-С15.
Код для Arduino
Код для Arduino
#define EN 3
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define SIG A0
void setup(){
Serial.begin(9600);
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
digitalWrite(S0, LOW);
digitalWrite(S1, LOW);
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);
}
void loop(){
for(int i = 0; i < 16; i ++){
Serial.print(readMux(i));
Serial.print(". ");
}
Serial.println();
delay(100);
}
int 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
};
for(int i = 0; i < 4; i ++){
digitalWrite(controlPin[i], muxChannel[channel][i]);
}
int val = analogRead(SIG);
return val;
}
Подробнее тут

Комментарии
Отправить комментарий