Управление микросхемой с arduino

pablosmith
Offline
Зарегистрирован: 23.11.2014

Всем здарвствуйте! Vучался несколько месяцев, но так и не понял как заставить работать видео мультиплексор, управляя им с arduino uno. Мультиплесор ad8184AR (даташит).

Микросхема имеет 4 видеовхода и 1 видеовыход. Переключение источников происхотит с помощью трех ног (A0, A1 и ENABLE).

Подключаю всё по такой схеме:

Код программы:

#include <Bounce.h> // подключаем библиотеку для борьбы с треском кнопок
#include <EEPROM.h> //подключаем заголовочный файл библиотеки EEPROM

uint8_t LastChannel; //Здесь будем хранить данные о последнем канале

// Bounce Key0 = Bounce(3, 40); //создаем экземпляр класса Bounce для кнопки сброса
Bounce Key1 = Bounce(2, 40); //создаем экземпляр класса Bounce для 3 вывода
Bounce Key2 = Bounce(3, 40); //создаем экземпляр класса Bounce для 4 вывода
Bounce Key3 = Bounce(4, 40); //создаем экземпляр класса Bounce для 5 вывода
Bounce Key4 = Bounce(5, 40); //создаем экземпляр класса Bounce для 6 вывода

// Комбинации байтов для включения нужных каналов
byte ChannelSwitch[5][3] = { 
  {1,0,0},  // Отключено
  {0,0,0},  // 1 канал
  {0,0,1},  // 2 канал
  {0,1,0},  // 3 канал
  {0,1,1},  // 4 канал
};

void setup()
{
  Serial.begin(9600);
  if (debug==0) Serial.println("Debug OFF");
  
  pinMode(6, OUTPUT);  // Enable Pin
  pinMode(7, OUTPUT); // A1 Pin
  pinMode(8, OUTPUT); // A0 Pin
  
  // Настройка входов для кнопок
  for (byte PinCount = 2; PinCount < 6; ++PinCount) {
    pinMode(PinCount, INPUT); //переключаем вывод в режим входа
    digitalWrite(PinCount, 1);  //включаем на нем подтягивающий резистор
  }
  
  LastChannel = EEPROM.read(0);; //Читаем последний канал из EEPROM
  
  ChangeChannel(LastChannel); // При включении выбираем последний канал

}

// Функция включающая нужный канал
void ChangeChannel(byte Channel) {
  int Pin = 0;
  for (byte PinCount = 0; PinCount < 3; ++PinCount) {
    int PinValue = 0;
    if (ChannelSwitch[Channel][PinCount]==1) PinValue = 255;
    else PinValue = 0;
    analogWrite(Pin, PinValue);
    ++Pin;
  }
  
  EEPROM.write(0, Channel); // Запись нового значения в EEPROM

}

void loop() {
  
  if (Key1.update()) {
    if (Key1.read()!=0) { //если кнопка нажата
      ChangeChannel(1);
      Key1.rebounce(1000);//повторить событие через 500мс
    }
  }
  
  if (Key2.update()) {
    if (Key2.read()!=0) { //если кнопка нажата
      ChangeChannel(2);
      Key2.rebounce(1000);//повторить событие через 500мс
    }
  }
  
  if (Key3.update()) {
    if (Key3.read()!=0) { //если кнопка нажата
      ChangeChannel(3);
      Key3.rebounce(1000);//повторить событие через 500мс
    }
  }
  
  if (Key4.update()) {
    if (Key4.read()!=0) { //если кнопка нажата
      ChangeChannel(4);
      Key4.rebounce(1000);//повторить событие через 500мс
    }
  }
  
}

Подскажите пожалуйста как правильно подать на A0, A1 и ENABLE логические единицу или ноль? чтобы схема заработала? Буду очень благодарен!

faraddin
Offline
Зарегистрирован: 11.08.2013

Начните с простого. Подключите все к цифровым выходам, и напишите просто скетч, устанавливающий нужный Вам канал. Вот как с этим разберетесь так и усложняйте до кнопок