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


11

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

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

введите описание изображения здесь

Arduino Uno:

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 и A4, A5, так как они в основном одинаковы (18,19).

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

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

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

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

Вы можете ... но вы должны принять меры предосторожности. Какие?

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

Или я сломаю USB серийник?

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

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

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

Как сделать аппаратный сброс arduino / bootloader, если что-то пойдет не так?

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

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

Существуют дешевые регистраторы сдвига, драйверы pwm, драйверы светодиодов, 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);
// yes it would flicker

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

Ответы:


8

Основная проблема с выводами 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, некоторые из меньших (mini? Micro? Я забываю какие) плат и т. Д.


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

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

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

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

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

1

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

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

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

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


0

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

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

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

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


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

Второе: под «какими бы то ни было» я подразумеваю переключатели ... щелкающие переключатели, герконы, датчики или любой тип комбинации входов-выходов, которые поддерживают высокий-низкий. electronicdesign.com/site-files/electronicdesign.com/files/… сделано с диодами.
Cocco

Ну не совсем. Charlieplexing - это форма мультиплексирования, поэтому, если вы не хотите, чтобы ваши переключатели щелкали как сумасшедшие, они не будут работать для них. И это выходная ситуация, поэтому вы не будете делать входные данные, как вы, кажется, думаете. Я предлагаю вам прочитать другие ссылки. Сдвиговые регистры или расширители портов здесь более практичны, чем Чарлиплексирование.
Ник Гэммон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.