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

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

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

Ардуино Уно:

1.Вы можете использовать аналоговые контакты

Pin 14 = Analog in 0
Pin 15 = Analog in 1
Pin 16 = Analog in 2
Pin 17 = Analog in 3
Pin 18 = Analog in 4
Pin 19 = Analog in 5

digitalWrite(14,HIGH);
or
digitalWrite(A0,HIGH);

2.Вы не можете использовать одновременно SDA , SCL и amp; A4 , A5, поскольку они по сути одинаковы (18,19).

3.Вы также можете использовать TX/RX.

"Не делай этого, ты нарушишь последовательную связь..."

"Никогда не используйте контакты 0 и 1"

"вы не можете использовать контакты TX/Rx"

Можно... но нужно принять меры предосторожности. Какие?

У него должен быть последовательный порт программного обеспечения через USB, верно?

Или мне сломать последовательный USB-порт?

Могут ли возникнуть внутренние проблемы с чипом, если я использую TX/RX?

Поскольку я использую в коде контакты TX/RX, мне, вероятно, не следует использовать Serial.print()?

Что произойдет, если я забуду удалить Serial.print() после загрузки кода, использующего контакты 0,1?

Как аппаратно сбросить настройки Arduino/загрузчика, если что-то пойдет не так?

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

Итак, что мне следует знать, прежде чем использовать эти TX/RX или, возможно, другие аналоговые контакты?

Существуют дешевые сдвиговые регистры, ШИМ-драйверы, светодиодные драйверы, spi, i2c и больше микросхем для расширения возможностей ввода-вывода


Но если нет больших проблем, это означает, что у Arduino 20 контактов ввода-вывода...

Теоретически вы можете контролировать:

17x3 = 51 = 17 RGB leds (multiplexing, pwm sourcing&sinking);
14x6 = 84 leds (multiplexing, pwm on 6 rows/colums );
10x10 = 100 leds (multiplexing, high low);
20x(20-1) = 380 leds (charlieplexing, high low);
// да, оно будет мерцать

Поправьте меня, если я ошибаюсь. Это означает, что вы можете управлять 380 «Что угодно», используя диоды и один Arduino.

, 👍15


3 ответа


13

Основная проблема связана с контактами 0 и 1.

Многим контактам назначено несколько функций, например, A4 и A5 также являются контактами I2C, контакты 10/11/12/13 также являются контактами SPI и т. д. Но контакты 0 и 1 являются единственными многофункциональными. контакты, к которым на плате действительно что-то прикреплено.

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

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

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

  • Устройства, подключенные к контактам 0 и 1, могут мешать последовательному соединению.

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

  • Как загрузить скетчи, если ваш скетч мешает сериалу? Как «перезагрузить» доску?

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

  • Это влияет на все платы Arduino?

Нет, только те, которые используют микросхему моста USB-Serial — это такие устройства, как Uno, Due, Mega и т. д. Платы с прямым USB-соединением не используют контакты TX и RX для загрузки скетчей — они используют выделенные контакты USB D+ и D-. Это такие платы, как Leonardo, некоторые платы поменьше (мини? микро? Я забыл какие) и т. д.

,

«Многие щиты сейчас начинают добавлять небольшой переключатель» круто. У Micro есть «чип моста USB-Serial»? Означает ли это, что я могу использовать контакты 0,1 на Uno, но не на Micro?, @cocco

Вы можете использовать их на любом устройстве, у которого нет моста USB-Serial. У Uno есть один, у Mega есть один, у Mini его нет, однако вам нужно подключить его внешне к контактам TX/RX, чтобы запрограммировать его. Все это отсутствует. У Micro и Leonardo его нет, поэтому вы можете использовать его., @Majenko

Это то, о чем говорит @Nick Gammon? У Уно и других, кого вы записали, есть подтягивающие резисторы, которые не позволяют вам правильно использовать контакты 0 и 1, но у Micro нет подтягивающего резистора, поэтому контакты 0 и 1 работают правильно, а также USB для загрузки новых эскизов?, @cocco

На этот раз Ник ошибается в этом вопросе. Подтягивающих резисторов нет. Есть пара небольших встроенных резисторов, чтобы предотвратить проблемы, если основной MCU и чип USB попытаются одновременно перевести одну и ту же линию на противоположные уровни. Вы можете увидеть их на схеме Uno как RN4A и RN4B., @Majenko

Если чип USB попытается подключить контакт RX (у вас подключен порт USB и вы открываете последовательное соединение [или, может быть, он просто подключен, не уверен]), то это может повлиять на напряжение на контакте RX независимо от чего-либо. вы делаете в своем эскизе, поэтому может быть небезопасно использовать эту булавку для таких вещей, как чарлиплексинг., @Majenko

так что я могу использовать светодиоды charlieplex 380 или переключатели с Uno, если я не использую последовательный порт, i2c, spi. если USB не используется как последовательный. тогда, если я хочу добавить новый эскиз, мне просто нужно отключить контакты от контактов 0 и 1. С другой стороны, с микро, мне даже не нужно отключать контакты 0,1, поскольку они не подключены к USB?, @cocco

Это почти правильно. Вы *можете* использовать 0 и 1 для чарлиплексирования, но USB-чип *может* все равно мешать, несмотря на все ваши усилия. Различные чипы USB работают по-разному, и это зависит от того, какая прошивка загружена на чип USB тех, которые используют MCU вместо выделенного чипа, такого как FT232 и т. д., @Majenko

Даже если USB не подключен, но я использую только Vin или выделенный источник питания? После программирования я использую внешний источник питания, USB не подключен. чтобы изменить эскизы, удалите pin0,1stuff, @cocco

Это не тот вопрос, на который можно ответить простым «да» или «нет». Это полностью зависит от *что делает USB-чип*, а это зависит от *что такое USB- чип*, что зависит от *что это за плата, где вы ее купили, кто ее спроектировал и построил* и т. д. Лучше всего Предполагайте худшее и не используйте эти контакты для подобных операций., @Majenko

Непонятно... или они работают, или нет... если что-то вроде да, то с чарлиплексингом работает, так как помехи слишком малы, чтобы визуально влиять на светодиоды, а с помощью переключателей это не подходит и можно добраться много плохого чтения. Кстати, я говорю об оригинальных Arduinos... Uno rev 3 и micro тоже новейшие... "настоящие" Arduinos. Может быть, это означает, что прошивка чипа также меняется и поэтому он может записывать на эти контакты какие-то случайные данные? как я уже сказал, USB не подключен после программирования. есть ли у чипа какая-то петля на этом контакте, чтобы проверить, подключен ли он или что-то в этом роде?, @cocco

Что произойдет, если я поставлю 2 светодиода инвертированными (с резисторами) на контакты 0 и 1, установлю на контакте 0 высокий уровень, на контакте 1 низкую задержку на 1 секунду, а на контакте 0 низкий уровень и на контакте 1 высокий уровень задержки на 1 секунду? тот же вопрос, который я задал Нику., @cocco

Давайте [продолжим обсуждение в чате](http://chat.stackexchange.com/rooms/27266/discussion-between-cocco-and-majko)., @cocco

Ты пробовал это? Вы не причините никакого вреда, если попытаетесь. Да, прошивка может (и, вероятно, будет) меняться со временем., @Majenko

Я попробую, опубликую обновления позже... надеюсь, мои ардуино не взорвутся. АААА И что я смогу запрограммировать их позже с помощью других эскизов..., @cocco

Протестировано на Arduino Uno, 2 перевернутых светодиода на контактах 0 и 1 мигают правильно, видимых помех нет, даже при питании от ПК через USB. эскизы загружаются нормально также при подключенных светодиодах. на самом деле приемники TX, вероятно, подключены точно так же, как и тест, как вы можете видеть входную и выходную связь tx RX... так что, если он работает на Uno... у Arduino Micro не должно быть абсолютно никаких проблема., @cocco


0

20x(20-1) = 380 светодиодов (чарлиплексирование, высокий низкий); Поправьте меня если я ошибаюсь. Это означает, что вы можете управлять 380 «Что угодно» с помощью диодов и одного Arduino.

Во-первых, цифра 380 верна для 20 контактов (202 – 20), однако контакты 0 и 1 подключены к подтягивающим резисторам на Atmega16U2, поэтому на самом деле они никогда не находятся на уровне 0 В. . Если вы загрузите пустой эскиз, вы измерите 5 В на контактах 0 и 1.

Во-вторых, вы не можете управлять 380 «что угодно», вы можете управлять 380 светодиодами через Charlieplexing. Свойство светодиода, заключающееся в том, что ток течет через него только в одном направлении, важно для его работы.

Вопрос по теме Есть ли способ иметь более 14 выходных контактов на Arduino?

,

Во-первых: что произойдет, если я поставлю 2 светодиода инвертированными (с резисторами) на контакты 0 и 1, установите для контакта 0 высокий уровень, для контакта 1 низкую задержку на 1 секунду, а для контакта 0 низкий уровень и для контакта 1 высокий уровень задержки на 1 секунду?, @cocco

Во-вторых: под «что угодно» я имею в виду переключатели... щелкающие переключатели, герконы, датчики или любые комбинации входов и выходов, которые поддерживают высокий низкий уровень. http://electronicdesign.com/site-files/electronicdesign.com/files/ archive/electronicdesign.com/files/29/18652/fig_02.jpg сделано с помощью диодов., @cocco

Ну не совсем. Чарлиплексирование — это форма мультиплексирования, поэтому, если вы не хотите, чтобы ваши переключатели щелкали как сумасшедшие, для них это не сработает. И это ситуация вывода, поэтому вы не будете вводить данные, как вам кажется. Предлагаю вам прочитать другие ссылки. Регистры сдвига или расширители портов здесь более практичны, чем Чарлиплексирование., @Nick Gammon


3

Я не могу комментировать из-за недостаточной репутации, но хочу отметить, что в распиновке OP как минимум один неправильный вывод!

PB6 должен быть PB5

Я потратил довольно много времени, пытаясь понять, почему я не вижу SCK в области видимости (шина SPI). Я работал на низком уровне, а не в IDE.

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

,