8-900-374-94-44
[email protected]
Slide Image
Меню

Расширение портов ардуино: Увеличение портов ввода-вывода на Arduino (PCF8574) – RobotChip

Содержание

Arduino Nano и 74HC595 — расширяем порты вывода: trampampamparam — LiveJournal

Как я уже рассказывал, я заказал три более или менее не пересекающихся набора датчиков для Ардуино. В обоих комплектах ко мне приехала микросхема 74HC595, которая так и осталась лежать в боксе до поры до времени. До поры до времени я даже не знал, что это за микросхема, и как вообще этот черный тараканчик промаркирован.

Но настали черные дни, когда мне перестало хватать выходных сигналов Arduino Nano, когда я занимался созданием устройства для тестирования шаговых двигателей. (TODO: вставить ссылку на статью о тестере ШД, когда будет готова). Моё устройство для тестирования ШД в результате вышло довольно комплексным — двухстрочный дисплей 1602 с системой меню, управляемое полнофункциональной клавиатурой 4×4, 3 цифровых разряда для установки величины микрошага ШД, сигналы Step и Dir для шагового двигателя, и тп. Казалось бы, самое время мигрировать на другую версию Arduino. Но моя природная лень воспротивилась этой миграции. И ленивая голова стала искать решение.

Было принято решение искать решение на базе уже того, что есть. Перебирая платки и детальки из наборов, я заметил 16ти-пинового черного «жука». Сначала в одном наборе, потом в другом. Решил поинтересоваться, что же это за деталь, и зачем её добавляют в наборы. Зачем её кладут в кит-наборы, я не понял, но саму микросхему нашел на сайте NXP.

Оказалось, что это довольно интересная микросхема — сдвиговый регистр с последовательным входом и параллельным выходом.

Условное обозначение микросхемы 74НС595 (из даташита)

Описание выводов


КонтактНаименованиеОписание и подключение
10~MRMaster Reset — сброс, активный уровень низкий. В идеальном случае неплохо бы сделать схему сброса, которая сначала подает низкий уровень на этот вход, а затем переводит его в единичное состояние. Но можно не возиться, и подключить его на +5В. В этом случае на выходе до первой записи будут случайные значения
13~OEOutput Enable — разрешение выхода, активный уровень низкий. При подаче 0 на выходы подается содержимое регистра, при подаче 1 — выходы отключаются, переводятся в Z-состояние, что позволяет использовать одну шину попеременно разным устройствам. Подключаем на землю, если не нужно управлять состоянием выходов
14DSSerial Data In
— последовательный вход. На этот вход следует подавать значение входного сигнала до подачи тактового сигнала сдвига SHCP
11SHCPShift Register Input clock — тактовый вход сдвигового регистра. Для вдвигания бита в регистр следует подать переход с 0 на 1. Когда возвращать в 0 — на усмотрение. Можно — сразу же, можно — непосредственно перед вдвиганием. В первом случае можно считать, что переключение происходит по фронту прямого сигнала, во втором — по спаду инверсного. См. также ниже замечания по быстродействию. Также по приходу этого сигнала изменяется значение последовательного выхода Q7/S
12STCPStorage Register Clock Input — тактовый вход регистра защелки. По фронту данного импульса происходит перенос значения со сдвигового регистра на параллельные выходы Q0-Q7
9Q7SSerial Data Output — последовательный выход. На него выводится значение старшего разряда сдвигового регистра. Данный выход может использоваться для масштабирования сдвигового регистра до 16ти-разрядной, 24х-разрядной и т.д. схемы
15, 1-7Q0, Q1-7Выходы регистра-защелки. Сигнал на них переносится с внутреннего сдвигового регистра по приходу сигнала STCP
8GNDПитание — общий провод
16VCCПитание — +

Питание


HC версия микросхемы требует от 2В до 6В питания, версия HCT (TTL-совместимая) — от 4.5В до 5.5В. HCT — TTL — а оно вообще еще используется? Ардуино же вроде само по себе CMOS, так что HCT не нужно, но если нужно согласовывать уровни с внешними TTL потребителями, то можно запитать HC от 3. 3В, тогда уровни сигналов будут совместимы с TTL. А вообще, с 5ти-вольтовым Ардуино должны работать и HC, и HCT. В интернетах так пишут.

Что более важно, так это блокировочные конденсаторы. Без них схема может работать не так, как задумано, и более того, непредсказуемо. Теоретически, в цепи питания каждого корпуса нужно ставить 0.1мкФ конденсатор. Это значение ёмкости я вычислил как среднее по интернету. Моя схема вполне заработала и без него. Чтобы уточнить, залез было в библию схемотехника, чтобы уточнить — Хилл и Хоровиц, «Искусство схемотехники» — это почти как «Искусство Программирования» Дональда Кнутта, но только для железячников (к слову, Хилл и Хоровиц гораздо ближе к народу, Кнутт через-чур умничает) — но там блокировочными конденсаторами похоже называют развязывающие по входам конденсаторы. Жаль, хорошая книга, но очень отстала уже от жизни. У меня второе или третье русское издание конца 90ых или начала 0ых годов, оригинал скорее всего ещё лет на 10 старше. На третьем, розовом томе, обнаружил наклейку — «14руб» — как же дешево тогда всё было, по современным меркам. А прошло-то всего 15 лет или чуть больше. Аж ностальгия замучала.

Быстродействие


В титле даташита 74HC595 пишут, что она работает на 100МГц. Беглый взгляд на графики и таблицы даташита говорит, что самые большие тайминги в диапазоне температур от -40C до +85C при питании 4.5В — 10-20нс (100-50МГц). С теми частотами, на которых работают Ардуино, ничего больше знать не требуется. Возможно, только то, что стандартные библиотечные digitalRead/digitalWrite — огромнейшие тормоза из-за различных проверок, и их можно (и нужно) переписать в виде более быстрой версии. В планах есть поковырять это и написать поподробнее, но пока у меня нет особой нужды.

Быстродействие Arduino Nano и библиотеки Arduino в плане скорости переключения выходов и обработки входов по моим наблюдениям где-то посередине от единиц килогерц до десятков килогерц. Так что, на мой взгляд, при написании кода для управления сдвиговым регистром 74HC595 нет нужды озадачиваться какими-либо задержками при установке управляющих сигналов.

Другое дело, что для 8ми разрядного последовательного расширителя следует делить максимальную доступную на Ардуино частоту переключения выходов — установили DS, установили SHCP в 1, сбросили SHCP (в 0) — 8 раз, и установка/сброс STCP. Итого, на вскидку, 3*8 + 2 = 26 операций digitalWrite. Итого выходит примерно в 25 раз медленнее, чем может сама Ардуинка.

При масштабировании до 16ти, 24х или 32х выходов замедление будет соответственно примерно 3*16 + 2 = 50, 3*24 + 2 = 74 и 3*32 + 2 = 98 раз.

Для управления чем-то действительно быстрым, очевидно, такой расширитель на сдвиговом регистре 74HC595 не подходит, но, в некоторых применениях, для задания редко меняющихся статичных сигналов вполне подходит. Так, например, я использовал такой расширитель для задания 3х-разрядного режима микрошага для установки режима микрошага для драйвера ШД DRV8825 в тестере для шаговых двигателей. К слову, мне это пока не особо пригодилось — шаговики из матричных принтеров ужасно работают в микрошаговом режиме, по крайней мере, под управлением драйвера DRV8825 — так, например, в режиме микрошага 1/2 половина шага какая-то вялая и не уверенная, только вторая половина бодрая и мощная. Поэтому при использовании микрошага при малейшем усилии на ось ШД он первые пол-шаги начинал пропускать. Остальные режимы микрошага я как-то после этого и не исследовал на имеющихся принтерных ШД.

Масштабирование


Расширитель выходов Ардуино на базе 74HC595 достаточно элементарно из 8ми-разрядной версии может быть переделан в схему любой разрядности. Для этого последовательный выход младшего регистра Q7S нужно соединить со входом DS более старшего, а линии SHCP и STCP соединить параллельно. Ну, и, в зависимости от принятого схемотехнического и программного решения, нужно выбрать, как подключать линии ~MR и ~OE.

Расширение ввода


Расширение линий ввода для Ардуино в принципе похоже на расширение вывода, с учетом того, что нужно не задавать значение DS на выходе, а считывать его на входе, и использовать микросхему типа 74HC597. Впрочем, это я пока на практике не проверял.

Мультиплексирование


Увеличить количество выходных линий, которыми управляет Ардуина, можно двумя способами: 1) увеличить разрядность одного последовательного выхода, что при увеличении разрядности в два, три или четыре раза соответственно уменьшает в два, три или четыре раза быстродействие расширителя; 2) параллельным подключением нескольких расширителей, при этом задействуя один дополнительный выход на каждый расширитель, что может сохранить быстродействие на приемлемом уровне, но требует использования как минимум одного выхода Ардуино для каждого расширителя.

Если не управлять прямо сигналами регистра 74HC595 — ~MR, ~OE с Ардуино, то достаточно только трех выходов Ардуино для управления сигналами DS, SHCP и STCP сдвигового регистра, чтобы при помощи микросхемы 74HC595 превратить их в 8 или 16 или больше выходных сигналов.

Для мультиплексирования нескольких расширителей на базе 74HC595 можно пойти двумя путями: 1) для каждого расширителя сигнала выделить отдельный latch сигнал — т.е. все регистры на шине параллельно сдвигают поступающие данные, и, соответственно, сдвигают значения на выходах внутреннего сдвигового регистра, но только один передает значение из внутреннего сдвигового регистра на выходы микросхемы; 2) сигналы сдвига передаются только на один из расширителей, а перенос значений сигналов на выход происходит одновременно для всех модулей расширения.

Я больше склонен использовать вариант, когда во внутренних сдвиговых регистрах может находится всё, что угодно (вариант 1), а на выходе зафиксировано какое-то из предыдущих значений, и вот почему: при переносе значений из внутреннего сдвигового регистра на выход могут происходить неконтролируемые переходы из 0 в 1 и обратно, какой-то дребезг сигнала, даже если исходное значение во внутреннем регистре и на выходе одно и то же. И, на мой взгляд, операцию переноса состояния внутреннего регистра сдвига на выходы 74HC595 следует использовать как можно реже.

Программная поддержка


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

Увеличение количества входов/выходов микроконтроллеров ESP8266/ESP32/Arduino

У Arduino количество входов в старших версиях (Arduino Mega) значительное, однако само устройство все-же больше заточено под прототипирование и выпуск IoT устройств в небольших количествах. Быстро и недорого заткнуть брешь. Этот вариант пригоден далеко не для всех задач, особенно когда нужно развертывать сотни IoT устройств.

На Arduino довольно удобно разрабатывать. Есть Aruino IDE, несложный вариант C++, поддержка в среде Visual Studio Code/Visual Studio 2017. Накоплена огромная экспертиза, множество штатных библиотек, закрывающих многие задачи, масса форумов, статей и т.п. Однако, к сожалению, если нужно сделать удаленное обновление прошивки, нормального штатного решения для Arduino мне найти не удалось. Нестандартные bootloader разрабатывались давно, обновлений кода нет и насколько стабильно работают, непонятно.

Микроконтроллеры ESP8266 и старший собрат ESP32 — это промышленные микроконтроллеры, отлично документированные с штатной поддержкой обновления программного обеспечения по TCP/IP.

Если разрабатывается решение для промышленной автоматизации, то рекомендую использовать чипы ESP. Будет хороший задел на будущее в части дальнейшего развития. Учитывая то, что код под ESP можно создавать на С++ в среде Arduino IDE/Visual Studio Code/2017, а многие библиотеки совместимы между Arduino и ESP, в случае необходимости можно перейти с ESP на Arduino. Естественно, с потерей функционала Wi-Fi, который встроен в ESP, а в Arduino требуется дополнительный shield. Например, тот-же самый ESP8266. 🙂

В чипах ESP уже встроена поддержка Wi-Fi и Bluetooth (ESP32), есть режимы пониженного энергопотребления, что упрощает разработку устройств работающих от аккумулятора.

Электропитание ESP8266/ESP32

Для автономного электропитания рекомендую используется емкий Li-Ion аккумулятор 18650. На Aliexpress можно найти варианты аккумулятора на 9900 mAh. Скорее всего китайцы лукавят, ставя эту цифру, но батарея действительно емкая.

К ней несложно найти недорогой battery shield для питания устройств на этих микроконтроллерах. Есть и недорогие пассивные battery case для случая, когда управление Li-Ion аккумулятором реализованно на отдельном shield. Например, для платы Wemos D1 mini есть такой вариант shield.

ESP8266 vs ESP32

Вкратце сравню ESP8266 с ESP32.

 

ESP8266

ESP32

MCU

Xtensa Single-core 32-bit L106

Xtensa Dual-Core 32-bit LX6 with 600 DMIPS

802. 11 b/g/n Wi-Fi

HT20

HT40

Bluetooth

X

Bluetooth 4.2 and BLE

Typical Frequency

80 MHz

160 MHz

SRAM

X

Flash

X

GPIO

17

36

Hardware /Software PWM

None / 8 channels

None / 16 channels

SPI/I2C/I2S/UART

2/1/2/2

4/2/2/2

ADC

10-bit

12-bit

CAN

X

Ethernet MAC Interface

X

Touch Sensor

X

Temperature Sensor

X

Hall effect sensor

X

Working Temperature

-40ºC to 125ºC

-40ºC to 125ºC

Price

$ (3$ — $6)

$$ ($6 — $12)

Where to buy

ESP8266 Wi-Fi Development Boards

ESP32 Wi-Fi Development Boards

Использовать GPIO входы/выходы на этих чипах можно по-разному.

Функциональное назначение выводов чипа ESP8266.

При приобретении ESP32 devkit на Aliexpress нужно обращать внимание на количество PIN-ов. Наиболее распространенный вариант — 30 PIN-овый, такой-же как ESP8266. Он стоит в районе 5 USD. Есть вариант на 36 PIN и 38 PIN. На 38 PIN стоит в районе 8 USD. Отличить легко, PIN-ы опускаюся до нижнего края кнопок.

Здесь уже нужно смотреть, что нужно от платы, поскольку може оказаться выгоднее приобрести расширение на 16 GPIO за 1,5 USD, чем переплачивать за PIN-ы на devkit.

Функциональное назначение выводов чипа ESP32 с 36 PIN-ами

В ESP32 встроен ряд датчиков, которые можно использовать при разработке простых решений. Например, можно периодически опрашивать датчик температуры для мониторинга состояния «здоровья» самого чипа, чтобы не допускать его перегрева.

У ESP32 можно использовать 10 входов в качестве емкостных (TOUCH). Присоединенный к ним провод будет изменять емкость при поднесении руки. Например, можно реализовать вечные емкостные кнопки, которые могут быть реализованы на печатной плате, без использования механических компонент.

Увеличение количества аналоговых входов/выходов

Аналого-цифровой преобразователь АЦП (ADC)

В ESP8266 только один АЦП (ADC), в то время как в ESP32 доступно 18!!! АЦП, причем 12 битных, в отличие от 10-ти битного АЦП ESP8266. Напряжение срабатывания АЦП в ESP32 можно менять от 0 до 4 V.

I2C адресация модуля ADS1115

16-ти битные внешние модули АЦП с чипом ADS1115 4-х канальные и стоят с доставкой в Россию в районе 1,5 USD. Примерно столько же стоит 12-ти разрядный ADS1015. Datasheet здесь.

Чтобы в ESP8266 получить такое-же количество каналов АЦП, как у ESP32 потребуется 4 шт. внешних АЦП и цена только этих модулей получится в районе 6 USD. Сам чип ESP32 распаянный на плате можно приобрести примерно за 7 USD с доставкой в Россию. Схема подключения здесь.

Если есть сомнения по поводу входного напряжения, то целесообразно использовать внешний АЦП, поскольку выход из строя платы на 4 канала обойдется несколько дешевле, чем потеря микроконтроллера. Либо подстраховываться установкой стабилитрона.

  • 4-х канальный 18-ти разрядный АЦП MCP3424 обойдется примерно в 5 USD. Младший одноканальный брат MCP3421 примерно в 2,5 USD.
  • 2-х канальный 24-х разрядный АЦП ADS1232 обойдется примерно в 4 USD. Есть 4-х канальный вариант ADS1234, но платы с этим чипом отсутствуют на Aliexpress. Доступен только сам чип.
  • 24-битный АЦП ADS 1256 будет уже 8-ми канальным, небольшая экономия, но при этом цена в районе 15 USD за качество оцифровки.
  • 24-х битный АЦП для цифровых весов HX711 обойдется меньше, чем в 2 USD.
  • 3-х канальный 24-х битный АЦП AD7793 обойдется примерно в 7 USD. Datasheet здесь.

Помимо АЦП в ESP32 есть два 8-ми битных ЦАП (DAC).

Мультиплексор/демультиплексор аналоговых входов

Помимо увеличения аналоговых входов с помощью АЦП есть вариант расширения мультиплексором. Хорошая статья на эту тему в которой подробно рассмотрен аналоговый мультиплексор/демультиплексор CD4051/74HC4051. Много вариантов от других производителей.

CD4051 — это 8 канальный аналоговый CMOS мультиплексор/демультиплексор. ДЛя увеличения количества аналоговых входов на 7 потребуется 1 аналоговый и 3 цифровых входа.

Функциональная схема работы мультиплексора/демультиплексора CD4051

Мультиплексор передает сигнал с одного из нескольких входов на единственный выход. Демультиплексор, напротив, передает сигнал с единственного входа на один из информационных выходов.

Если приобретать модуль на Aliexpress, то цена будет в районе 0,8 USD за 8 каналов, 16-ти разрядное АЦП ADS1115 — 1,5 USD за 4 канала. Если же приобретать только микросхему CD4051, то цена будет гораздо ниже микросхемы АЦП.

Увеличение количества цифровых GPIO входов/выходов

Плата увеличения количества GPIO портов.

Для увеличения количества цифровых входов можно воспользоваться добротной платой расширителя GPIO на 8 Входов/Выходов. Она хорошо документирована, исполнена на высоком техническом уровне. Хотя, ценник не Aliexpress-а. 🙂 При изготовлении нескольких сотен устройств, себестоимость конечного устройства существенно вырастет.

Посмотрим, что есть на сей счет есть у китайских собратьев. А у них конечно-же что-то есть и недорого. 🙂


8-канальный расширитель GPIO на чипе PCF8574 с DIP переключателями для назначения I2C адреса8-канальный расширитель GPIO на чипе PCF8574 с джамперами для назначения I2C адреса. Эту плату можно каскадировать.

Сразу отмечу качественное исполнение модулей по цене в районе 1 USD. Чип от TI PCF8574 обеспечивает 8 каналов ввода-вывода (GPIO) управляемых по шине I2C. Есть выход INT соединяемый с входом микроконтроллера поддерживающим обработку прерываний. При возникновении прерывания на одном из входов платы расширения, прерывание транслируется микроконтроллеру для дальнейшей приоритетной обработки поступившего сигнала.

Конструктивно синие модули удобно каскадировать, втыкая один в другой. Адрес устройств удобно задается либо DIP переключателями, либо джамперами. Возможно подключение внутренних pullup резисторов на +5V.


16-ти канальный расширитель GPIO на чипе PCF8575

Старший брат TI PCF8575 позволяет получить 16 GPIO портов за цену в два раза выше. Но реализация платы попроще. никаких DIP переключателей для выбора адреса I2C. Зато 16 каналов в компактном исполнении.

Аналогичный чип от компании Microchip на 16 входов для расширения количества GPIO портов, MCP23017. Есть вариант для шины I2C и более шустрый для SPI (MCP23S17). Китайские продавцы нередко указывают в описании товара чип MCP23S17, однако по фото платы видно, что чип MCP23017. Обращайте на это внимание! Аналогичный чип на 8 портов — MCP23008.

MCP23017 плата увеличения GPIO для микроконтроллеров

Цена этого варианта модуля в районе 1,5 USD. Исполнение платы попроще обойдется почти в два раза дешевле. Чип позволяет обеспечить увеличение GPIO на 8+8=16. Как и чип от Texas Instruments помимо входов для подключения устройств есть два выхода прерываний на каждый блок из 8 устройств. Этот чип позволяет работать на частоте до 1,7 МГц и 10 MHz для версии под шину SPI, в отличие от чипа PCF8574 для которого верхний предел 400 кГц. Также возможно подключение внутренних pullup резисторов на +5V. Схема подключения платы к ESP8266 разобрано здесь.

SX1509 модуль для увеличения количества GPIO.

Ещё один 8+8=16-ти канальный расширитель количества GPIO с Aliexpress на чипе SX1509. Библиотека и описание от Sparkfun. Чип дороже, чем ранее представленные. По ТТХ чип очень похож на ранее рассмотренные варианты. Работает на частоте 400 кГц. Есть встроенная поддержка ШИМ (PWM) на выходах.

Чип «заточен» для работы с LED и клавиатурой. В части LED из-за наличия ШИМ позволяет управлять яркостью светодидов, выполнять затухание, моргание и пр. Есть в наличии выход INT для трансляции прерываний микроконтроллеру. Поддерживаются встроенные pull-up, pull-down резисторы на входах.

GPIO expander от Fairchild (ON Semiconductor) FXL6408UMX. Аналогично 8 портов управляемых по шине I2C. Datasheet.

Выходы управления реле

Для управления силовой частью, например, реле, хорошо бы иметь сборку транзисторов Дарлингтона, вроде недорогого ULN2003, но управляюмую по цифровым шинам.

MAX4820/4821 — транзисторые сборки управляемые по SPI/параллельному интерфейсу 8 выходов. Коммутируют максимум 5 V нагрузку.

TPIC2603 — управляемая по последовательному интерфейсу SDI сборка на 6 каналов.

TPIC2802 — управление по последовательному интерфейсу 8 каналами с током по 1А на канал.

MC33996 — управляемый по шине SPI коммутатор 16 выходов.

RTC

Подключение внешнего кварцевого резонатора к ESP32

По одним статьям RTC в ESP32 — это не Real Time Clock, а ядро низкого энергопотребления. Однако, по другим все-же Real Time Clock, но плохого качества (+-5%), который не стоит использовать в бизнес-приложениях.

Возможно, проблема неточности встроенного RTC может быть решена добавлением внешнего кварцевого резонатора. Я нашел упоминание о схеме подключения карцевого резонатора к контактам RTC_GPIO8/RTC_GPIO9. Но непонятно как запитывать встроенный RTC от батарейки. Отдельного входа RTC VBAT нет.

В общем, не факт, что удастся сэкономить на входе. 🙁 Особенно, если нужен data logger, а не только RTC. В data logger RTC уже встроен и SPI выводы на чтение/запись придется отдать :-(. Хотя в data logger RTC нередко подключается на шину I2C.

Подключение датчиков 4..20 мА

рассмотрено в статье.

Подключение I2C датчиков

В теории к одной шине I2C можно подключить до 127 устройств. У каждого из устройств должен быть свой уникальный адрес. Нередко адрес устройства один и жестко «прошит», поэтому нельзя подключить на одну шину несколько таких модулей. Входов I2C в ESP всего 1 (2 у ESP32) шт.

Для подключения I2C устройств с совпадающими адресами используются I2C мультиплексоры. На Aliexpress из недорогих доступен I2C extender на чипе TCA9548A. Цена в районе 1 USD с доставкой в Россию.

8-канальный I2C мультиплексор на чипе TCA9548A

Мультиплексор работает просто. По умолчанию ему присвоен некоторый адрес. Микроконтроллер соединяется с ним по шине I2C и затем отправляет команду выбора одного из 8-ми выходов, с которым будет происходить общение. Далее можно взаимодействовать с I2C устройством как будто с ним установлено прямое соединение. Если нужно периодически опрашивать все датчики подключенные к 8 входам, то такой опрос происходит в цикле.

Фактически, мультиплексор обеспечивает временную прямую коммутацию GPIO микроконтроллера с выбранным устройством по его номеру. Это некоторый недорогой workaround для решения проблем с конфликтом адресов I2C.

Интерфейс RS485

Модуль интерфейса RS485 для Arduino/ESP8266/ESP32

Подробный обзор досупных модулей реализующих RS485 интерфейс сделал в статье.

Подключение K-Type термопар

Модуль MAX6675 для подключения термопары K-Type к
микроконтроллеру по шине SPI

Подключение термопар к ESP32/ESP8266/Arduino с помощью модулей MAX6675 и MAX31855.

Увеличение количества UART (RX/TX) портов

Для некоторых задач есть необходимость увеличения количества последовательных портов. Для старших моделей Arduino, например, Mega, острой необходимости в увеличении последовательных портов нет, там их достаточно. Однако для ESP8266 задача вполне актуальна, учитывая что там только один hardware serial port, да и тот нередко занят под распаянный на плате USB ковертер. Можно эмулировать работу последовательного порта на GPIO с помощью SoftSerial, но не для всех задач это приемлемо.

Расширение одного последовательного порта UART (RX/TX) на
8-мь дополнительных последовательных портов

Решение от компании AtlasScientific — 8:1 Serial Port Expander самое дорогое. Цена в районе 15$ без доставки довольно высока, хотя если сравнивать с одно и двух портовыми модулями, то цена за порт меньше 2 $, что выгоднее чем у 1-2-х портовых собратьев.


SC16IS760 модуль для конвертации I2C / SPI на один UART порт

Есть конвертеры I2C в один порт UART и 8 GPIO портов на чипе SC16IS750. Стоят порядка 4 $ с оставкой в Россию. SPI вариант на чипе
SC16IS760. Учитывая, что на одну шину можно вешать несколько модулей — можно набрать нужное количество. SPI порт достаточно шустрый, чтобы обеспечить подключение достаточно большого количества таких модулей.

SC16IS762 модуль для конвертации I2C / SPI на два UART порта

Есть старший собрат ковертера I2C в два порта UART и 8 GPIO портов на чипе SC16IS752. Стоят порядка 5 $. SPI вариант на чипе SC16IS762.

Плат на чипах MAX14830, MAX3107, MAX3108, MAX3109 я на Aliexpress не нашел.

Схемное решение для получения 4-х портов UART.

Заключение

На этом краткий обзор по вариантам расширения входов микроконтроллеров завершаю. В дальнейшем рассмотрю работу с указанными модулями подробнее.

Spread the love

Запись опубликована в рубрике IT рецепты, IT решения для бизнеса с метками Aliexpress, IoT. Добавьте в закладки постоянную ссылку.

Док-станция для Arduino 2 | Документация Onion Omega2

Arduino Dock 2 — это наша версия платы Arduino Uno R3 с наддувом. Эти две платы используют один и тот же микроконтроллер ATmel ATmega328P (MCU) и имеют одинаковое расположение контактов. Это позволяет вам использовать любые шилды Arduino, которые вы использовали с Arduino Uno R3, с док-станцией Arduino и Omega.

Omega может программировать микроконтроллер при подключении к плате. Это означает, что вы можете подключиться к Omega по беспроводной сети, а затем запрограммировать MCU для беспроводной работы с Arduino!

Аппаратное обеспечение

Док-станция Arduino включает разъем для внутрисхемного последовательного программирования (ICSP) для размыкания выводов SPI, которые можно использовать для программирования микроконтроллера док-станции Arduino с помощью внешнего программатора. Кроме того, к Omega подключен хост-порт USB, который можно использовать для любых приложений типа USB.

Для питания док-станции можно использовать соединение microUSB или разъем DC Barrel.

Подключение Omega

Чтобы подключить Omega к док-станции Arduino, совместите края Omega с фиолетовыми линиями на док-станции Arduino, как показано ниже:

Убедитесь, что Omega полностью вставлена ​​вниз, как показано на рисунке ниже:

Возможно, вам придется совместить штифты с отверстиями, прежде чем вставлять Omega в док-станцию.

Порт MicroUSB

Порт MicroUSB используется для подачи питания на док-станцию ​​Arduino, которая, в свою очередь, подает питание на Omega и микросхему ATmega328P.

Порт MicroUSB получает питание 5 В и использует его непосредственно для питания микросхемы ATmega328P. Док-станция оснащена регулятором напряжения, который снижает напряжение до требуемых для Omega 3,3 В.

Нет USB-to-Serial

На док-станции нет USB-to-Serial чипа. Это означает, что вы , а не , сможете последовательно подключаться к Omega через порт Micro-USB.

Вы по-прежнему можете подключиться к терминалу Omega с помощью SSH. Вы можете узнать, как это сделать, в этом руководстве по подключению к Omega.

Цилиндрический разъем постоянного тока

Цилиндрический разъем постоянного тока также можно использовать для питания Omega с помощью адаптера питания постоянного тока. Мы рекомендуем любой источник питания постоянного тока с напряжением 5 В и током не менее 0,5 А. Безопасно использовать блоки питания, обеспечивающие ток более 0,5 А при напряжении 5 В.

Обратите внимание, что цилиндрический разъем постоянного тока док-станции Arduino должен использоваться только с источниками питания постоянного тока 5 В. Если используется более высокое напряжение, ваш Omega и док-станция Arduino могут быть повреждены!

Кнопка сброса

Кнопка сброса на док-станции подключена напрямую к GPIO сброса Omega. Нажатие этой кнопки делает одно из двух: перезагрузка или восстановление заводских настроек.

Перезагрузка

Моментальное нажатие кнопки сброса и ее отпускание инициирует перезагрузку ОС Omega.

Восстановление заводских настроек

Нажатие и удержание кнопки сброса в течение 10 секунд, а затем отпускание вызовет восстановление заводских настроек.

Предупреждение: Это вернет вашу Omega к файловой системе по умолчанию последнего обновления прошивки, это удалит ВСЕ ваши данные!

Кнопка сброса микроконтроллера

В дополнение к кнопке сброса Omega, док-станция Arduino Dock 2 оснащена кнопкой сброса микроконтроллера. Эту кнопку можно использовать для сброса чипа ATmega в любое время. Это НЕ перезагрузит Omega.

USB-порт Omega

USB-порт Omega можно использовать для подключения ко всем типам устройств, а именно к USB-накопителю для увеличения объема памяти Omega. Порт USB поддерживает USB 2.0 и представляет собой разъем типа A.

Соединения микроконтроллеров Omega и ATmega

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

Поскольку микроконтроллер работает от 5 В, а Omega — от 3,3 В, док-станция Arduino оснащена преобразователем

3,3 В в 5 В логического уровня для всех соединений между микроконтроллером и Omega. Это позволяет каждому устройству работать при своем собственном напряжении, но при этом дает им возможность понимать друг друга.

В таблице ниже показаны соединения между Omega и микроконтроллером ATmega:

UART1 Последовательные контакты
I2C I2C
GPIO 15 СПИ ССК
GPIO 16 СПИ МОСИ
GPIO 17 СПИ МИСО
GPIO 19 Сброс

Назначение этих соединений описано в подразделах ниже.

Соединение UART

Соединение UART используется для обеспечения двусторонней связи между Omega и микроконтроллером ATmega. Последовательный порт ATmega подключен к последовательному порту Omega UART1 .

Дополнительные сведения см. в статье «Обмен данными с последовательными устройствами».

I2C

Соединение I2C обеспечивает соединение I2C между Omega и ATmega. В большинстве случаев Omega настраивается в качестве ведущего, а ATmega — в качестве ведомого.

Это полезно при использовании устройств 5V I2C. Подключите их к контактам I2C ATmega, и Omega сможет их прочитать благодаря встроенному переключателю логического уровня.

Дополнительные сведения см. в статье «Обмен данными с устройствами I2C».

Соединение SPI и сброс

Четыре соединения SPI используются для загрузки скетчей в ATmega с помощью Omega. Дополнительную информацию см. в статье «Прошивка микроконтроллера док-станции Arduino».

Соединение сброса используется для сброса чипа ATmega. Это можно сделать с помощью кнопки сброса или с помощью GPIO 19 Omega..

Механические чертежи

Мы предоставили подробную схему размеров и геометрии док-станции Arduino Dock 2.

Использование док-станции

Док-станция Arduino Dock 2 оснащена функциями, которые позволяют использовать Omega с ATmega. чип с легкостью. Вы можете запрограммировать или перезагрузить микроконтроллер, используя GPIO Omega, и даже подключиться к последовательному порту ATmega, используя UART Omega.

Программирование микроконтроллера Arduino

Следуйте инструкциям из раздела «Прошивка микроконтроллера», чтобы узнать, как загружать скетчи (программы) в микроконтроллер Arduino, встроенный в док-станцию ​​Arduino.

Связь через UART

Самый простой способ установить связь между микроконтроллером Arduino Dock и Omega — через последовательный порт. Нет никаких причудливых протоколов, просто данные пересылаются туда и обратно. Важно помнить, что последовательный порт ATmega подключен к UART1 на Omega.

Взгляните на нашу статью «Общение с последовательными устройствами», чтобы узнать, как заставить Omega обмениваться данными с микроконтроллером док-станции Arduino!

Связь с I2C

Док-станция Arduino 2 эффективно соединяет линии I2C микроконтроллера с линиями Omega, добавляя микроконтроллер в качестве ведомого к шине I2C Omega.

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

Расширение транзисторного выхода

— NORVI Industrial Arduino