Народ, проблема!
Мучаю Ардуино 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 в Ардуино на больших скоростях, ведь борьба за малое время нарастания на входах Ардуино при наличии источника с ОК или ОС тогда может вестись только через уменьшение сопротивления внешних подтягивающих резисторов на этих входах, а я и так уже экспериментировал с небольшими!
Уважаемые, смотрел ли кто-нибудь, что там делается физически на входах Ардуино осциллографом? И что у Вас наблюдается? Как боретесь?
Спасибо всем!
Мучаю Ардуино 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 в Ардуино на больших скоростях, ведь борьба за малое время нарастания на входах Ардуино при наличии источника с ОК или ОС тогда может вестись только через уменьшение сопротивления внешних подтягивающих резисторов на этих входах, а я и так уже экспериментировал с небольшими!
Уважаемые, смотрел ли кто-нибудь, что там делается физически на входах Ардуино осциллографом? И что у Вас наблюдается? Как боретесь?
Спасибо всем!
