Как подключить декодер 74HC238 к ардуино

Как подключить декодер 74HC238 к ардуино

В этом проекте рассмотрим подключение декодера/мультиплексора 74HC238 к плате Ардуино. Микросхема может обеспечить логическую единицу только на одном из восьми выходов, в зависимости какие уровни установлены на адресных контактах А0, А1 и А2.

Таблица истинности для микросхемы 74HC238 (L – низкий уровень (0), H – высокий уровень (1), X – любое состояние):

Таблица истинности для микросхемы 74HC238

Контакты активации выходов E1, E2 и E3 – контакты, которые позволяют включать или отключать выходы микросхемы.

Включение происходит когда на E1 и E2 установлен логический 0 (контакты подтянуты к земле), а на E3 – логическая единица 1 (подтянут к +5V).

Контакты А0, А1 и А2адресные контакты, которые определяют на какой из выходов будет подана логическая единица.

Таким образом получается, если E1 и E2LOW (0), E3HIGH (1), а A0, A1 и A2LOW (000) – то будет включен выход Y0 (4-я строка таблицы).

Подобно тому, если A0HIGH (высокий), A1LOW (низкий), а A2HIGH (высокий), это равняется значению 101, которое в десятичном формате равно 5. В результате когда на адресных контактах установлено 101, будет включен выход Y5.

Наши устройства вывода будут светодиоды. Поскольку на микросхеме 74HC238 имеется 8 выходов (Y0…Y7), мы подсоединим к ней 8 светодиодов.

Один выход будет иметь светодиод вместе с резистором для ограничения избыточного тока. E1 и E2 подтянем физически к GND (на этих контактах всегда будет низкий уровень). Вход E3 подключим к ардуино, чтобы иметь возможность отключать все светодиоды. В программе будем переключать выходы от Y0 до Y7 и обратно.

74hc238 и arduino proteus

И, собственно, сам скетч:

/* Еще одни бегущие огни */
const long int _delay = 100;           // Задержка между сменной светодиодов
const uint8_t pins_A[3] = {2,3,4};    // Адресные контакты
const uint8_t pins_E[1] = {5};        // Контакт для вкл/выкл

void setup() {
  /* Настроим выхода */
  for(uint8_t k = 0; k < 3; k++) {
    pinMode(pins_A[k], OUTPUT);
  }
  pinMode(pins_E[0], OUTPUT);

}

void loop() {
  /* Установим высокий уровень на E3 */
  digitalWrite(pins_E[0], HIGH);
  /* Переберем поочередно числа от 0 до 7 */
  for(uint8_t n = 0; n < 8; n++) {  
    setLed(n);  // Установить число n на адресных контактах
    delay(_delay);
  }
  /* Обратный порядок */
  for(uint8_t n = 0; n < 8; n++) {  
    setLed(7 - n);  // Установить число n на адресных контактах
    delay(_delay);
  }
}

/* Выставляет необходимые уровни на выводах А0, А1 и А2 согласно переданному числу */
void setLed(uint8_t num) {
    for(uint8_t i = 0; i < 3; i++) {  // Выставим число в двоичной системе на выводах А0, А1 и А2
      uint8_t val = bitRead(num, i);  // Считаем i-ый бит
      digitalWrite(pins_A[i], val);   // Установим на выводе А[i]
    }
}

void OFF() {
  digitalWrite(pins_E[0], LOW);
}

void ON() {
  digitalWrite(pins_E[0], HIGH);
}

Даташит на 74HC238

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии