Почему номера выводов диаграмм и кода отличаются друг от друга?

Если я поищу в Google "номера выводов arduino nano", все результаты покажут, что номер вывода D2 равен 5. Но это не сработало. Я поискал несколько примеров кодов, и они были 3 для D3 и 5 для D5 и т. Д. Итак, в кодах вывод для Dn равен n. Тогда каковы же числа на этих диаграммах?

, 👍11

Обсуждение

вы имеете в виду физические контакты модуля? ... они начинаются с 1 и оборачиваются вокруг, @jsotola


3 ответа


9

В каждой таблице данных микросхем (а также плат Arduino) используются 2 различных способа обозначения выводов:

  • Подсчет физических контактов в том порядке, в каком они указаны на выбранной упаковке чипа
  • Ссылка на контакты по их функции

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

Для ссылки на контакты внутри контроллера (он же в коде) мы используем функцию контактов. На Arduino у вас есть в основном цифровые и аналоговые контакты, которыми можно управлять. Поэтому для удобства новичков (на которых ориентирована платформа Arduino) цифровые и аналоговые контакты просто пронумерованы. Это цифры, которые обычно записываются только на плате Arduino. Таким образом, D2 означает третий цифровой вывод внутри платформы Arduino. A0-это первый аналоговый вывод. То, где этот pin физически расположен на плате, не представляет интереса для кода, и код не знает фактического местоположения. Для кода это всего лишь третье оборудование для цифрового вывода и так далее.

TL;DR: Для построения схемы мы должны указать положения выводов (например, где находится Vcc, где заземление), чтобы правильно подключить чип/микроконтроллер. Но внутренний код не знает, где находятся физические контакты, и фактическое местоположение также может зависеть от упаковки. Поэтому внутри мы используем другую систему подсчета, основанную на функции вывода. Способ подсчета цифровых и аналоговых контактов в Arduino просто скрывает сложность для новичка. В качестве справки цифры также напечатаны на самой плате Arduino.


На случай, если вы захотите заглянуть поглубже в кроличью нору:

На самом деле микроконтроллер имеет различное аппаратное обеспечение для различных встроенных функций. Например: Аналоговые контакты могут использоваться АЦП (аналого-цифровой преобразователь) для измерения аналогового напряжения. Но у каждого из них также есть цифровое оборудование для ввода и вывода, как и у любого другого цифрового вывода. Большинство выводов микроконтроллера являются многоцелевыми. Код должен решить, какое оборудование должно быть подключено к соответствующим контактам. Когда я использую pinMode(2, ВЫХОД), я говорю микроконтроллеру подключить третье оборудование цифрового выхода к соответствующему физическому контакту. Когда я использую analogRead(A1), я говорю ему подключить второй аналоговый канал АЦП к соответствующему контакту и считывать аналоговое напряжение через АЦП.

Это означает, что код знает только аппаратное обеспечение функции и что оно может быть подключено к соответствующим контактам (независимо от того, какие эти контакты находятся во внешнем мире). Нумерация цифровых и аналоговых выводов-это всего лишь дополнительный уровень абстракции, чтобы скрыть сложность от новичков. На самом деле код управляет аппаратными функциями с помощью специальных регистров функций (SFR). Это специальные части памяти, которые физически подключены к соответствующему оборудованию в микроконтроллере. Для оборудования цифрового вывода контакты сортируются по группам до 8 контактов. Эти группы называются портами и пронумерованы символами. Когда вы смотрите на этот вывод Arduino Nano, вы видите, что вывод Arduino D2 также называется PD2, что означает третий вывод порта (считая с нуля). Вывод Arduino D8 также называется PB0, поэтому первый вывод PortB. Такие функции, как pinMode (), digitalWrite() и digitalRead (), просто манипулируют SFR для нужного порта, чтобы установить соответствующий контакт. Обратитесь к Документации по манипулированию портами, чтобы узнать, как это сделать самостоятельно. Для начинающих просто проще использовать маркировку на плате - контактный номер Arduino - вместо того, чтобы напрямую связываться с портами и их SFR.

,

Может быть, было бы яснее сказать все четыре уровня в начале: 1) Номер вывода платы прорыва, которые здесь пронумерованы 1-30 2) Имя Arduino для вывода, например D3 3) Имя таблицы микроконтроллера для вывода, например PA4 4) Номер вывода пакета микроконтроллера, @jpa

Дополнительная абстракция предназначена не только для того, чтобы облегчить жизнь новичкам. Как отмечает @RedGrittyBrick в своем ответе, это делает код более переносимым. В меньшей степени это также делает код более читабельным, хотя некоторые могут с этим не согласиться. А если вы используете одну из коммерческих плат, где контакты помечены этикетками Arduino, то, конечно, проще подсоединить провода к нужному контакту., @Llaves


1

Почему выводы диаграмм и кода отличаются друг от друга?

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

,

6

Существует по крайней мере четыре способа ссылки на контакты на любой плате Arduino:

  1. Порядок расположения платы: Простой числовой порядок (1,2,3 ...) физического расположения контактов на печатной плате против часовой стрелки от конца USB (или какого-либо произвольного конца)
  2. Arduino-имя: Имена, используемые в исходном коде Arduino и/или аннотации на шелкографии печатной платы (D1,D2 ... A0,A1 ...).
  3. IC-порядок: Простой числовой порядок соответствующего вывода на IC в соответствии с нумерацией, используемой в паспорте производителя.
  4. Имя функции IC: Имена функций, доступных на выводе (СБРОС, VCC, INT0,PB0,PB1, PB2...), как описано в спецификации IC.

Например:

Контакт печатной платы Nano# Имя Arduino Pin ATmega328 TQFP# Контакт ПОГРУЖЕНИЯ ATmega328# Функция ATmega328
1 D13 17 19 PB5, SCK, PCINT5
2 3В3 N/A N/A N/A
3 ссылка 20 21 АРЕФ
4 A0 23 23 PC0, ADC0, PCINT8
5 A1 24 24 PC1, ADC1, PCINT9
и т.д.

Существует множество различных плат Arduino и подобных Arduino, Которые используют ATmega328, некоторые используют различные пакеты ATmega328 (DIP, TQFP и т. Д.) С различным расположением выводов. Многие по-разному размещают физические контакты печатной платы. Вот почему не существует фиксированной связи "один к одному", и отчасти поэтому среда разработки Arduino предоставляет свои собственные упрощенные имена, которые она пытается последовательно и переносимо применять к различным микроконтроллерам.


Nano Pinout by PigHixx Key by PigHixx

(c) PigHixx без разрешения.

,