Стабильно ли многократно менять направление ввода / вывода на микроконтроллере? - PullRequest
2 голосов
/ 20 апреля 2010

Я новичок в программировании микроконтроллера, и я подключил свою плату микроконтроллера к другому устройству, которое предоставляет состояние на основе команды, отправленной на него, но это состояние предоставляется на том же выводе ввода / вывода, который используется для предоставления данных , Итак, в основном, у меня есть 8-битная строка данных, которая используется как выходной сигнал микроконтроллера, но для некоторых команд я получаю статус обратно на одной из строк данных, если я решу прочитать ее. Таким образом, я должен был бы изменить направление этой одной строки, чтобы прочитать состояние, таким образом преобразовав эту строку как выходной сигнал на вход, а затем обратно на выход. Является ли это приемлемым программированием или это изменение вывода ввода-вывода часто вызывает нестабильность?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 22 апреля 2010

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

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

1 голос
/ 23 мая 2010

Да, вполне нормально менять направление ввода / вывода на микроконтроллере несколько раз. Это стандартный метод связи по шинам с открытым коллектором, таким как I2C и iButton. (см. PICList: busses для ссылок на примеры кода на ассемблере).

  • передача 0 битов: установите выходной бит LATx в 0, а затем установите бит TRISx в OUTPUT.
  • передача 1 бита: оставить бит LATx на выходе равным 0 и установить бит TRIS в значение INPUT (пусть линия подтягивания внешнего резистора становится высокой)
  • прослушивание ответа от периферийного устройства: оставьте выходной бит LATx равным 0 и установите для бита TRIS значение INPUT. Пропустите линию подтягивания внешнего резистора до высокого уровня, когда периферийное устройство передает 1, или позвольте периферийному устройству подтянуть линию до низкого уровня, когда периферийное устройство передает 0. Считайте бит с контакта PORTx.

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

1 голос
/ 22 апреля 2010

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

0 голосов
/ 07 мая 2010

Важно помнить, что любое высокоскоростное переключение ввода-вывода генерирует EMI. В зависимости от частоты переключения, расположения платы и чувствительности устройств эти EMI могут повлиять на производительность и надежность вашего приложения.

Если у вас возникли проблемы в вашем приложении, используйте осциллограф, чтобы проверить наличие облученных электромагнитных помех на дорожках вашей платы.

...