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; }
Подробнее тут
Комментарии
Отправить комментарий