цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Как увеличить количество цифровых выводов Arduino с помощью расширителя портов

Как увеличить количество цифровых выводов Arduino с помощью расширителя портов

Автор: Mike(admin) от 9-11-2017, 20:35

Тринадцать цифровых линий и шесть аналоговых входов – это все, что может предложить Arduino в качестве средств ввода/вывода. Но в некоторых случаях (особенно в проектах с большим количеством периферийных устройств) такого набора линий портов недостаточно.


MCP23017

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


Возможно, вы знаете, что 6 аналоговых контактов также могут использоваться как цифровые линии ввода/вывода таким образом:


Аналоговый вход 0 = линия 14
Аналоговый вход 1 = линия 15
Аналоговый вход 2 = линия 16
Аналоговый вход 3 = линия 17
Аналоговый вход 4 = линия 18
Аналоговый вход 5 = линия 19


То есть на самом деле мы можем ссылаться на аналоговый вход 5 как на цифровую линию следующим образом: digitalWrite(19,HIGH). Такая команда запишет логическую единицу в порт 19, то есть аналоговую линию 5.


Технически мы можем использовать линии последовательного порта TX/RX. Но в некоторых случаях это сделать крайне затруднительно, особенно когда в коде используются функции типа Serial.begin(), нужные для работы последовательного порта. Таким образом, общее количество контактов, доступных для пользователя, все же будет 17. Но разве можно с семнадцатью выводами управлять большим количеством светодиодов или сервомоторов? В этом случае лучше воспользоваться специальными внешними микросхемами. Зачастую в этих целях используют сдвиговый регистр вроде 74HC595. Но он требует три дополнительных линии для управления и не позволяет одновременно «расширить» все линии. Дисплейные драйверы, такие как MAX7219 тоже фактически «расширяют» количество контактов. Но MAX7219 является дорогостоящей микросхемой. Поэтому дешевле и рациональнее взять микросхему расширителя портов MCP23017. Эта микросхема рассчитана на 16 линий, имеет широкий диапазон рабочего напряжения от 1.8 до 5.5 В и управляется по интерфейсу I2C.


MCP23017 будет использовать 2 контакта Arduino и даст 16 линий ввода/вывода. Так что технически вы можете использовать 8 штук MCP23017 для расширения одного 16-контактного Arduino до 16 x 8 = 128 контактов. Arduino имеет библиотеку для шины I2C под названием Wire.h, поэтому взаимодействие с MCP23017 будет очень простым. Ниже приведена схема подключения Arduino и MCP23017.


схема подключения Arduino и MCP23017

Далее приведен код (скетч) для расширения портов Arduino с помощью MCP23017.



#include "Wire.h"
 
void setup()
{
 Wire.begin(); // активируем шину I2C
// устанавливаем линии на выход
 Wire.beginTransmission(0x20);
 Wire.write(0x00); // регистр IODIRA
 Wire.write(0x00); // устанавливаем все линии порта A на выход
 Wire.endTransmission();
}
 
void loop()
{
  Wire.beginTransmission(0x20);
  Wire.write(0x12);      // адресный банк A
  Wire.write((byte)0xAA);  // отправляемое значение - все линии в лог. 1
  Wire.endTransmission();
  delay(500);
  Wire.beginTransmission(0x20);
  Wire.write(0x12);      // адресный банк A
  Wire.write((byte)0x55);  // отправляемое значение - все линии в лог. 1
  Wire.endTransmission();
  delay(500);
}



© digitrode.ru


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

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