Arduino spi несколько устройств: Подключение нескольких устройств по SPI Arduino

Содержание

Интерфейс SPI в Arduino — Вольтик.ру

Для эффективного, но простого обмена данными между микроконтроллером и периферийными устройствами разработана шина SPI. Она была разработана инженерами компании Motorola и прекрасно зарекомендовала себя в работе с Arduino.

Шина представляет собой периферийный последовательный интерфейс, предназначенный для работы с одним ведущим и несколькими ведомыми устройствами.

Для обмена информацией SPI использует четыре линии:

  • тактовый сигнал от ведущего устройства Serial Clock (сокращенно SCK, SCLK или CLK), подключаемый к 13-му пину Arduino;
  • линия выбора ведомого Slave Select, подключаемая к 10-му пину Arduino. Используются следующие сокращения и обозначения: SS, STE, CS, CSN, nCS, nSS. CSB;
  • передача данных от ведомого устройства к ведущему устройству MISO, подключаемая к 12-му пину. Используемые сокращения – SO, SDO и DO;
  • линия данных от ведущего устройства к ведомому MOSI, подключаемая к 11-му пину Arduino, имеющая обозначения SI, SDI, DI.

Линия SS у каждого подключаемого устройства традиционно своя, но при необходимости  существует возможность подключения ведомых каскадом к одной Slave Select.

Шина SPI способна передавать информацию сразу в двух направлениях, стандартная скорость обмена данными от 1 до 50 МГц. Встретить это изделие инженеров Motorola можно в профессиональных и бытовых электронных устройствах от датчиков разного назначения до радиомодулей.

 

Такое широкое распространение SPI получила в силу своего элементарного и надежного устройства, простому алгоритму передачи данных.

Последовательность действий при работе шины следующая:

  1. На линии SS ведущим устройством задается низкий уровень.
  2. Изменяемый тактовый сигнал задается ведущим устройством по линии Serial Clock, при этом каждое изменение выставляет требуемый уровень на линии MOSI, передавая с каждым тактом по одному биту ведомому устройству.
  3. Ведомое устройство передает бит информации за такт по линии SCLK, выставляя необходимые уровень по линии MISO.

Завершается передача информации установкой на линии SS максимального уровня.

В зависимости от фазы синхронизации (CPHA) и тактового сигнала (CPOL) шина последовательного интерфейса может работать в четырех режимах обмена информацией.

Высокий уровень на тактовой лини в начале и при завершении передачи – 1, а низкий уровень – 0. Соответственно режимы имеют следующую конфигурацию:

  1. фаза синхронизации = 1, тактовый сигнал = 0, считывание бита идет на спаде от 1 к 0, а запись при переходе от 0 к 1.
  2. фаза синхронизации = 0, тактовый сигнал = 0, считывание бита идет при переходе от 0 к 1 на фронте CPOL, а запись при переходе от 1 к 0.
  3. фаза синхронизации = 0, тактовый сигнал = 1, считывание бита идет на спаде от 1 к 0, а запись при переходе от 0 к 1.
  4. фаза синхронизации = 1, тактовый сигнал = 1, считывание бита идет при переходе от 0 к 1 на фронте CPOL, а запись при переходе от 1 к 0.

По умолчанию, данные для Arduino передаются старшим битом вперед, но могут и наоборот – передаваться вперед и младшим битом . Эта специфика отражается в документации микроконтроллера.

Библиотека SPI характеризуется небольшим количеством используемых функций. Она использует для работы с Arduino возможности AVR и делает это в режиме ведущего устройства.

К основным функция библиотеки относятся:

  • begin()инициализация работы с шиной;
  • end()завершение работы с шиной;
  • setBitOrder(order) – определение порядка отправки битов информации, MSBFIRST – все начинается со старшего бита, LSBFIRST – старт с младшего бита;
  • setClockDivider(divider) – установка делителя тактов в зависимости от основной частоты;
  • setDataMode(mode) – определения одного из четырех режимов работы шины;
  • transfer(value) – функция двусторонней передачи данных.

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

Управление несколькими периферийными устройствами по линиям шин SPI/I2C — Компоненты и технологии

Введение

Хотя сигналы реального мира всегда будут аналоговыми, сегодня все в большем количестве аналоговых ИС коммуникация осуществляется через цифровые интерфейсы. Последовательные интерфейсы обеспечивают связь между ведущим устройством, предоставляющим последовательный тактовый сигнал, и ведомым или периферийным устройством. Порты SPI (трехпроводной) и I2C (двухпроводной), имеющиеся сегодня в большинстве микроконтроллеров, представляют собой популярные средства приема и передачи данных. Таким образом, микроконтроллеры ведут обмен данными по нескольким линиям шины для управления периферийными устройствами, такими как аналого–цифровые преобразователи (АЦП), цифро–аналоговые преобразователи (АЦП), батареи со встроенной логикой, расширители портов, ЭСППЗУ и датчики температуры.

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

Основные сведения о последовательных интерфейсах

Последовательные интерфейсы выпускаются в трех разновидностях: трехпроводной, двухпроводной и однопроводной. Данная статья посвящена трех– и двухпроводным интерфейсам. В стандартах SPI, QSPI и MICROWIRE (или MICROWIRE PLUS) обмен данными осуществляется по трехпроводным интерфейсам. В стандартах I

2C и SMBus обмен данными осуществляется по двухпроводным интерфейсам. Обоим типам последовательных интерфейсов свойственны как преимущества, так и недостатки (табл. 1).

Таблица 1. Преимущества и недостатки трех и двухпроводных интерфейсов

Интерфейс Преимущества Недостатки
Трехпроводной: SPI, QSPI и MICROWIRE PLUS
  1. Скорость.
  2. Не требуются нагрузочные резисторы.
  3. Полнодуплексный режим работы.
  4. Устойчивость к шумам.
  1. Большее число подключений к линиям шины.
  2. Для одновременного обмена данными более чем с одним ведомым устройством необходимы отдельные линии выбора кристалла.
  3. Отсутствует подтверждение приема данных.
Двухпроводной: I2C и SMBus
  1. Меньше подключений к линиям шины.
  2. Множество устройств делят между собой одну шину.
  3. Прием данных подтверждается.
  1. Скорость:
    • для SMBus — не выше 100 кбит/с;
    • для I2C — не выше 3,4 Мбит/с.
  2. Полудуплексный режим работы.
  3. Для линий с открытым стоком требуются нагрузочные резисторы.
  4. Сниженная устойчивость к шумам.
Трехпроводной интерфейс

В трехпроводных интерфейсах используется линия выбора кристалла (CS или SS с активным низким уровнем), линия синхронизации (SCLK) и линия ввода данных или главная линия вывода (называется DIN или MOSI).

Поскольку эти интерфейсы содержат также линию вывода данных или главную линию ввода (называется DOUT или MISO), их иногда называют четырехпроводными интерфейсами. Для простоты в данной статье трех– и четырехпроводные интерфейсы называются трехпроводными.

Трехпроводные интерфейсы работают на более высоких тактовых частотах и не требуют нагрузочных резисторов. Интерфейсы SPI/QSPI и MICROWIRE также обеспечивают полнодуплексный режим работы (данные могут одновременно передаваться и приниматься), и они более устойчивы к шумам. В трехпроводных интерфейсах синхронизация производится по фронту, а не по уровню. Основной недостаток трехпроводного интерфейса — необходимость в отдельной линии CS с активным низким уровнем для каждого ведомого устройства на шине, если только ведомые устройства не подключены по шлейфовой схеме, как показано на рис. 1. (Шлейфовая схема подключения более подробно обсуждается ниже.) Трехпроводной интерфейс также не предусматривает подтверждения правильной передачи или приема данных.

С точки зрения программирования трехпроводные интерфейсы проще и эффективнее двухпроводных при работе с одним ведущим и одним ведомым устройствами.

Рис. 1. В трехпроводных интерфейсах используются линии ввода данных, вывода данных, синхронизации и выбора кристалла

Двухпроводной интерфейс

В двухпроводных интерфейсах используется только линия данных (SDA или SMBDATA) и линия синхронизации (SCL или SMBCLK). Меньшее на одну или две количество линий — особенно актуальное преимущество для компактных устройств, таких как мобильные телефоны и волоконно–оптические системы. Двухпроводные интерфейсы также позволяют подключать множество ведомых устройств к одной шине без необходимости использования сигналов выбора кристалла. Это возможно благодаря тому, что каждое устройство имеет уникальный адрес. Двухпроводные интерфейсы также предусматривают передачу бита подтверждения после успешного чтения. Поскольку в двухпроводных интерфейсах имеется только одна линия данных, они способны работать только в полудуплексном режиме (в заданном такте возможны только передача или только прием данных, но не то и другое вместе).

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

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

Конструктивные особенности интерфейсов SPI, QSPI, MICROWIRE

Интерфейсом SPI, который разработан компанией Motorola, оборудованы популярные процессоры и микроконтроллеры, такие как MAXQ2000 и MAXQ7654. Как уже отмечалось выше, схемы с интерфейсом SPI требуют двух линий управления (CS с активным низким уровнем и SCLK) и двух линий данных (DIN/SDI и DOUT/SDO). В стандартах SPI/QSPI компании Motorola линия данных DIN/SDI называется MOSI (master–out, slave–in — выход ведущего, вход ведомого), линия DOUT/SDO — MISO (master–in, slave–out — вход ведущего, выход ведомого), а линия CS с активным низким уровнем — SS (slave–select — выбор ведомого).

Для простоты и ясности в настоящей статье линии данных трехпроводного интерфейса будут рассматриваться с точки зрения ведомого устройства: DIN — это вход данных ведомого устройства, а DOUT — выход данных ведомого устройства. В этой статье линии трехпроводной шины обозначаются как CS с активным низким уровнем, SCLK, DIN и DOUT, поскольку именно такие названия используются в периферийных устройствах, выпускаемых компанией Maxim.

В большинстве интерфейсов SPI имеется два конфигурационных бита, определяющих момент выборки данных ведомым устройством — CPOL (полярность сигнала синхронизации) и CPHA (фаза сигнала синхронизации). Бит CPOL определяет состояние сигнала SCLK в режиме холостого хода (отсутствие переключения) — высокий уровень (CPOL = 1) или низкий уровень (CPOL = 0). Бит CPHA определяет, по какому фронту сигнала SCLK происходит сдвиг данных в том и другом направлении. Если CPOL = 0, то при CPHA = 0 данные будут сдвигаться на ведомое устройство по положительному фронту сигнала SCLK. При CPHA = 1 данные будут сдвигаться на ведомое устройство по отрицательному фронту сигнала SCLK. Два состояния битов CPOL и CPHA дают четыре возможных сочетания полярности и фазы сигнала синхронизации; каждое сочетание несовместимо с остальными тремя. Для успешного обмена данными между ведущим и ведомым устройствами на каждом из них должны быть установлены одинаковые значения CPOL и CPHA.

В простейшей форме интерфейс SPI передает за один прием восемь битов данных (один байт), хотя некоторые микроконтроллеры передают за один прием два или более байта. Например, микроконтроллеры MAXQ2000 и MAXQ7654 способны передавать за один прием 8 или 16 битов. При CPOL = 0 и CPHA = 0 переход от высокого уровня к низкому на линии CS с активным низким уровнем запускает передачу данных с ведущего устройства на ведомое. Сигнал на линии CS должен удерживаться на низком уровне, пока уровень сигнала SCLK будет меняться от низкого к высокому в течение восьми полных тактов. Данные DIN сдвигаются по положительному фронту сигнала SCLK. Байт данных загружается в ведомое устройство после того, как сигнал на линии CS с активным низким уровнем перейдет от низкого уровня к высокому. Данные будут доступны на линии DOUT ведомого устройства по отрицательному фронту сигнала SCLK на протяжении того же цикла из восьми битов. На рис. 2a приведена временная диаграмма работы трехпроводного интерфейса SPI при CPHA = 1 и CPOL = 1. Потактовая передача данных на периферийное устройство производится по положительному фронту сигнала синхронизации, а с ведомого устройства — по отрицательному фронту. На рис. 2б приведена временная диаграмма работы трехпроводного интерфейса SPI при CPHA = 0 и CPOL = 1. Потактовая передача данных на периферийное устройство производится по отрицательному фронту сигнала синхронизации, а с ведомого устройства — по положительному фронту.

Рис. 2. a) Временная диаграмма работы трехпроводного интерфейса при CPHA = 1; б) временная диаграмма работы трехпроводного интерфейса при CPHA = 0

Линия шины CS с активным низким уровнем используется в качестве разрешающего сигнала для каждого ведомого устройства, поскольку каждой ИС на шине требуется собственная линия выбора кристалла. Если к одной шине подключено четыре ведомых устройства, для выбора соответствующего ведомого устройства необходимо четыре линии выбора кристалла. Если на линии CS с активным низким уровнем присутствует высокий (неактивный) уровень, ведомое устройство игнорирует фронты сигнала SCLK и удерживает линию DOUT в состоянии с высоким импедансом.

Некоторые периферийные устройства с трехпроводным интерфейсом можно программировать методом, который носит название шлейфового подключения. Вместо того чтобы подключать по одной линии CS с активным низким уровнем на каждое периферийное устройство, при шлейфовом подключении можно использовать одну линию CS с активным низким уровнем и линию SCLK для управления несколькими последовательно соединенными периферийными устройствами. Для такого шлейфового подключения периферийных устройств в трехпроводном интерфейсе должна быть линия DOUT. Как показано на рис. 1, линия DOUT периферийного устройства № 1 служит линией DIN для периферийного устройства № 2 и т. д.

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

Стандарт QSPI почти идентичен SPI. Фактически периферийные устройства не могут отличить шину QSPI от шины SPI. В отличие от ведущих устройств с интерфейсом SPI, ведущие устройства с интерфейсом QSPI позволяют осуществлять передачу данных с программным выбором кристалла. Более того, ведущие устройства с интерфейсом QSPI могут передавать за один прием от 8 до 16 битов, а устройства с интерфейсом SPI обычно передают всего 8 битов. Устройства QSPI можно настроить для последовательной передачи до 16 слов данных (максимум 256 битов). Такой передачей целиком управляет интерфейс QSPI, и вмешательства микроконтроллера не требуется. Подобно SPI, стандарт QSPI не нормирует максимальную скорость передачи данных.

Более старый стандарт MICROWIRE, разработанный компанией National Semiconductor, весьма похож на SPI. Однако в MICROWIRE жестко заданы полярность и фаза сигнала синхронизации (CPOL = 0, CPHA = 0). Данные на линии DIN всегда сдвигаются на ведомое устройство по положительному фронту сигнала SCLK. Сдвиг данных с вывода DOUT происходит по отрицательному фронту сигнала SCLK. Подобно SPI, стандарт MICROWIRE не нормирует максимальную скорость передачи данных.

Интерфейс I2C

В отличие от трехпроводного полнодуплексного последовательного интерфейса, стандарт I2C, разработанный компанией Philips, предусматривает связь в полудуплексном режиме по одной линии данных (SDA) и одной линии управления (SCL). Стандарт I2C определяет простой двунаправленный интерфейс «ведущий–ведомый». В этой схеме микроконтроллер обозначает режим, в котором он будет работать — ведущий (режим передачи) или ведомый (режим приема). Каждое ведомое устройство имеет уникальный адрес, что позволяет ведущему устройству связываться с различными ведомыми устройствами по одной шине без использования сигналов выбора кристалла (рис. 3). Число ведомых устройств ограничено только максимально допустимой емкостью шины (400 пФ). В протоколе I2C используются 7– или 10–разрядные адреса, хотя 7–разрядные адреса более распространены. При 7–разрядном протоколе к шине можно подключать до 127 различных периферийных устройств. SCL и SDA — это линии с открытым стоком, для надлежащей работы которых необходимо, чтобы в режиме холостого хода на них был установлен высокий уровень. При работе от источника питания напряжением 3 В к этим линиям следует подсоединить нагрузочный резистор сопротивлением 1 кОм или выше, a при работе от источника питания напряжением 5 В — 1,6 кОм или выше.

Рис. 3. В двухпроводных интерфейсах имеется линия ввода/вывода данных и линия синхронизации

Обмен данными по интерфейсу I2C начинается с команды запуска, которая соответствует переходу линии SDA с высокого на низкий уровень при высоком уровне на линии SCL (рис. 4a). В двухпроводном интерфейсе для передачи данных между ведущим и ведомым устройствами используются команды запуска, повторного запуска и останова. За каждый такт SCL передается один бит данных; для передачи байта на ведомое устройство или с него необходимо передать как минимум девять битов. Цикл записи содержит восемь битов данных (рис. 4б), за которыми следует сигнал подтверждения (ACK) или отсутствия подтверждения (NACK). Двухпроводной интерфейс устанавливает низкий уровень на линии SDA, когда передача данных подтверждается. Когда данные передаются по шине I2C, они сдвигаются на ведомое устройство по положительному фронту сигнала SCL и считываются по отрицательному фронту сигнала SCL. Данные на линии SDA должны быть устойчивы, пока тактовый импульс SCL имеет высокий уровень. Передача завершается при поступлении команды останова или повторной команды запуска; в этот момент линия SDA переходит с низкого уровня на высокий при высоком уровне на линии SCL. Как SDA, так и SCL сохраняют высокий уровень, когда шина свободна.

Рис. 4. a) Условия запуска и останова в двухпроводном интерфейсе; б) биты подтверждения I2C

Цикл записи I2C начинается с команды запуска, за которой следует 7–разрядный адрес ведомого устройства и восьмой бит, указывающий на команду записи или чтения. Для передачи команды записи установите низкий уровень в восьмом бите, для передачи команды чтения — высокий. Ведущее устройство освобождает линию шины после восьмого такта. На девятом такте ведомое устройство удерживает низкий уровень на линии SDA, если оно подтверждает правильную передачу данных. Если ведомое устройство не подтверждает правильность выполнения команды записи, оно освобождает линию SDA (которая затем удерживается на высоком уровне нагрузочным резистором).

После этого ведущее устройство записывает 8–битный командный байт, за которым следует второй бит ACK/NACK. Далее ведущее устройство записывает 8–битный байт данных, за которым следует третий бит ACK/NACK. Конечный бит подтверждения байта данных завершает цикл чтения–записи, и выходы периферийного устройства обновляются. На рис. 5a показан пример цикла записи.

Рис. 5. a) Пример цикла записи I2C; б) примеры циклов чтения I2C

Цикл чтения I2C начинается с команды запуска, за которой следует адрес ведомого устройства с восьмым битом, обозначающим команду записи. После поступления бита ACK/NACK ведущее устройство записывает командный байт для доступа к новому регистру ведомого устройства. За вторым битом ACK/NACK ведущее устройство переписывает адрес ведомого устройства. Затем после получения третьего бита ACK/NACK ведомое устройство берет на себя управление шиной и записывает восемь битов данных за один прием (рис. 5б). При чтении из того же регистра ведомого устройства, что и в предыдущих операциях чтения, ведущему устройству достаточно записать адрес ведомого устройства, прежде чем прочесть данные с этого ведомого устройства.

В двухпроводном интерфейсе передача данных происходит по восемь бит за один прием (рис. 5). Интерфейс I2C поддерживает медленные (до 100 кбит/с), быстрые (до 400 кбит/с) и высокоскоростные (до 3,4 Мбит/с) протоколы. Интерфейс I2C распознает сигналы высокого и низкого уровня по уровням напряжения КМОП–логики: напряжение низкого уровня составляет менее 0,3 от напряжения питания; сигнал высокого уровня составляет более 0,7 от напряжения питания.

Интерфейс SMBus

Стандарт SMBus был разработан корпорацией Intel для низкоскоростного обмена данными, и интерфейс SMBus похож на I2C. Подобно I2C, в SMBus используется двухпроводной интерфейс с линией данных (SMBDATA) и линией синхронизации (SMBCLK). Для линий SMBCLK и SMBDATA также требуются нагрузочные резисторы. При питании от источника напряжением 3 В следует использовать нагрузочный резистор сопротивлением 8,5 кОм и более, а при питании от источника напряжением 5 В — 14 кОм и более. Шина SMBus питается от источника напряжением 3 или 5 В и распознает как сигнал высокого уровня напряжение выше 2,1 В, а как сигнал низкого уровня — напряжение ниже 0,8 В.

Главное отличие между интерфейсами I2C and SMBus заключается в величине таймаута, а также в минимальной и максимальной тактовой частоте. Шина I2C работоспособна на частотах до 0 Гц и не имеет таймаута по бездействию. В интерфейсе SMBus таймаут возможен. Тайм–аут происходит, когда ведомое устройство сбрасывает свой интерфейс после того, как сигнал синхронизации сохраняет низкий уровень в течение временного интервала, превышающего время ожидания (максимум 35 мс). Время ожидания интерфейса SMBus обусловливает минимальную тактовую частоту, равную 19 кГц. Для надлежащего обмена данными необходимо установить частоту сигнала SMBCLK в диапазоне от 10 до 100 кГц. Однако ведущее или ведомое устройство, подключенное к шине I2C, может удерживать сигнал синхронизации на низком уровне так долго, как это необходимо для обработки данных.

Примеры работы с периферийными устройствами

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

На рис. 6 показан микроконтроллер, обменивающийся данными с 8–разрядным ЦАП (MAX5115) по двухпроводному интерфейсу. Поскольку у этого ЦАП имеются четыре адресных контакта, дающие 16 уникальных адресов ведомых устройств, возможно параллельное подключение до 16 ЦАП. Те же две линии шины можно было бы использовать для установки смещения контроллера вентилятора на базе датчика температуры с интерфейсом SMBus (MAX6641), поскольку MAX6641 имеет другой адрес как ведомое устройство. Этот контроллер управляет напряжением на затворе полевого МОП–транзистора для включения и выключения вентилятора.

Рис. 6. Поскольку данный микроконтроллер оборудован интерфейсом I2C, для обмена данными с различными периферийными устройствами, такими как параллельно соединенные ЦАП и датчик температуры, достаточно двух линий шины

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

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

В новых конструкциях обеспечивается возможность использовать больше адресов ведомых устройств при меньшем количестве адресных контактов. Например, расширитель портов ввода/вывода MAX7319 можно запрограммировать на 16 уникальных адресов ведомого устройства, используя всего лишь два адресных контакта (AD2 и AD0). Эти контакты могут быть привязаны к «земле» (GND), напряжению питания (Vcc), SDA или SCL. В таблице 2 показано 16 доступных адресов ведомого устройства. Хотя разряды A6, A5 и A4 должны быть установлены в значение 110, разряды A3–A0 могут программироваться четырьмя различными состояниями контактов AD2 и AD0.

Таблица 2. Дешифрация 16 уникальных адресов по двум адресным линиям (AD2 и AD0) в MAX7319

Подключение контакта Адрес устройства
AAD2 AD0 A6 A5 A4 A3 A2 A1 A0
SCL GND 1 1 0 0 0 0 0
SCL Vcc 1 1 0 0 0 0 1
SCL SCL 1 1 0 0 0 1 0
SCL SDA 1 1 0 0 0 1 1
SDA GND 1 1 0 0 1 0 0
SDA Vcc 1 1 0 0 1 0 1
SDA SCL 1 1 0 0 1 1 0
SDA SDA 1 1 0 0 1 1 1
GND GND 1 1 0 1 0 0 0
GND Vcc 1 1 0 1 0 0 1
GND SCL 1 1 0 1 0 1 0
GND SDA 1 1 0 1 0 1 1
Vcc GND 1 1 0 1 1 0 0
Vcc Vcc 1 1 0 1 1 0 1
Vcc SCL 1 1 0 1 1 1 0
Vcc SDA 1 1 0 1 1 1 1

Перспективы на будущее

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

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

Для получения дополнительной информации обращайтесь к официальным дистрибьюторам компании Maxim в России: www.maxim-ic.ru/contact.

Литература

  1. Указания по применению «Выбор последовательной шины» www.maxim-ic.com/an3967
  2. Указания по применению «Последовательные цифровые сети данных» www.maxim-ic.com/an3438

Как подключить несколько устройств к Arduino с помощью I2C?

Я только что прочитал таблицу данных, без какого-либо внешнего оборудования (например, некоторого буфера мультиплексирования с выбором канала и включением микросхемы), вы не можете иметь два из этих устройств на одной шине I2C.

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

Более сложные 8-битные AVR ATMEL, такие как XMEGA, имеют несколько интерфейсов I2C, так что с ними у вас может быть два устройства, по одному на канал. Например, с ARM Cortex M0 -> M3 простого и меньшего размера все они имеют несколько шинных интерфейсов, которые могут решить эту проблему.

Что-то, что можно сделать с небольшим количеством аппаратного и программного обеспечения, — это иметь интегральную микросхему, которая блокирует последовательные тактовые импульсы I2C (SCL) для одного или другого и чередует, какой из них получает тактовые сигналы и, следовательно, способен принимать и отвечать на команды. Я предполагаю, что простой двойной MOSFET с управлением XOR у ворот мог бы сделать это с помощью простой схемы. В противном случае какой-либо драйвер линейного / буферного чипа с разрешающим выводом и двухканальным / мультиплексированным выходом позволит вам выбрать, какой выход получает сигнал SCL.

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

РЕДАКТИРОВАТЬ: Texas Instruments имеет документ по устранению неполадок I2C, в котором на стр. 8 показан способ сделать мультиплексирование более простым способом, чем я описал, для разделения шины I2C на подразделы для решения конфликтующих проблем адреса подчиненного устройства, таких как то, что у вас есть.

удачи!

SPI пины

nbarsuk
Загрузка

15.01.2018

1340

Вопросы и ответы
Статья относится к принтерам:
ZAV-MAX-PRO Добрый день!

Подскажите пожалуйста немного по SPI пинам на RAMPS.

Сейчас возникла необходимость подцепить драйвера по SPI и все было бы хорошо, если бы не Слот SD карточки, который там уже воткнут.

Разбираюсь я так себе конечно в прошивке, но пины перебросить смог. Да только все равно драйвера не цепляются. После мучений, я решил поставить все пины по дефолту, закомментировать карточку в Мартине и вместо разъемов слота карточки воткнул SPI интерфейс драйверов. И все заработало. Вопрос такой: как сделать так, чтобы и модуль SD карты и SPI интерфейс драйверов могли работать одновременно? Есть ли какие-то нюансы в переброске именно SPI пинов? Хочется все-таки на новых драйверах сохранить возможность автономной печати без компьютера.

Спасибо!

Ответы на вопросы

Популярные вопросы

AKlion
Загрузка

25.01.2021

831

Ктонибудь использует WIFI камеру для наблюдения за принтером. Если есть подобный опыт то поделитесь плиззз. Ищу камеру но пока не могу понять какую лу…

Читать дальше PatriotWoland
Загрузка

13.01.2021

2810

Захотелось красивый абажур на люстру попробовать напечатать на Anycubic mega s. Супруга выбрала этот:

https://www.thingiverse.com/thi…

Читать дальше Tortik
Загрузка

24.12.2018

16258

С того момента как я собрал принтер Ultimaker уважаемого Plastmaski, не могу избавиться от одной проблемы. Уже почти 2 кг пластика перевел на тесты. М…

Читать дальше

Увеличение количества входов/выходов ESP8266/ESP32/Arduino | Жизнь, бизнес и IT

У 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

Использовать 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 канала обойдется несколько дешевле, чем потеря микроконтроллера. Либо подстраховываться установкой стабилитрона.

Помимо АЦП в 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 для расширения количества GPIO портов, MCP23017. Есть вариант для шины I2C и более шустрый для SPI (MCP23S17). Китайские продавцы нередко указывают в описании товара чип MCP23S17, однако по фото платы видно, что чип MCP23017. Обращайте на это внимание!

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 резисторы на входах.

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

Для управления силовой частью, например, реле, хорошо бы иметь сборку транзисторов Дарлингтона, вроде недорогого 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.

В общем, не факт, что удастся сэкономить на входе. 🙁 Особенно, если нужен 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.

Заключение

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

Похожее

Уроки Arduino. Интерфейсы, модули


Суть и вообще предназначение Ардуино состоит в быстрой и удобной разработке электронных устройств. Это универсальный контроллер, на базе которого можно сделать законченный девайс (от англ. Device – устройство, прибор) абсолютно произвольного назначения, от полезного (часы-будильник, реле времени с кучей настроек и дисплеем, автоматизацию теплицы, умный дом…) до бесполезного, но забавного или интересного (самонаводящийся вентилятор, машинка на радиоуправлении с пушкой, робот с большим количеством функций и так далее). Для достижения этих целей к Ардуино подключаются различные внешние устройства, с которыми она может взаимодействовать.

Начнем с мира цифрового, в котором устройства общаются друг с другом при помощи цифровых сигналов, так называемых логических, то есть имеющих два простейших состояния: правда и ложь, да и нет, 1 и 0. В большинстве цифровых устройств эти два состояния передаются напряжением 0 и 5 Вольт, но бывает и 0 и 3.3 Вольта. Таким образом микроконтроллер по сути может измерить цифровой сигнал (что подаётся на ногу, 0 или 5 Вольт), или выдать со своей ноги 0 и 5 Вольт соответственно. Закодированный цифровой сигнал выглядит примерно вот так: скачки 0 и 5 (или 3.3) Вольт с разной продолжительностью.


Совокупность правил и длин участков 5 и 0 Вольт можно назвать протоколом связи, или интерфейсом, шиной.

Распиновка Nano


  • GPIO – базовый порт ввода-вывода. Может читать и выдавать цифровой сигнал (только 0 и 5 Вольт).
  • PWM – может аппаратно генерировать ШИМ сигнал.
  • ANALOG – пин АЦП, аналогово-цифрового преобразователя. Может измерять напряжение.
  • UART – выводы аппаратного UART для подключения модулей с таким же интерфейсом.
  • I2C– выводы аппаратной шины I2C для подключения модулей с таким же интерфейсом.
  • SPI – выводы аппаратной шины SPI для подключения модулей с таким же интерфейсом.

Простые цифровые датчики


К простым цифровым можно отнести любые датчики, имеющие пин с логическим выходом, то есть напряжение на этом пине может быть только 0 или 5 Вольт в зависимости от показания датчика. Это например ИК датчик движения, кнопка, датчик линии, энкодер, а также практически все остальные датчики с пинами питания и выходом, помеченным как DOOUT или S.

Такие модули подключаются в любые GPIO пины.

Интерфейсы


Некоторые датчики имеют цифровой выход, но выдают не просто 0 и 5V, а передают данные по цифровому интерфейсу связи. Сигнальные пины таких датчиков могут быть подписаны как SCKSDASCLMISOMOSISS и прочими аббревиатурами. Для работы с такими датчиками нужно обязательно смотреть примеры или документацию. По сути любой такой датчик можно подключить на любой GPIO пин и программно эмулировать нужный интерфейс связи, что сложно и будет отбирать лишнее процессорное время. Arduino Nano поддерживает несколько интерфейсов аппаратно, то есть позволяет работать с ними очень быстро и эффективно.

UART


UART – пины D0 (RX) и D1 (TX). По нему чаще всего подключаются Bluetooth, GPS и GSM модули. В общем случае поддерживает подключение только одного модуля. Пины на модуле называются обычно RX и TX. Подключение к модулю осуществляется “наоборот” – RX->TX и TX->RX, так как RX принимает сигналы (Receiver), а TX – передаёт (Transmitter). Для подключения нескольких UART модулей или одновременной работы модуля и “монитора порта” используют программный UART при помощи встроенной библиотеки SoftwareSerial.

I2C (Wire)


I2C – пины A4 (SDA) и A5 (SCL). Данный интерфейс является шиной, то есть к нему можно подключить параллельно сразу несколько (до 128) устройств с уникальными адресами.

Варианты маркировки и подключение к аппаратному I2C:

  • A4 < SDA (D) – линия данных, Serial DAta
  • A5 < SCL (C, SCK) – линия синхронизации, Serial CLock

SPI


SPI – пины D11 (MOSI), D12 (MISO) и D13 (SCLK), иногда добавляется D10 (SS). Данный интерфейс также является шиной, причём высокоскоростной, и поддерживает подключение по сути неограниченного количества модулей: у модуля есть пин CS (Chip Select), который прижимается микроконтроллером к GND для выбора данного модуля в качестве устройства приёма и передачи данных в текущий момент. SPI – очень распространённый и простой интерфейс, очень часто датчики и модули подключают к любым GPIO пинам и используют программную отправку и приём данных через встроенные функции shiftIn() и shiftOut(). “Сложные” датчики и датчики с большим объёмом и высокой скоростью передаваемых данных (карта памяти, NFC модуль) нужно подключать к аппаратной шине SPI микроконтроллера.

Варианты маркировки и подключение к аппаратному SPI:

  • D11 < MOSI (SDI, DI, DIN, SI) – линия данных от Ардуино к модулю
  • D12 < MISO (SDO, DO, DON, SO) – линия данных от модуля к Ардуино
  • D13 < SCLK (SCK, CLK, SPC) – линия синхронизации
  • D10 < SS (SCK, CLK, SPC) – используется в случаях, когда Ардуино является “датчиком”
  • GPIO < CS (SS, RCK) – выбор текущего модуля прижатием этого пина к GND

Другие


Помимо этих трёх популярных интерфейсов существуют и другие (CAN, 1-wire и прочее), но так как у нас есть сила микроконтроллера, мы можем эмулировать практически любой протокол и интерфейс связи, так называемый software <название интерфейса> (softwareSerial, softwareI2C…). И тут на помощь приходит комьюнити ардуино, которое уже написало библиотеки для всего что можно, и можно без проблем общаться практически с любой железкой, поддерживающей какой-либо популярный протокол связи. По той же CAN шине можно подключиться к мозгам своего автомобиля и делать с ним всякое. Куча микросхем различного назначения без особых проблем и телодвижений подключаются к ардуино и позволяют собой управлять. Всяческие усилители, драйверы, сдвиговые регистры, ЦАПы, АЦПы, мультиплексоры, цифровые резисторы и сотни других интересных штук.

Аналоговый сигнал


Второй тип связи – аналоговый, работает только “на приём”. Микроконтроллер может измерять напряжение, которое подаётся ему на АЦП (аналогово-цифровой преобразователь), диапазон измерения ограничен вплоть до опорного напряжения или напряжения питания микроконтроллера, то есть максимум, что может измерить микроконтроллер без дополнительного железа – от 0 до 5 вольт, или от 0 до 3.3 вольт для 3.3 вольтовых моделей. К этому мы ещё вернёмся.

Благодаря наличию АЦП (чтение аналогового сигнала) ардуино может считывать показания любых аналоговых датчиков: термисторы, термопары, фоторезисторы, потенциометры, напряжение шунта и прочее прочее из мира аналоговой электроники. По сути можно подключить всё что угодно без особых навыков, было бы желание и готовая библиотека. Ну и умение читать.

К аналоговым относятся модули и датчики, сигнал с которых выходит в виде напряжения от 0 до 5 Вольт, но меняется “плавно” в зависимости от показания с датчика. Это например микрофон, термистор, фоторезистор, датчик влажности, потенциометр и прочее. Многие аналоговые датчики имеют пины, подписанные так же, как цифровые. Как отличить цифровой датчик от аналогового? Либо по описанию, либо методом “тыка” – подключить в аналоговый пин и вывести сигнал. Некоторые модули имеют цифровой и аналоговый выход одновременно (датчики звука, линии, холла и некоторые другие), пины у них обычно подписаны как DO – цифровой выход и AO – аналоговый. Также аналоговый выход может быть маркирован как OUT или S.

Такие модули подключаются в любые ANALOG пины.

Резюмируя


Теперь по сути дела: датчики, их куча кучная, измерять можно ну просто всё, что вообще измеряется. Электроника: напряжение, ток, сопротивление, работа с переменным током, поля. Параметры микроклимата: температура, влажность, давление, содержание газов, скорость ветра, освещенность, что угодно. Интересных модулей тоже очень много: Bluetooth, сотовая связь, GPS, дисплеи различных типов и размеров, датчики присутствия, как ИК, так и микроволновые, модули для беспроводной связи ардуинок и многое другое.

Можно управлять абсолютно любой железкой, которая выполняет свою функцию просто при подаче питания: лампочка, светодиодная лента, электронагреватель, мотор или любой электропривод, электромагнит, соленоид-толкатель, и это все с любым напряжением питания. Но тут нужно кое что понять: Ардуино (точнее микроконтроллер) – логическое устройство, то есть по-хорошему она должна только отдавать команды другим устройствам, или принимать их от них. Это я к тому, что напрямую от ардуино не работают ни лампочки, ни моторчики, ни нагреватели, ни-хуче-го. Максимум – светодиод. С пониманием этого идём дальше. Чтобы ардуино включила или выключила (подала питание) на другое устройство, нужно устройство – посредник, например реле или транзистор. Ардуино управляет реле, а реле в свою очередь включает любую нужную нагрузку с любым напряжением питания и все такое, подробнее об этом поговорим отдельно.

Как суть всего выше написанного – возможности Ардуино по подключению и управлению различными железками практически безграничны, можно воплотить любую идею, даже самую безумную. Датчики что то измеряют, исполнительные устройства что то контролируют, в это же время ведётся отсылка данных куда-нибудь, что-то отображается на дисплее и контролируется при помощи кнопок. Романтика!

У меня в каталоге ссылок на Ардуино-компоненты можно найти практически все существующие датчики, модули и прочие железки для Ардуино, и практически у каждого есть ссылка на статью с примером и библиотекой. Пользуйтесь!

Важные страницы


4.8 / 5 ( 11 голосов )

Поиск адресов I2C устройств подключенных к Arduino

Информация о материале

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

Подключение

Подключается через контакты SDA и SCL (на ардуино УНО и НАНО они на контактах A4 и A5).

Скетч

#include <Wire.h>

byte error, address;
int nDevices;  //Кол-во найденных устройств

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}

void loop() {
  Serial.println("Scanning...");
  nDevices = 0;
  for (address = 1; address < 127; address++ )  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0)    {
      Serial.print("I2C device found at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error == 4)    {
      Serial.print("Unknow error at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
  delay(5000);  // Ждем 5 сек. до следующего сканирования
}
Добавить комментарий Периферийные устройства связи

Arduino: UART, I2C и SPI

UART, I2C и SPI являются одними из наиболее распространенных и основных аппаратных коммуникационных периферийных устройств, которые производители и электрики используют при разработке микроконтроллеров. Точно так же для Arduino они также содержат периферийные устройства UART, I2C и SPI.

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

В этом блоге мы поговорим о:

  • Контакты UART, SPI, I2C на примерах плат Arduino
  • Введение в UART на Arduino
    • Преимущества и недостатки использования UART
    • Сопутствующие аксессуары UART Arduino
  • Введение в I2C на Arduino
    • Преимущества и недостатки использования I2
    • Связанные аксессуары для I2C Arduino
  • Введение в SPI на Arduino
    • Преимущества и недостатки использования SPI
    • Связанный SPI Arduino

Выводы UART, SPI, I2C на платах Arduino Примеры

Прежде чем мы начнем, вы можете спросить, где находятся контакты UART, SPI и I2C на разных платах Arduino, поскольку они являются встроенными периферийными устройствами.Вот несколько примеров:

Arduino Uno Rev3 (24,95 доллара США)

  • Arduino Uno Rev 3 — это плата микроконтроллера на базе ATmega328, 8-битного микроконтроллера с 32 КБ флэш-памяти и 2 КБ ОЗУ.
  • Он имеет 14 цифровых входов / выходов (из которых 6 могут использоваться как выходы ШИМ), 6 аналоговых входов, кварцевый генератор 16 МГц, соединение USB, разъем питания, заголовок ICSP и кнопку сброса

Seeeduino V4.2 (6,90 долл. США)

  • Seeeduino V4.2 — это совместимая с Arduino плата, основанная на микроконтроллере ATmga328P. В мире так много плат, совместимых с Arduinos и Arduino, и мы думаем, что по сравнению с другими Arduino она намного более стабильна, проста в использовании и даже красивее.
  • Seeeduino V4.2 основан на загрузчике Arduino UNO и с ATMEGA16U2 в качестве преобразователя UART-USB, что означает, что плата может работать как микросхема FTDI.

Seeeduino Nano (6,90 долл. США)

  • Seeeduino Nano — это компактная плата, похожая на Seeeduino V4.2 / Arduino UNO, и он полностью совместим с Arduino Nano по распиновке и размерам.
  • Как и Seeedunio V4.2, Seeeduino Nano построен на 8-битном микроконтроллере AVR Atmega328P. Однако размеры у них существенно различаются. Seeeduino Nano меньше четверти размера, но с почти теми же функциями, что сэкономит больше места для вашего проекта, больше подходит для сцен с ограниченным пространством.
  • По сравнению с Arduino Nano, он имеет USB Type-C вместо Mini USB, а также дополнительный разъем Grove I2C.
  • О Grove:
    • Grove is Seeed собственная модульная стандартизированная система прототипирования соединителей.
    • Grove использует строительный блок для сборки электроники по сравнению с системой на основе перемычек или пайки. Легче подключаться, экспериментировать и создавать, а также упрощается система обучения для разработчиков.

Без лишних слов, давайте сразу перейдем к первому коммуникационному периферийному устройству для Arduino: UART


Введение в UART на Arduino

  • UART, что означает универсальный асинхронный прием и передача, представляет собой простой протокол последовательной связи, который позволяет хосту (Arduino) связываться с последовательными устройствами.
  • UART поддерживает двунаправленную, асинхронную и последовательную передачу данных.
  • Он использует 2 линии данных для связи друг с другом: TX (контакт 1) и RX (контакт 0).
    • TX — Используется для передачи
    • RX — Используется для приема
    • Они подключены между двумя устройствами (например, USB на Arduino и компьютер)
  • UART находится на всех типах плат Arduino, что позволяет Arduino обмениваться данными с компьютером благодаря встроенному преобразователю USB в последовательный
  • Если ваша программа написана на ОС Windows, Mac или Linux и хочет использовать ее с вашим Arduino, просто соедините их вместе через их порт USB, как если бы это был последовательный порт .

Для получения дополнительной информации о рабочем протоколе и работе UART, посетите наш другой блог здесь!

Преимущества и недостатки использования UART с Arduino

Преимущества использования UART с Arduino
  • Прост в эксплуатации и использовании с Arduino. Он хорошо документирован в Интернете, так как это широко используемый метод пользователями Arduino с множеством ресурсов и руководств в Интернете.
  • Часы не нужны
Недостатки использования UART с Arduino
  • Более низкая скорость по сравнению с I2C и SPI
  • Скорости передачи каждого UART должны быть в пределах 10% друг от друга, чтобы предотвратить потерю данных.
  • Невозможно использовать несколько ведущих систем, таких как Arduino и ведомые устройства.

Сопутствующие аксессуары UART Arduino

Последовательный преобразователь USB CP2102
  • Последовательный преобразователь USB CP2102 — это небольшой адаптер, необходимый для платы RF Explorer 3G + IoT для Arduino / Seeeduino для приема обновлений прошивки с компьютера.
  • Его также можно использовать как дополнительный последовательный порт Arduino, если с платой RF Explorer 3G + IoT используется Seeeduino или другая плата малого форм-фактора.
Grove — UART WiFi V2 (ESP8285)
  • Grove — UART WiFi V2.0 (ESP8285) — это модуль последовательного приемопередатчика с вездесущим ESP8285 IoT SoC. Благодаря встроенному стеку протоколов TCP / IP этот модуль позволяет вашему микроконтроллеру взаимодействовать с сетями Wi-Fi с помощью всего нескольких строк кода.
  • ESP8285 может работать как отдельное приложение или как подчиненное устройство для главного MCU. Когда ESP8285 размещает приложение, оно сразу загружается с флэш-памяти.Встроенный высокоскоростной кэш помогает повысить производительность системы и оптимизировать системную память.
Grove — концентратор I2C (6 портов)
  • I2C — очень популярный протокол связи. В системе Grove I2C используется более чем 80 датчиками для связи. С этим концентратором I2C теперь еще удобнее подключать больше модулей I2C Grove.
  • Сегодня все больше и больше микроконтроллеров используют уровни связи 3,3 В, но традиционный Arduino Uno по-прежнему использует 5 В, что приводит к тому, что многие модули, особенно модули датчиков, требуют выравнивания при их использовании.
  • С этим модулем и поскольку большинство сенсорных модулей Grove теперь имеют функцию сдвига уровня, пользователям не нужно учитывать использование микроконтроллера 3,3 В или 5 В при его использовании.
  • Для более подробного обзора совместимости сенсоров, вы можете просмотреть наше Руководство по выбору Grove.
Базовый щит V2
  • Разве не неприятно, когда в вашем проекте задействовано множество датчиков, светодиодов и перемычек, что приводит к беспорядку?
  • С этим Base Shield V2 он избавляется от вашей макетной платы и соединительных проводов и позволяет очень удобно добавлять все ваши модули Grove к Arduino UNO с 16 разъемами Grove на базовом экране, включая аналоговый, цифровой, UART и I2C.

Введение в I2C на Arduino

  • I²C, что означает «межинтегральная схема», представляет собой интерфейс последовательной связи, разработанный для микроконтроллеров.
  • По сравнению с UART, он похож, но I2C не используется для связи между ПК и устройством, а используется с вашими модулями и датчиками.
  • Это простая двунаправленная двухпроводная синхронная последовательная шина и всего 2 провода (SDA и SCL) для передачи информации между устройствами, подключенными к шине.
  • С I2C они полезны для проектов Arduino, поскольку иногда для них требуется много разных частей (например, датчики, расширения, драйверы), работающие вместе, а с I2C вы можете подключить до 128 устройств на материнской плате, сохраняя при этом четкий канал связи. между ведущим (Arduino) и ведомым (модули и датчики) устройствами!

Для получения дополнительной информации о рабочем протоколе I2C и работе посетите наш другой блог здесь!

Преимущества и недостатки использования I2C с Arduino

Преимущества использования I²C с Arduino
  • Низкое количество выводов / сигналов даже при большом количестве устройств на шине
  • Гибкость = поддерживает связь с несколькими ведущими и несколькими ведомыми устройствами (например,может подключать Raspberry Pi вместе с Arduino)
  • Simple = использует только 2 провода
  • Adaptable = адаптируется к потребностям различных ведомых устройств.
Недостатки использования I²C с Arduino
  • Более низкая скорость по сравнению с SPI (следующее периферийное устройство связи), поскольку в нем используются подтягивающие резисторы.
  • Конструкция с открытым стоком = ограниченная скорость.
  • Требуется больше места из-за использования резисторов
  • Может усложняться при увеличении количества устройств

Сопутствующие аксессуары I2C Arduino

Щиток бесщеточного двигателя (TB6605FTG)
  • The Brushless Motor Shield — это драйвер бесщеточного двигателя для Arduino.
  • Встроенный потенциометр позволяет легко регулировать скорость двигателя. Этот щит предлагает множество режимов на выбор, вы можете использовать четыре встроенных переключателя для переключения функций.
  • Благодаря встроенному интерфейсу Grove I2C вы можете легко работать с другими модулями Grove с этим экраном, например, вы можете использовать Grove — LCD RGB Backlight для отображения скорости двигателя.
Драйвер I2C / адаптер с простым управлением Устройства I2C
  • Драйвер I²C — это простой в использовании инструмент с открытым исходным кодом для управления устройствами I²C.
  • Он работает с Windows, Mac и Linux и имеет встроенный цветной экран, на котором в реальном времени отображается вся деятельность I²C.
  • Боитесь, что ваше соединение I²C может выйти из строя? Хотите избежать мучительной отладки? Что ж, этот I²CDriver делает I²C намного более удобным для пользователя и может предотвратить это.

Введение в SPI на Arduino

  • SPI, что означает последовательный периферийный интерфейс, похож на I2C, где это другая форма протокола последовательной связи, специально разработанная для подключения микроконтроллеров.
  • SPI работает в полнодуплексном режиме, когда данные можно отправлять и получать одновременно.
  • По сравнению с UART и I2C, это самое быстрое периферийное устройство связи со скоростью передачи данных 8 Мбит и более.
    • Обычно быстрее из-за простого протокола. Линии данных / часов разделяются между устройствами, и каждому устройству потребуется уникальный адресный провод.
  • SPI используется в местах, где важна скорость, например, SD-карты, модули дисплея или когда информация обновляется и изменяется быстро, например, термометры.
  • Однако SPI можно использовать только с одним ведущим устройством, которым является Arduino с максимум 4 ведомыми устройствами.

Для получения дополнительной информации о рабочем протоколе и работе SPI посетите наш другой блог здесь!

Преимущества и недостатки использования SPI с Arduino

Преимущества использования SPI с Arduino
  • Протокол прост, поскольку нет сложной системы адресации ведомых устройств, такой как I2C
  • Самый быстрый протокол по сравнению с UART и I2C
  • Нет стартовых и стоповых битов, в отличие от UART, что означает, что данные могут передаваться непрерывно без прерывания.
Недостатки использования SPI с Arduino
  • Больше портов Pin занято, практический предел для количества устройств. (1 ведущее и 4 ведомых устройства)
  • Не задано управление потоком, и нет механизма подтверждения, подтверждающего, получены ли данные, в отличие от I2C
  • Использует четыре линии — MOSI, MISO, NCLK, NSS
  • Нет формы проверки ошибок в отличие от UART (с использованием бита четности)
  • Нет нескольких мастеров.

Сопутствующие аксессуары SPI Arduino

Модуль последовательной шины CAN на базе MCP2551 и MCP2515
  • Модуль последовательной шины CAN предоставляет вашему Arduino возможности шины CAN и позволяет взломать ваш автомобиль.
  • Позволяет читать и записывать сообщения на шину CAN. Модуль последовательной шины CAN может быть подключен к вашему Arduino через встроенный разъем Grove через SPI.
2,7-дюймовый трехцветный экран для электронных чернил для Arduino
  • Экран E-Ink также известен как экран E-paper. E-Ink устраняет необходимость в подсветке и, следовательно, обеспечивает сверхнизкое энергопотребление. E-Ink имеет чрезвычайно широкий угол обзора с очень высокой контрастностью, так что его можно четко отображать даже под прямыми солнечными лучами.
  • 2,7-дюймовый трехцветный дисплей E-Ink — это экран дисплея Arduino E-Ink, который содержит 264 × 176 пикселей и может отображать белый / черный / красный для каждого пикселя.
  • Этот щит связывается с Arduino через интерфейс SPI и резервирует интерфейс Grove I2C для использования с другими модулями.
Экран SD-карты V4
  • Эта защита SD-карты V4.0 обеспечивает место для хранения вашего Arduino.
  • Пользователи могут читать / записывать SD-карту через встроенную SD-библиотеку Arduino.Он поддерживает карты SD, SDHC и Micro SD и будет занимать только порт SPI вашего Arduino.
  • Вы можете сложить это на другие щиты, которые работают с неиспользуемыми контактами. Кроме того, есть готовые порты I2C и UART, облегчающие подключение к модулям Grove.

Сводка

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

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

903 903
UART I2C SPI
Сложность Простой
Легко
подключить множество устройств
.
Комплекс как устройство
увеличивается
Скорость Самая медленная
Быстрее
UART
Самый быстрый
Количество устройств Может до 2
устройств
, но получить сложный как устройства
увеличивается
1 ведущее и до 5 ведомых устройств,
Количество проводов 1 2 4
дуплекс полный дуплекс полудуплекс
Количество ведущих и ведомых устройств Нет нескольких ведомых и ведущих устройств Несколько
ведомых и ведущих устройств
Только 1 ведущее устройство, но может иметь несколько ведомых устройств.

Надеюсь, что теперь вы лучше понимаете различия между UART, I2C и SPI!

Следите за нами и ставьте лайки:

Теги: Преимущества и недостатки I2C, Преимущества и недостатки SPI, преимущества и недостатки UART, Arduino Nano I2C, Arduino Nano SPI, Arduino SPI, Arduino SPI Pins, пример Arduino UART, Arduino Uno SPI, Arduino UNO UART, I2C, I²C , I2C Arduino, SPI, uart, UART Arduino, UART SPI I2C

Продолжить чтение

Введение в интерфейс SPI | Analog Devices

Последовательный периферийный интерфейс (SPI) — один из наиболее широко используемых интерфейсов между микроконтроллером и периферийными ИС, такими как датчики, АЦП, ЦАП, регистры сдвига, SRAM и другие.В этой статье дается краткое описание интерфейса SPI, за которым следует введение в переключатели и мультиплексоры с поддержкой SPI компании Analog Devices, а также то, как они помогают уменьшить количество цифровых GPIO в конструкции системной платы.

SPI — это синхронный полнодуплексный интерфейс на основе ведущего и ведомого устройства. Данные от ведущего или ведомого синхронизируются по нарастающему или спадающему фронту тактового сигнала. И ведущий, и ведомый могут передавать данные одновременно. Интерфейс SPI может быть 3-проводным или 4-проводным. Эта статья посвящена популярному 4-проводному интерфейсу SPI.

Интерфейс

Рисунок 1. Конфигурация SPI с ведущим и ведомым.

4-проводные устройства SPI имеют четыре сигнала:

  • Часы (SPI CLK, SCLK)
  • Выбор микросхемы (CS)
  • Главный выход, подчиненный вход (MOSI)
  • Главный вход, подчиненный выход (MISO)

Устройство, генерирующее тактовый сигнал, называется мастером. Данные, передаваемые между ведущим и ведомым, синхронизируются с часами, генерируемыми ведущим.Устройства SPI поддерживают гораздо более высокие тактовые частоты по сравнению с интерфейсами I 2 C. Пользователи должны проконсультироваться с техническими данными продукта для получения спецификации тактовой частоты интерфейса SPI.

Интерфейсы

SPI могут иметь только одно ведущее устройство и одно или несколько ведомых устройств. На рисунке 1 показано SPI-соединение между ведущим и ведомым.

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

MOSI и MISO — линии данных. MOSI передает данные от ведущего к ведомому, а MISO передает данные от ведомого к ведущему.

Передача данных

Чтобы начать обмен данными по SPI, ведущее устройство должно отправить тактовый сигнал и выбрать ведомое устройство, включив сигнал CS. Обычно выбор микросхемы — это активный низкий сигнал; следовательно, ведущее устройство должно послать логический 0 на этом сигнале, чтобы выбрать ведомое устройство.SPI — это полнодуплексный интерфейс; и ведущий, и ведомый могут отправлять данные одновременно по линиям MOSI и MISO соответственно. Во время связи SPI данные одновременно передаются (последовательно передаются на шину MOSI / SDO) и принимаются (данные на шине (MISO / SDI) дискретизируются или считываются). Фронт последовательного тактового сигнала синхронизирует сдвиг и выборку данных. Интерфейс SPI предоставляет пользователю гибкость в выборе нарастающего или спадающего фронта тактового сигнала для выборки и / или сдвига данных.Пожалуйста, обратитесь к таблице данных устройства, чтобы определить количество битов данных, передаваемых через интерфейс SPI.

Полярность тактового сигнала и фаза тактового сигнала

В SPI мастер может выбрать полярность и фазу тактового сигнала. Бит CPOL устанавливает полярность тактового сигнала в состоянии ожидания. Состояние ожидания определяется как период, когда CS высокий и переходит в низкий уровень в начале передачи, а когда CS низкий и переходит в высокий уровень в конце передачи.Бит CPHA выбирает фазу тактовой частоты. В зависимости от бита CPHA нарастающий или спадающий фронт тактовой частоты используется для выборки и / или сдвига данных. Мастер должен выбрать полярность и фазу синхронизации в соответствии с требованиями подчиненного устройства. В зависимости от выбора битов CPOL и CPHA доступны четыре режима SPI. В таблице 1 показаны четыре режима SPI.

Таблица 1. Режимы SPI с CPOL и CPHA
Режим SPI CPOL CPHA Полярность часов в состоянии ожидания Фаза тактового сигнала, используемая для выборки и / или сдвига данных
0 0 0 Младшая логика Выборка данных по переднему фронту и смещение по заднему фронту
1 0 1 Младшая логика Выборка данных по заднему фронту и смещение по переднему фронту
2 1 1 Высокий логический уровень Выборка данных по заднему фронту и смещение по переднему фронту
3 1 0 Высокий логический уровень Выборка данных по переднему фронту и смещение по заднему фронту

На рис. 2–5 показан пример связи в четырех режимах SPI.В этих примерах данные отображаются в строке MOSI и MISO. Начало и конец передачи обозначены пунктирной зеленой линией, край выборки обозначен оранжевым цветом, а край сдвига обозначен синим цветом. Обратите внимание, что эти цифры приведены только для иллюстрации. Для успешной связи SPI пользователи должны обращаться к листу технических данных продукта и обеспечивать соблюдение временных характеристик детали.

Рис. 2. Режим SPI 0, CPOL = 0, CPHA = 0: состояние ожидания CLK = низкий уровень, данные отбираются по переднему фронту и смещаются по заднему фронту.

На рисунке 3 показана временная диаграмма для режима SPI 1. В этом режиме полярность тактового сигнала равна 0, что указывает на низкое состояние холостого хода тактового сигнала. Фаза синхросигнала в этом режиме равна 1, что указывает на то, что данные отбираются по заднему фронту (показанному оранжевой пунктирной линией), а данные сдвигаются по переднему фронту (показанному синей пунктирной линией) тактового сигнала.

Рис. 3. Режим SPI 1, CPOL = 0, CPHA = 1: состояние ожидания CLK = низкий уровень, данные отбираются по заднему фронту и смещаются по переднему фронту.

На рисунке 4 показана временная диаграмма для режима SPI 2. В этом режиме полярность тактового сигнала равна 1, что указывает на то, что состояние ожидания тактового сигнала высокое. Фаза синхросигнала в этом режиме равна 1, что указывает на то, что данные отбираются по заднему фронту (показанному оранжевой пунктирной линией), а данные сдвигаются по переднему фронту (показанному синей пунктирной линией) тактового сигнала.

Рис. 4. Режим SPI 2, CPOL = 1, CPHA = 1: состояние ожидания CLK = высокий, данные отбираются по заднему фронту и сдвигаются по переднему фронту.

На рисунке 5 показана временная диаграмма для режима SPI 3. В этом режиме полярность тактового сигнала равна 1, что указывает на то, что состояние ожидания тактового сигнала высокое. Фаза синхросигнала в этом режиме равна 0, что указывает на то, что данные отбираются по переднему фронту (показанному оранжевой пунктирной линией), а данные сдвигаются по заднему фронту (показанному синей пунктирной линией) тактового сигнала.

Рисунок 5. Режим SPI 3, CPOL = 1, CPHA = 0: состояние ожидания CLK = высокий, данные отбираются по переднему фронту и смещаются по заднему фронту.

Конфигурация с несколькими подчиненными устройствами

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

Обычный режим SPI:

Рисунок 6. Конфигурация Multislave SPI.

В обычном режиме от ведущего устройства требуется индивидуальный выбор микросхемы для каждого ведомого устройства. Как только сигнал выбора микросхемы активируется (понижается) мастером, часы и данные на линиях MOSI / MISO становятся доступными для выбранного ведомого.Если включены несколько сигналов выбора микросхемы, данные на линии MISO будут повреждены, так как ведущий не может определить, какое ведомое устройство передает данные.

Как видно из рисунка 6, по мере увеличения количества подчиненных увеличивается количество линий выбора микросхемы от мастера. Это может быстро увеличить количество входов и выходов, необходимых для ведущего устройства, и ограничить количество используемых ведомых устройств. Существуют различные методы, которые можно использовать для увеличения количества ведомых устройств в обычном режиме; например, использование мультиплексора для генерации сигнала выбора микросхемы.

Метод гирляндной цепи:

Рис. 7. Конфигурация гирляндного подключения с несколькими подчиненными устройствами SPI.

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

В этом методе, когда данные передаются от одного ведомого устройства к другому, количество тактов, необходимых для передачи данных, пропорционально положению ведомого устройства в гирляндной цепи.Например, на рис. 7 в 8-битной системе требуется 24 тактовых импульса для того, чтобы данные были доступны на ведомом устройстве 3 rd , по сравнению только с восемью тактовыми импульсами в обычном режиме SPI. На рисунке 8 показаны тактовые циклы и данные, передаваемые по гирляндной цепи. Режим последовательного подключения не обязательно поддерживается всеми устройствами SPI. Пожалуйста, обратитесь к паспорту продукта, чтобы подтвердить, доступна ли гирляндная цепь.

Рисунок 8. Конфигурация гирляндной цепи: распространение данных.

Коммутаторы и мультиплексоры с поддержкой SPI от Analog Devices

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

ADG1412 — это четырехполюсный однополюсный однопозиционный переключатель (SPST), для которого требуется четыре GPIO, подключенных к управляющему входу каждого переключателя. На рисунке 9 показано соединение между микроконтроллером и одним ADG1412.

Рисунок 9. Микроконтроллер GPIO как управляющие сигналы для коммутатора.

По мере увеличения количества переключателей на плате количество требуемых GPIO значительно увеличивается.Например, при проектировании системы контрольно-измерительной аппаратуры используется большое количество переключателей для увеличения количества каналов в системе. В конфигурации матрицы точек пересечения 4 × 4 используются четыре ADG1412. Для этой системы потребуется 16 GPIO, что ограничивает количество доступных GPIO в стандартном микроконтроллере. На рисунке 10 показано подключение четырех ADG1412 с использованием 16 GPIO микроконтроллера.

Рис. 10. В конфигурации с несколькими подчиненными устройствами количество необходимых GPIO значительно увеличивается.

Одним из подходов к сокращению количества GPIO является использование преобразователя из последовательного в параллельный, как показано на рисунке 11. Это устройство выводит параллельные сигналы, которые могут быть подключены к входам управления переключателем, и устройство может быть настроено с помощью последовательного интерфейса SPI. . Недостатком этого метода является увеличение стоимости материала за счет введения дополнительного компонента.

Рис. 11. Многопозиционные переключатели с преобразователем из последовательного в параллельный.

Альтернативный метод — использовать переключатели, управляемые SPI.Этот метод дает преимущество уменьшения количества требуемых GPIO, а также устраняет накладные расходы на дополнительный последовательно-параллельный преобразователь. Как показано на Рисунке 12, вместо 16 GPIOS микроконтроллера требуется всего семь GPIO микроконтроллера для передачи сигналов SPI на четыре ADGS1412.

Рисунок 12. Переключатели с поддержкой SPI сохраняют GPIO микроконтроллера.

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

Рисунок 13. Коммутаторы с поддержкой SPI, настроенные в гирляндную цепочку для дальнейшей оптимизации GPIO.

Рисунок 13 предназначен для иллюстрации. В технических данных ADGS1412 рекомендуется использовать подтягивающий резистор на выводе SDO. Пожалуйста, обратитесь к листу данных ADGS1412 для получения дополнительной информации о режиме последовательного подключения. Для простоты в этом примере использовались четыре переключателя. По мере увеличения количества переключателей в системе преимущества простоты платы и экономии места становятся значительными. Коммутаторы с поддержкой ADI SPI обеспечивают сокращение общего пространства на плате на 20% в конфигурации точки пересечения 4 × 8 с восемью четырехъядерными переключателями SPST на 6-слойной плате.В статье «Конфигурация точного переключателя SPI увеличивает плотность каналов» подробно рассказывается о том, как прецизионная конфигурация переключателя SPI увеличивает плотность каналов.

Analog Devices предлагает несколько коммутаторов и мультиплексоров с поддержкой SPI. Для получения дополнительной информации посетите здесь.


использованная литература

ADuCM3029, техническое описание. Analog Devices, Inc., март 2017 г.

Ньюджент, Стивен. «Прецизионная конфигурация переключателя SPI увеличивает плотность каналов.» Аналоговый диалог , май 2017 г.

Усач, Мигель. Примечание по применению AN-1248: Интерфейс SPI . Analog Devices, Inc., сентябрь 2015 г.

Совместное использование шины SPI с Ethernet, SD-картой, NRF24L01 и другими подчиненными устройствами

В настоящее время я работаю над проектом, использующим популярный модуль NRF24L01, где я столкнулся с вопросом, как избежать конфликтов новых проектов и существующих плат Arduino.
Проблема при использовании экрана Ethernet на основе W5100, включая адаптер SD-карты и модули NRF24L01 вместе с платой Arduino UNO, заключается в том, что все они используют одну и ту же шину SPI для передачи данных на чипы.Вот обзор того, как заставить их работать вместе.
Здесь ведущим всегда является одна и та же микросхема ATMEGA328 на плате Arduino, а 3 микросхемы являются ведомыми устройствами.

Концепция шины SPI

Краткое описание шины SPI можно найти в Википедии. См. Http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
Для работы шины SPI требуется 4 сигнала:
SCK или SCLK (последовательные часы) Тактовый сигнал, который устанавливает темп для любой передачи данных. Этот сигнал генерируется мастер-микросхемой.
На Arduino Uno этот сигнал доступен на выводе 13 и ICSP 3.
MISO (главный вход, подчиненный выход) Эта сигнальная линия передает данные от подчиненного устройства к главному чипу.
На Arduino Uno этот сигнал доступен на контакте 12 и ICSP 1.
MOSI (главный выход, подчиненный вход) Эта сигнальная линия передает данные от главного устройства к подчиненным устройствам.
На Arduino Uno этот сигнал доступен на выводе 11 и ICSP 4.
SS или CSN (выбор ведомого) Этот сигнал делает ведомое устройство активным, выбирая его с помощью низкого сигнала.
На Arduino Uno этот сигнал должен обсуждаться …
Примечание: сигнальные линии SCK, MOSI и MISO также доступны в заголовке ICSP, см. Ниже.
Сигнальные линии SCK, MOSI и MISO могут постоянно оставаться подключенными ко всем участвующим микросхемам. Однако сигнал выбора ведомого должен быть разным для каждого устройства.

Преимущества использования заголовка ICSP

Сигналы SPI на плате Arduino Mega недоступны на контактах 10, 11, 12 и 13, поскольку на этой плате используется другой процессор.Но поскольку программирование микросхемы ATMEGA через ICSP внутренне также использует интерфейс SPI, сигналы также доступны в заголовке ICSP. С Arduino Ethernet Shield Version 06 конструкция изменилась, так что сигналы SPI берутся не с контактов 11, 12 и 13, а с контактов ISP 4, 1 и 3. Однако, если вы используете Arduino UNO или 2009, эти контакты подключен на основной плате. При разработке новых экранов для плат Standard и MEGA с использованием SPI я рекомендовал использовать заголовок ICSP, как это делает Ethernet Shield.

Контакт 10

Контакт 10 Arduino, также обозначенный как SS, также известный как PB2 для ATMEGA328, используется ATMEL, чтобы указать, используется ли процессор в качестве ведущего или ведомого устройства SPI. Этот контакт 10 должен оставаться выходом, иначе оборудование SPI перейдет в «подчиненный» режим.
Можно использовать этот контакт 10, например, на Ethernet Shield, но если вы используете другие ведомые устройства SPI, имейте в виду, что не используйте этот контакт для ввода — лучше не используйте его, чтобы избежать конфликтов.

Использование нескольких подчиненных устройств шины SPI

При использовании нескольких подчиненных устройств на одной шине SPI принципиальных проблем с линиями SCK, MOSI и MISO нет.Поскольку каждому ведомому устройству нужен собственный сигнал выбора ведомого, возникают конфликты с использованием доступных выводов Arduino. Когда вы складываете несколько экранов ARDUINO на одной плате Arduino, у вас также могут быть конфликты с другими контактами, которые использует щит, поэтому вам придется позаботиться и о других конфликтах. Вот несколько распространенных способов использования контактов:

06
Arduino Shield Устройство Salve Arduino Pin
Версия Ethernet 01 W5100 chip Slave Select 10 10 W5100 Chip Slave Select 10
Версия Ethernet 06 SD-карта Slave Select 4

Использование радиомодуля NRF24L01

В разных примерах, где радиомодуль NRF24Lino использует Ardu01 вывод 9 для SS и использование вывода 8 для сигнала Chip Enable, но также 8 и 7 используются в тех же образцах.В настоящее время нет стандартного определения, поэтому вы должны указать библиотеке NRF24L01, какие сигналы использовать для выбора ведомого и включения микросхемы.
Я лично рекомендую использовать 7 для Chip Enable и 8 для Slave Select, потому что контакт 9 является одним из возможных выходных контактов PWM. При разработке новых щитов назначение этих выводов должно быть изменяемым любым способом, просто чтобы они были дружественными к другим щитам … и имели возможность улаживать конфликты.

Дополнительная литература:

Конструкция Arduino Ethernet Shield: http: // arduino.cc / en / Main / ArduinoEthernetShield

Использование SD-слота на EthernetShield с аппаратным SPI: http://playground.arduino.cc//Main/EthernetShieldSDHardwareSPIMod Общее руководство: http://tronixstuff.wordpress.com/ О NRF24L01 : http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01

Смешивание SPI и I2C

Смешивание SPI и I2C
Содержание Грэм Норт написал: « Есть такая вещь, как расширитель порта SPI? Я знаю, что есть такой I2C> устройство (параллельный порт I2C).Поскольку у меня заканчивается ввод / вывод и в конструкции используются> периферийные устройства SPI «

You может нормально смешивать I2C и SPI на одних и тех же контактах без проблемы.

Обычно вы можете смешивать I2C и SPI на одних и тех же выводах. Только I2C что-то делает между START и STOP.

START — это когда SCL находится в HI, SDA переходит в HI-> LO.

STOP — это когда SCL находится в HI, а SDA — в LO-> HI.

Итак, если вы разместите свой код так, что SDA изменяет только значение когда SCL — LO, проблем не будет. I2C не будет обратите внимание на любые транзакции SPI. Конечно, все устройства SPI имеют у них собственный индивидуальный вывод CS, но это недостаток SPI.

Итак, чтобы объяснить это.

  • Вы можете использовать устройства I2C на шине SPI. Просто подключите SCL в SCLK и SDA в SDIO.
  • Вы можете использовать устройства SPI на шине I2C, просто дайте каждому чип свой собственный сигнал CS.
  • Между START и STOP вы можете выполнять только транзакции I2C.
  • Битовая синхронизация будет установлена ​​шиной I2C даже при выполнении SPI, т.е. использовать 100 или 400 кГц
  • Напишите свои процедуры так, чтобы SCL и SDA не менялись при в то же время. Это также устраняет проблему SPI. устройства с повышением и понижением частоты
  • Устройства типа «SPI» обязательно должны иметь контакты входа и выхода общих данных.
  • Вы можете использовать одни и те же процедуры для обоих, если у вас короткие кодового пространства. Некоторым устройствам SPI потребуется размер не 8 бит переводы.
  • Устройства
  • I2C имеют на входе шумовые фильтры. Устройства SPI не надо. Имейте это в виду, если у вас длинные кабели.
  • Вам понадобится функция сброса, которая гарантирует все в правильном состоянии. В частности, некоторые Последовательным устройствам, не поддерживающим I2C, нужны часы, чтобы в определенное состояние.

MM5451 / 2/3: Драйвер немультиплексированного светодиода с 35 выходами и 12 В способные выходы. Это использует CLK & DATA, но не иметь штифт CS. Вместо этого он использует стартовый бит, как UART. Вы можете подключить CLK к SCL. Тогда вам нужно иметь отдельный контакт для DATA (вместо CS), или вы можете использовать Вывод CS, который соединяет ДАННЫЕ с SDA (например, через вентиль или 4053).Чтобы убедиться, что это устройство находится в известном состоянии, сбросить обычные часы LO в него 36 раз. I2C-2-ПК можно подключить один из них к Шину I2C, и напишите на нее с помощью команды «Y». Увидеть цифру Показать модули, которые их используют.
74HC4094: Регистр сдвига. Мой личный фаворит. Нет проблем
Счетчики:

74HC4040

Вы также можете использовать счетчики для специальных функций как драйверы светодиодов.Счетчик типа 4040 может использоваться для управлять 12 светодиодами с 16-выводным корпусом.

PIC занимает меньше чем 10 мс, чтобы синхронизировать счетчик до любого выходного значения. В кратковременное мигание светодиодов — не проблема. Я обычно использую один вывод и используйте R-C с постоянной времени 10 мкс, от вывода часов до линии сброса. Сначала я установил булавку высокий для 20us. 4040 сбрасывается. Затем низкий за 20 мкс, поэтому RC разряды. Затем часы с серией высотой 1 мкс пульс.Рабочий цикл сохраняется <1/4 во время тактирования, поэтому RC гарантирует, что никаких сбросов не будет. Тогда оставьте тактовая частота в режиме ожидания LO.

(Это трюк только для ИБП. Не выполняйте его через I2C-2-ПК).

Драйверы ЖК-дисплея На большинство драйверов без мультиплексирования ЖК-дисплеев можно подать в суд в качестве вывода порт. Просто установите вход задней панели (BP) в фиксированное состояние.

К началу
Вернуться к дому

продаж @ i2cchip.com
http://www.i2cchip.com
Телефон +64 21 623-402

К началу

Отправьте нам письмо сообщая нам, что вы думаете об этой странице и как мы можем Улучши это.

К началу

Полное руководство по расположению выводов Arduino Uno [включая диаграмму]

Руководство по расположению выводов Arduino Uno

В двух последних публикациях мы сосредоточились на программных аспектах Arduino.Мы увидели, что платы Arduino запрограммированы с использованием языка C и C ++ в интегрированной среде разработки Arduino (IDE), и узнали несколько основных методов отладки. В этом посте мы более подробно рассмотрим оборудование Arduino и, в частности, распиновку Arduino Uno. Arduino Uno основан на ATmega328 от Atmel. Распиновка Arduino Uno состоит из 14 цифровых контактов, 6 аналоговых входов, разъема питания, USB-соединения и разъема ICSP. Универсальность распиновки обеспечивает множество различных опций, таких как приводные двигатели, светодиоды, датчики считывания и многое другое.В этом посте мы рассмотрим возможности распиновки Arduino Uno.

Запустите свою схему Arduino

Распиновка Arduino Uno — Схема

«Распиновка платы ARDUINO и ATMega328PU» от pighixxx под лицензией Creative Commons Attribution-Share Alike 4.0 International

Распиновка Arduino Uno

Есть 3 способа питания Arduino Uno:

  • Разъем Barrel — Разъем Barrel или разъем питания постоянного тока можно использовать для питания платы Arduino.Домкрат для бочек обычно подключается к настенному адаптеру. Плата может питаться от 5-20 вольт, но производитель рекомендует поддерживать его в пределах 7-12 вольт. При напряжении выше 12 вольт регуляторы могут перегреться, а ниже 7 вольт может оказаться недостаточно.
  • Вывод VIN — Этот вывод используется для питания платы Arduino Uno от внешнего источника питания. Напряжение должно находиться в указанном выше диапазоне.
  • Кабель USB — при подключении к компьютеру выдает 5 вольт при 500 мА.

Между плюсом цилиндрического гнезда и выводом VIN имеется диод защиты полярности, рассчитанный на 1 ампер.

Источник питания, который вы используете, определяет мощность, доступную для вашей цепи. Например, питание схемы через USB ограничивает вас до 500 мА. Учтите, что он также используется для питания MCU, его периферийных устройств, встроенных регуляторов и компонентов, подключенных к нему. При питании вашей цепи через цилиндрический разъем или VIN максимальная доступная емкость определяется 5 и 3.Регуляторы на 3 вольта на плате Arduino.

Они обеспечивают регулируемое напряжение 5 и 3,3 В для питания внешних компонентов в соответствии со спецификациями производителя.

В распиновке Arduino Uno вы можете найти 5 контактов GND, которые все соединены между собой.

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

  • RESET — сбрасывает Arduino
  • IOREF — этот вывод является эталоном ввода / вывода. Она обеспечивает опорное напряжение, с которым микроконтроллер работает.

Распиновка Arduino Uno — аналоговый вход

Arduino Uno имеет 6 аналоговых контактов , которые используют АЦП (аналого-цифровой преобразователь).

Эти контакты служат аналоговыми входами, но могут также работать как цифровые входы или цифровые выходы.

Аналого-цифровое преобразование

ADC означает аналого-цифровой преобразователь.АЦП — это электронная схема, используемая для преобразования аналоговых сигналов в цифровые. Это цифровое представление аналоговых сигналов позволяет процессору (который является цифровым устройством) измерять аналоговый сигнал и использовать его в своей работе.

Контакты Arduino A0-A5 могут считывать аналоговые напряжения. В Arduino АЦП имеет 10-битное разрешение, что означает, что он может представлять аналоговое напряжение на 1024 цифровых уровнях. АЦП преобразует напряжение в биты, понятные микропроцессору.

Одним из распространенных примеров ADC является передача голоса по IP (VoIP).В каждом смартфоне есть микрофон, который преобразует звуковые волны (голос) в аналоговое напряжение. Он проходит через АЦП устройства, преобразуется в цифровые данные, которые передаются принимающей стороне через Интернет.

Распиновка Arduino Uno — цифровые выводы

Контакты 0-13 Arduino Uno служат в качестве цифровых выводов ввода / вывода.

Вывод 13 Arduino Uno подключен к встроенному светодиоду.

В Arduino Uno контакты 3,5,6,9,10,11 имеют возможность ШИМ.

Важно отметить, что:

● Каждый вывод может обеспечивать / принимать до 40 мА макс.Но рекомендуемый ток — 20 мА.

● Абсолютный максимальный ток, подаваемый (или опускающийся) со всех контактов вместе, составляет 200 мА

Что означает цифра?

Цифровой — это способ представления напряжения в 1 бите: либо 0, либо 1. Цифровые контакты на Arduino — это контакты, предназначенные для настройки в качестве входов или выходов в соответствии с потребностями пользователя. Цифровые контакты либо включены, либо выключены. Когда они включены, они находятся в состоянии ВЫСОКОГО напряжения 5 В, а когда выключены, они находятся в состоянии НИЗКОГО напряжения 0 В.

На Arduino, когда цифровые выводы настроены как выход , они установлены на 0 или 5 вольт.

Когда цифровые выводы настроены как вход , то напряжение подается от внешнего устройства. Это напряжение может варьироваться от 0 до 5 вольт, которое преобразуется в цифровое представление (0 или 1). Для определения этого существует 2 порога:

● Ниже 0,8 В — считается за 0.

● Выше 2 В — считается за 1.

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

Что такое ШИМ?

В общем, широтно-импульсная модуляция (ШИМ) — это метод модуляции, используемый для кодирования сообщения в импульсный сигнал. ШИМ состоит из двух ключевых компонентов: частота и рабочий цикл . Частота ШИМ определяет, сколько времени требуется для завершения одного цикла (периода) и как быстро сигнал колеблется от высокого к низкому. Рабочий цикл определяет, как долго сигнал остается высоким из общего периода.Рабочий цикл представлен в процентах.

В Arduino контакты с включенным ШИМ генерируют постоянную частоту ~ 500 Гц, а рабочий цикл изменяется в соответствии с параметрами, установленными пользователем. См. Следующую иллюстрацию:

ШИМ-сигналы используются для управления скоростью двигателей постоянного тока, затемнения светодиодов и т. Д.

Протоколы связи

Последовательный (TTL) — Цифровые выводы 0 и 1 являются последовательными выводами Arduino Uno.

Используются встроенным USB-модулем.

Что такое последовательная связь?

Последовательная связь используется для обмена данными между платой Arduino и другим последовательным устройством, таким как компьютеры, дисплеи, датчики и т. Д. Каждая плата Arduino имеет как минимум один последовательный порт. Последовательная связь происходит на цифровых выводах 0 (RX) и 1 (TX), а также через USB. Arduino также поддерживает последовательную связь через цифровые контакты с SoftwareSerial Library. Это позволяет пользователю подключать несколько последовательных устройств и оставлять основной последовательный порт доступным для USB.

Программный последовательный и аппаратный последовательный — Большинство микроконтроллеров имеют оборудование, предназначенное для связи с другими последовательными устройствами. Программные последовательные порты используют систему прерывания смены контактов для связи. Имеется встроенная библиотека для последовательной связи программного обеспечения. Программный последовательный порт используется процессором для имитации дополнительных последовательных портов. Единственный недостаток программного последовательного порта состоит в том, что он требует большей обработки и не может поддерживать такие же высокие скорости, как аппаратный последовательный порт.

SPI — Контакты SS / SCK / MISO / MOSI — это выделенные контакты для связи SPI.Их можно найти на цифровых контактах 10-13 Arduino Uno и на заголовках ICSP.

Что такое SPI?

Последовательный периферийный интерфейс (SPI) — это протокол последовательной передачи данных, используемый микроконтроллерами для связи с одним или несколькими внешними устройствами в шине, подобной соединению. SPI также можно использовать для подключения 2 микроконтроллеров. На шине SPI всегда есть одно устройство, которое обозначается как Master, а все остальные как Slave. В большинстве случаев главным устройством является микроконтроллер.Вывод SS (выбор ведомого) определяет, с каким устройством ведущий в настоящее время обменивается данными.

Устройства с поддержкой SPI всегда имеют следующие контакты:

  • MISO (Master In Slave Out) — линия для отправки данных на главное устройство
  • MOSI (Master Out Slave In) — главная линия для отправки данных на периферийные устройства
  • SCK (Serial Clock) — тактовый сигнал, генерируемый ведущим устройством для синхронизации передачи данных.

I2C — Контакты SCL / SDA — это выделенные контакты для связи I2C.На Arduino Uno они находятся на аналоговых выводах A4 и A5.

Что такое I2C?

I2C — это протокол связи, обычно называемый «шиной I2C». Протокол I2C был разработан для обеспечения связи между компонентами на одной печатной плате. С I2C есть 2 провода, называемые SCL и SDA.

  • SCL — это линия синхронизации, которая предназначена для синхронизации передачи данных.
  • SDA — линия, используемая для передачи данных.

Каждое устройство на шине I2C имеет уникальный адрес, к одной шине можно подключить до 255 устройств.

Ареф — Опорное напряжение для аналоговых входов.

Прерывание — INT0 и INT1. Arduino Uno имеет два внешних контакта прерывания.

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

Arduino имеет две формы прерывания:

На ATmega168 / 328 есть два внешних вывода прерывания, которые называются INT0 и INT1. как INT0, так и INT1 отображаются на выводы 2 и 3. Напротив, прерывания смены вывода могут быть активированы на любом из выводов.

Распиновка Arduino Uno — заголовок ICSP

ICSP означает внутрисхемное последовательное программирование. Название произошло от заголовков внутрисистемного программирования (ISP). Такие производители, как Atmel, которые работают с Arduino, разработали свои собственные заголовки для последовательного программирования внутри схемы.Эти контакты позволяют пользователю программировать прошивку плат Arduino. На плате Arduino имеется шесть контактов ICSP, которые можно подключить к программатору с помощью кабеля для программирования.

Знайте свою распиновку

Микроконтроллер Arduino Uno — одна из самых универсальных плат на рынке сегодня, поэтому мы решили сосредоточиться на ней в этом руководстве. Это руководство отображает большинство его возможностей, но есть и более продвинутые параметры, которые мы не рассматривали в этом посте.

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

Запустите свою схему Arduino

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

= D

SPI Basics — Rheingold Heavy

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

Цели

  1. Разберитесь, что означает SPI.
  2. Узнайте, как подключены компоненты на шине SPI.
  3. Понять, почему подтягивающие резисторы не нужны.
  4. Определите четыре сигнальные линии в системе SPI.
  5. Определите, как компоненты SPI выбираются для связи.

Предпосылки
Это первый модуль, описывающий SPI, следовательно, чтение предыдущих разделов будет полезно для менее опытных, но не обязательно существенно.Вот несколько дополнительных ресурсов для тех, кто заинтересован в получении более подробной технической информации…


Схема
С этим модулем не связана никакая схема.


Установка
Этот модуль посвящен теории SPI, поэтому на данном этапе не требуется никакого оборудования.


Основы SPI: Истоки

SPI (последовательный периферийный интерфейс) был разработан Motorola. Он был представлен в 1985 году для использования с микроконтроллером M68HC11.Arduino имеет внутреннюю подсистему, предназначенную для управления взаимодействиями SPI, и четыре контакта, предназначенные для этой функции, хотя вы, скорее всего, будете использовать только три из них по большей части. Название «SPI» обычно произносится отдельными буквами «S. П. И. », или как аббревиатура, произносимая как« шпион ». (Мой мозг по своему желанию переключается между ними, поэтому я заранее прошу прощения за предложения, которые гласят: «… на шине SPI может существовать множество устройств, однако мы хотим иметь шину SPI, которая…»)

Стандарт SPI, как таковой, намного более свободный, чем стандарт для I2C, и производители могут разрабатывать свои схемы передачи сигналов, используя широкий спектр скоростей и методов запуска.Доступ к системе SPI осуществляется с помощью библиотеки SPI, и она способна работать на семи различных скоростях, от 62,5 кГц до 8 МГц.

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

SPI имеет дополнительное преимущество, заключающееся в наличии отдельных линий данных для каждого направления связи, что обеспечивает одновременную двунаправленную передачу данных между главным и вторичным компонентами.


Основы SPI: Сведения об оборудовании

SCK, MISO, MOSI, SS
Каждая реализация SPI будет включать как минимум три сигнальные линии: линию синхронизации под названием SCK, линию Master In / Slave Out под названием MISO (Me-So) и Master Out / Slave In линия называется MOSI (Moh-See). В дополнение к этим трем линиям у вас обычно будет линия выбора ведомого, SS, которая определяет, какой чип контролируется в любой конкретный момент времени. Эта линия также может называться «Chip Select» и всегда имеет низкий активный уровень.Линия SS на Arduino является линией выбора ведомого устройства для ATmega328P, и будет использоваться, если Arduino действует как ведомое устройство на шине SPI, однако библиотека SPI не поддерживает эту активность.

Базовая архитектура SPI

Обычно три основных контакта системы SPI, SCK, MISO и MOSI, подключаются по шине, каждый из которых в какой-то момент подключается к линии. Однако в редких случаях микросхемы могут быть последовательно соединены вместе с выводом MISO одной микросхемы, подключенным к выводу MOSI следующей микросхемы по порядку, с подключенной шиной SCK и CS.Таким образом, все устройства SPI активируются одновременно с понижением CS, и данные передаются через систему от одного чипа к другому. Эта архитектура не рассматривается в этих модулях, но дополнительную информацию об этой конфигурации можно найти в этом примечании к приложению Maxim: Daisy Chaining SPI Devices.

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

Push / Pull по сравнению с открытым стоком
В целом, в реализации SPI нет необходимости в подтягивающих резисторах, потому что выводы используют двухтактную конфигурацию, а не открытый сток. Выходные контакты могут активно создавать свои собственные логические высокие и низкие состояния, а не полагаться на подтягивающие резисторы для создания состояния по умолчанию.На схеме ниже представлена ​​классическая двухтактная конфигурация с использованием транзисторов, однако теперь она неизменно реализуется с помощью технологии CMOS.

SPI PushPull Выход

Существуют уникальные случаи, когда требуются подтягивающие резисторы, чтобы обеспечить заданное состояние одной из шин. Например, устройства чтения SD-карт обычно начинаются как устройства I2C при включении питания, а затем настраиваются во время инициализации чипа для связи через SPI. Если системы I2C и SPI совместно используют тактовую частоту и шину данных, то R PU станет необходимым компонентом в этой конструкции.Как и во всем, что касается электроники, внимательное чтение таблицы данных поможет вам.

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


Основы SPI: подробности сигнализации

Сигнализация в реализации SPI по существу очень проста, однако из-за отсутствия установленного стандарта сигнализации существуют различные «Режимы SPI», которые может потребоваться в системе.Эти режимы определяют полярность тактового сигнала и границы, по которым данные отправляются и принимаются. Более подробно это будет рассмотрено в следующем модуле.

По сути, ведущее устройство укажет, с каким компонентом оно хочет работать, потянув эту микросхему на соответствующий вывод Chip Select в низкий уровень. CS всегда активен на низком уровне.

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

Секции MISO и MOSI микросхемы действуют как регистры сдвига, синхронизируя данные на входе или выходе при получении сигнала SCK, и одна из основных функций SPI заключается в том, что они могут делать это одновременно.Это будет продолжаться, пока CS находится на низком уровне и часы остаются активными.

Данные

SPI могут быть отправлены сначала либо LSB, либо MSB, и эта информация содержится в таблице данных для компонентов, которые вы будете использовать.

Arduino Uno Pins — Полное практическое руководство

Плата Arduino Uno имеет более 20 контактов, которые можно использовать для множества различных приложений. В этом посте я дам вам полный и практический обзор основных выводов Arduino Uno.

Если вы начинаете с Arduino или уже являетесь разработчиком программного обеспечения и хотите узнать больше о мосте между программным и аппаратным обеспечением на плате Arduino, то вы попали в нужное место!

В этом посте вы увидите:

  • Какие контакты можно использовать
  • Что с ними можно делать
  • И несколько советов о том, как подключить другие устройства к вашим контактам Arduino

Я также дам вам несколько примеров датчиков / исполнительных механизмов, которые можно использовать с каждой функцией вывода.

Этот пост посвящен плате Arduino Uno, но большинство объяснений (за исключением номеров контактов на печатной плате) также действительны для любой другой платы Arduino.

Схема контактов Arduino Uno

Вот общее визуальное описание всех контактов, которые вы можете найти на плате Arduino Uno.


Вы изучаете программирование на Arduino?

Ознакомьтесь с Программирование Arduino для начинающих и изучите его шаг за шагом.


Поначалу это может показаться вам довольно трудным для понимания. Итак, давайте разберем каждый вид булавки, одну за другой.

Штифты заземления

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

Заземление необходимо для платы Arduino для измерения и установки любого напряжения.По сути, напряжение — это разность потенциалов между двумя точками: здесь вы берете землю и другую точку.

Итак, если все в вашей цепи подключено к одной и той же земле, все напряжения можно сравнить, и их значение будет релевантным. Если у вас нет точек соприкосновения, что тогда означает 3,3 В? Превышает ли измеренное вами значение 5 В в другой точке вашей цепи?

Это похоже на измерение разницы в росте двух человек: если один из них стоит на ящике, то ориентир на землю не совпадает.И вы не сможете получить ценное измерение, если не поместите двух человек на один уровень.

Что ж, не буду вдаваться в подробности, но вы понимаете суть.

Контакты питания Arduino

Питание идет 2 стороны:

  • Вы должны запитать плату Arduino Uno от внешнего источника
  • Вы также можете запитать некоторые компоненты, подключенные к вашей плате

Питание платы Arduino Uno

Для питания платы Arduino Uno у вас есть разные варианты.Первый — просто подключить плату Arduino к компьютеру с помощью USB-кабеля — обычно вы получаете его при заказе платы Arduino.

Вы также можете использовать разъем питания постоянного тока для питания платы Arduino напряжением 7–12 В. Если вы используете серводвигатели для хобби, питаемые от Arduino, вы можете использовать разъем питания постоянного тока. Мощность от USB-кабеля ниже. Он отлично подходит для связи между вашей платой и вашим компьютером (или другими платами Arduino), но может быть недостаточным для питания некоторых реальных двигателей.

Итак, у вас уже есть 2 способа питания вашей платы Arduino Uno. Теперь, если вы посмотрите на выводы питания на схеме, вы увидите вывод Vin.

Вы можете использовать этот вывод для подачи на плату напряжения 7–12 В. Очень практично, когда вам нужно использовать внешний источник питания и подключить его напрямую к плате. И, как вы можете догадаться, если вы используете Vin, вам также нужно правильно использовать заземление, подключив его к земле внешнего источника питания.

Обратите внимание, что в разъемы питания USB и постоянного тока уже встроено заземление, которое подключается ко всему, что вы к ним подключаете.Фактически, металлическая часть, которой вы можете коснуться вокруг USB-разъема, напрямую связана с землей!

Питание компонентов от контактов питания Arduino Uno

Как вы могли догадаться, всякий раз, когда вы подключаете внешний компонент к плате Arduino Uno, вам нужно сначала подключить его к земле.

Затем вы можете использовать несколько разных контактов для включения. Среди них выводы питания 3,3 В и 5 В.

Примечание — это важно — что Arduino Uno работает под 5V .Поэтому обязательно запомните каждый вывод, который мы увидим в этой публикации. Если вы подключите компонент 3,3 В к источнику питания 5 В, вы можете повредить компонент.

Этому есть 2 альтернативы: использовать источник питания 3,3 В от Arduino (интегрированный мост напряжения) или использовать 5 В с переключателем уровня напряжения. Вы можете легко подключить 3,3 В к компоненту 5 В при условии, что вы преобразуете напряжение между ними, используя резисторы или непосредственно компонент сдвига уровня.

Цифровые контакты Arduino

На плате Arduino Uno можно найти 14 цифровых выводов.Они легко узнаваемы, от 0 до 13 на плате.

Чтение / запись на цифровых выводах

Вы будете использовать цифровые выводы для чтения данных с некоторых компонентов (датчиков) и записи данных в другие компоненты (исполнительные механизмы).

Цифровой вывод может иметь только 2 состояния: НИЗКИЙ или ВЫСОКИЙ. Вы можете рассматривать их как двоичные контакты.

LOW означает, что напряжение на выводе равно 0 В. HIGH означает Vcc, который для Arduino Uno составляет 5 В.

Прежде чем вы сможете использовать цифровой вывод, вам необходимо настроить его режим.Цифровой вывод может находиться либо в режиме ВХОДА, либо в режиме ВЫХОДА. В режиме INPUT вы будете использовать его для чтения данных. В режиме ВЫВОДА вы будете использовать его для записи данных.

После того, как вы установили режим для вывода — обычно в функции setup () вашей программы Arduino с помощью pinMode () — вы сможете читать / записывать состояние вывода с помощью digitalRead () / digitalWrite () .

Если вы установили контакт в режим INPUT, вы можете прочитать его состояние, которое будет либо HIGH, либо LOW.

При чтении любое напряжение, приложенное к выводу, ниже 0.8 В будет считаться НИЗКИМ, а любое напряжение выше 2 В будет считаться ВЫСОКИМ. Таким образом, я еще раз подчеркиваю, что вы должны правильно соединить все заземления в вашей цепи вместе, иначе Arduino Uno не сможет прочитать ценную информацию! Если вы не получаете надежных и стабильных данных, всегда сначала проверяйте землю, очень вероятно, что проблема исходит именно оттуда.

Если вы хотите перейти на более продвинутый уровень цифровых контактов, узнайте, как сделать digitalWrite () быстрее.

ШИМ

Некоторые цифровые выводы могут использоваться для записи ШИМ.

ШИМ (широтно-импульсная модуляция) — это, по сути, способ получения определенного напряжения (например, 4,1 В) только с состояниями ВЫСОКИЙ / НИЗКИЙ (5 В / 0 В). ШИМ создает импульс, работающий с заданной частотой — 500 Гц для Arduino Uno. Затем параметр рабочего цикла покажет, какой процент каждого импульса находится в состоянии ВЫСОКИЙ или НИЗКИЙ.

Частая смена состояний HIGH / LOW дает среднее выходное напряжение. Например, при рабочем цикле 50% (50% времени HIGH, 50% времени LOW) выходное напряжение будет равно 2.5В.

Конечно, это объяснение действительно упрощено, но это все, что вам нужно знать, чтобы начать работу с Arduino PWM.

Теперь вы можете использовать ШИМ только на некоторых цифровых выводах, у которых есть «~» рядом с их номером. Контакты Arduino Uno, совместимые с PWM, — это контакты 3, 5, 6, 9, 10 и 11. Итак, у вас есть 6 контактов, на которых вы можете создать PWM, используя функцию analogWrite ().

Это может быть очень полезно для управления некоторыми исполнительными механизмами, которые требуют точной настройки напряжения и не только включаются или выключаются.

Если мы возьмем пример светодиода, вы можете использовать функцию analogWrite () для изменения яркости светодиода.

Контакты прерывания

И… Для цифровых выводов доступен еще один функционал! Вы можете использовать некоторые из них в качестве контактов прерывания в вашей программе Arduino.

Для Arduino Uno выбор этих контактов весьма ограничен. Только цифровые контакты 2 и 3 могут использоваться в качестве контактов прерывания.

Итак, как это работает?

Когда вы создаете программу Arduino, вы должны знать, что ваш код выполняется построчно, без возможности многопоточности.

Допустим, вы подключаете кнопку к контакту прерывания (и к земле!). В программе Arduino вы можете добавить определенную функцию, которая будет запускаться при каждом нажатии кнопки. Таким образом, вместо того, чтобы постоянно считывать состояние кнопки, вы можете напрямую использовать поведение прерывания для запуска вашей функции. Думайте об этом как о push-уведомлении, как на вашем телефоне. Он сообщает вам, когда есть новый контент или конкретное действие, которое нужно выполнить. Узнайте, как использовать прерывания Arduino в своем коде.

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

Если вы хотите узнать больше о том, как работать в многозадачном режиме с Arduino, ознакомьтесь с полным руководством по этой теме.

Аналоговые выводы Arduino

На плате Arduino Uno можно найти 6 аналоговых контактов.Вы найдете их рядом с контактами питания, и они легко узнаваемы, от A0 до A5.

Считать значение с аналогового вывода

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

Обратите внимание, что аналоговые функции на этих контактах предназначены только для чтения.Обычно их даже называют « Аналоговые входные контакты ». Вы не можете записать аналоговое значение через эти контакты, не забывайте об этом!

Итак, как работает вывод аналогового входа?

Сначала он получает входное напряжение и считывает это напряжение. Допустим, на контакте указано 2,5 В. Затем АЦП (аналогово-цифровой преобразователь) изменит это аналоговое значение на то, что ваша программа Arduino сможет понять — цифровое значение.

Плата Arduino Uno имеет 10-битный АЦП.10 = 1024. Таким образом, значение, которое вы получаете при чтении данных с аналогового входа, находится в диапазоне от 0 до 1024.

Возвращаясь к нашему примеру с 2,5 В: 2,5 В составляет 50% от 5 В (Vcc). Тогда в вашей программе Arduino вы получите значение 512. Из этого значения вы можете легко изменить вычисление и получить информацию о приложенном напряжении.

Также — и поначалу это может сбивать с толку — помните, что функция analogWrite () для ШИМ доступна только для некоторых цифровых выводов, а не для аналоговых выводов вообще.

Использование аналогового вывода в качестве цифрового вывода

Даже если вы можете читать только с аналогового вывода, вы также можете использовать его как «простой» цифровой вывод. (но обратное неверно)

Если вывод может считывать любое значение от 0 до 5 В, то он сможет считывать только значения ниже 0,8 В (НИЗКИЙ) и значения выше 2 В (ВЫСОКИЙ).

Чтобы использовать аналоговый вывод в качестве цифрового вывода, вам просто нужно установить режим вывода, как вы бы сделали для цифровых выводов в функции setup () вашей программы Arduino.Затем вы можете использовать функции digitalWrite () и digitalRead (), и они будут работать отлично.

Протоколы связи через контакты Arduino

Здесь начинается самое интересное. Протоколы связи через контакты Arduino Uno позволят вам использовать более совершенные датчики и исполнительные механизмы. Вы будете создавать более сложные и полезные приложения.

Существует 3 основных протокола связи, которые вы можете использовать с платой Arduino Uno через контакты схемы: UART, I2C и SPI.

Но… На схеме ничего не отображается!

Не паникуйте, протоколы связи используют существующие контакты в цепи.

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

Контакты для UART — серийный

UART — наиболее часто используемый протокол для Arduino — по крайней мере, когда вы начинаете.

Когда вы подключаете плату Arduino Uno к компьютеру и общаетесь через последовательную библиотеку, что ж … Вы используете UART!

Вы также можете найти 2 необходимых контакта для UART непосредственно на плате Arduino Uno, на контактах 0 и 1: RX и TX.R означает «прием», а T — «передача». Это двунаправленная связь.

Обратите внимание, что последовательный порт, используемый USB, такой же, как тот, который используется с контактами 0 и 1. Поэтому, если вы хотите подключить другое устройство к контактам RX / TX на вашей плате, не забудьте использовать последовательный порт через USB.

В некоторых других платах Arduino, таких как Mega, есть несколько различных доступных UART. Но для Arduino Uno у вас есть только один.

Однако, если вы хотите использовать больше UART, вы всегда можете сделать это с помощью библиотеки SoftwareSerial.Эта библиотека позволяет вам использовать любые другие цифровые выводы для UART. Хотя здесь есть большая разница: «истинный» последовательный интерфейс использует аппаратную функциональность платы Arduino Uno, которая работает очень быстро и не потребляет много вычислительной мощности. SoftwareSerial наоборот: он компенсирует аппаратное обеспечение вычислительной мощностью. Итак, сначала начните со стандартного аппаратного UART, а затем вы увидите, нужно ли вам больше последовательных портов для вашего приложения (в этом случае я рекомендую вам переключиться на Arduino Mega, чтобы получить много аппаратных UART).

Для подключения компонента к контактам Arduino Uno и использования последовательной связи вам понадобится 4 кабеля:

  • Один между RX компонента и TX Arduino
  • Один между TX компонента и RX Arduino
  • Если на компонент не подается внешнее питание, один кабель для его питания от контактов питания Arduino
  • А… Один для подключения земли

Если вы заинтересованы в обмене данными между платой Raspberry Pi и платой Arduino через последовательный порт, ознакомьтесь с этим учебным курсом Raspberry Pi Arduino Serial.

Контакты для I2C

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

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

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

Обычно вы используете свою плату Arduino Uno в качестве ведущего устройства и подключаете один или несколько компонентов (обычно датчиков) к шине I2C, каждый со своим идентификатором. Что касается программного обеспечения, вы будете использовать библиотеку Arduino Wire с открытым исходным кодом.

Но к каким выводам Arduino Uno следует подключать все эти компоненты?

Для I2C вы не можете видеть никаких индикаций непосредственно на печатной плате.

Для использования шины I2C потребуется 4 кабеля:

  • Один для подключения пина SCL (часы)
  • Еще один для пина SDA (данные)
  • Один для включения компонентов на шине
  • И один, чтобы найти общий язык

Некоторые примеры компонентов, совместимых с I2C:

  • Датчик температуры MPL3115A2
  • MPU6050 гироскоп + датчик акселерометра
  • Датчик цвета TCS34725

Контакты для SPI

SPI — еще один протокол, основанный на архитектуре ведущий-ведомый.

Вы можете использовать его для подключения платы Arduino к нескольким устройствам. Обратите внимание, что скорость связи выше, чем для I2C и UART, но она не подходит для связи на средних и больших расстояниях (более нескольких сантиметров для кабеля). Что касается других протоколов связи, вы можете напрямую использовать библиотеку SPI с открытым исходным кодом в своих программах Arduino.

Если вы используете устройство SPI и хотите подключить его к некоторым контактам на плате Arduino, вам необходимо использовать следующие контакты:

Система кабелей для подключения устройств с выводами SPI немного сложнее.Вам понадобится минимум 6 кабелей:

  • Контакт SCK (часы)
  • Вывод MISO (Master In, Slave Out)
  • Вывод MOSI (Master Out, Slave In)
  • Один для каждого CS / SS (Chip Select / Slave Select). Для каждого дополнительного ведомого устройства вам нужно будет добавить еще одно соединение к выводу Arduino.
  • Один для питания компонентов
  • И один для общей земли

Некоторые примеры SPI-совместимых устройств:

  • AS5047D Магнитный датчик положения
  • MAX31855 Термопара-цифровой датчик

Начать работу с выводами Arduino Uno

Как вы видели в этом посте, у вас есть огромное количество вариантов использования выводов Arduino Uno.

Если вы только начинаете работать с Arduino, попробуйте сначала использовать базовые цифровые и аналоговые функции.

Затем вы можете продолжить работу с прерываниями, выходами ШИМ и т. Д.

И, наконец, есть бесконечное количество датчиков / исполнительных механизмов, которые вы можете подключить к своей плате Arduino Uno, чтобы создать свой следующий проект!

Вы также можете соединить несколько плат Arduino вместе или даже плату Raspberry Pi.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *