Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

Дискретные входы Ардуино

Вт ноя 10, 2020 01:40:07

Народ, проблема!
Мучаю Ардуино Micro. В частности, попытался работать с интерфейсом SPI, и поскольку не все получалось, стал смотреть осциллографом сигналы на её соответствующих выводах -
и вот что у меня получается: на выходах интерфейса SPI - MOSI и SCK - все в порядке - качественный чистый меандр с крутыми фронтами и спадами импульсов. А вот на входе MISO
оказались очень затянутые фронты входящих импульсов - порядка 6 мкс. (пин сконфигурирован как вход с включенным внутренним подтягивающим резистором).
Отсоединил и проверил источник входных импульсов (на выходе источника сигнала полевик с открытым стоком) - при подключенном к +5v стоковом резисторе 40 кОм все отлично - <20нс фронты и спады. Стал проверять входные пины Ардуино, и наткнулся на неожиданное: при конфигурировании любого пина как вход с подключенным внутренним подтягивающим резистором - pinMode (.., INPUT_PULLUP), и замыкании его тупо кнопкой на землю получается, как и положено, крутой спад на этом входе, а вот когда кнопка размыкается - ужасно затянутые фронты - время нарастания порядка 4...8мкс, и форма кривой соответствует тупо графику заряда конденсатора. Померил ток нуля этого пина - 130 мка, что дает значение внутреннего подтягивающего резистора порядка 40 кОм. Если предположить, что этот фронт обусловлен зарядом конденсатора RC-цепочки, образованной сопротивлением внутреннего подтягивающего резистора и входной емкостью пина Ардуинки, то это дает приближенно значение входной емкости пина C~=6 мкс/40кОм = 150пф (!), во что с трудом можно поверить.

Провел контрольный эксперимент: отключил внутренний подтягивающий резистор, и подключил внешний - с сопротивлением 2кОм. Время нарастания фронта сигала при размыкании кнопки сразу резко уменьшилось - до 500нс приблизительно - что хорошо согласуется с предположением просто о наличии существенной емкости пинов Ардуино. Если прикинуть значение входной емкости в этом случае - это дает С~=500нс/2кОм =250пф - порядок тот-же, что и при подключенном внутреннем подтягивающем резисторе!

Поскольку с трудом могу поверить в наличие настолько больших входных емкостей у пинов этих микроизделий, прошу совета у сообщества: правильно ли я все понимаю? И как вообще тогда может работать этот интерфейс SPI в Ардуино на больших скоростях, ведь борьба за малое время нарастания на входах Ардуино при наличии источника с ОК или ОС тогда может вестись только через уменьшение сопротивления внешних подтягивающих резисторов на этих входах, а я и так уже экспериментировал с небольшими!

Уважаемые, смотрел ли кто-нибудь, что там делается физически на входах Ардуино осциллографом? И что у Вас наблюдается? Как боретесь?

Спасибо всем!

Re: Дискретные входы Ардуино

Вт ноя 10, 2020 14:47:25

Собственно аппаратный SPI у ардуинки или для внутрисхемного программирования "внешним программатором" или для работы с заранее определенными модулями. Помимо прочего на D13 (SCK) стандартно подвешен светодиод-индикатор.
Касательно разводки на самой платке - это у каждого производителя может отличаться.
Честно говоря смотреть осциллограммы особо и не приходилось - достаточно простейших тестов.
Обычно однонаправленная шинка с одной из сторон нагружена достаточно мощным двухтактным каскадом - источником сигнала.
Так что ежли охота чего посмотреть - ставим одну лапку в режим входа, а с другой на нее подаем сигнал функцией tone().
Тогда более корректно можно увидеть влияние...
Ну и... пользуемся для проб собственным тест-кодом, а не библиотеками.
На крайний случай базовым функционалом "родной" SPI library...
На практике пока особой надобности в аппаратном SPI не возникало. Посему особо внимание и не обращалось.
(основные подопытные arduino-nano и arduino pro mini)
:roll:

Re: Дискретные входы Ардуино

Вт ноя 10, 2020 14:53:14

STREXNIN,
1) А при чем здесь Arduino, когда MISO = Master IN, Slave OUT? Потом SPI - Totem Pole / Push-Pull, это не открытый коллектор, там не нужны подтяжки. Он тянется полумостом полевиков вверх или вниз. На MISO (вход) в режиме мастера со стороны Arduino - просто триггер Шмитта. Что у вас в кач-ве Slave было?
2) Это хорошо, что вы сами смогли измерить хар-ки пина, только лишнее это. Их хар-ки указаны в ДШ. Для atmega328 значение внутр. подтягивающего сопротивления от 20 до 50 кОм. Ёмкость пина указана примерно в районе 10 пФ. Почему у вас получилось больше - другой вопрос, пока не вникал. Но у вас ведь не голый МК, а цельная плата. Вы бы для чистоты эксперимента не на ардуино проверяли, а с отдельным МК.
3) В итоге ответ на вопрос " как вообще тогда может работать этот интерфейс SPI в Ардуино на больших скоростях, ведь борьба за малое время нарастания на входах Ардуино при наличии источника с ОК или ОС тогда может " - лежит выше. Это попросту не шина с ОК/ОС. Это шина с драйвером.
Ответить