2

私はマイクロコントローラープログラミングに不慣れで、マイクロコントローラーボードを、送信されたコマンドに基づいてステータスを提供する別のデバイスに接続しましたが、このステータスは、データの提供に使用されるのと同じI/Oピンで提供されます。つまり、基本的に、マイクロコントローラーからの出力として使用される8ビットのデータラインがありますが、特定のコマンドでは、データラインを読み取ることを選択すると、データラインの1つでステータスが返されます。したがって、ステータスを読み取るためにこの1行の方向を変更して、この行を出力として入力に変換してから出力に戻す必要があります。これは許容できるプログラミングですか、それともI / Oピンのこの変更は頻繁に不安定性を引き起こしますか?

ありがとう。

4

4 に答える 4

4

ペリフェラルがラインの駆動を開始する前にラインの状態を入力に変更してから、ペリフェラルによって返されたステータスを読み取るためにI / Oラインの方向を変更しても、問題はありません。周辺機器がラインの駆動を停止するまで、出力としてラインを駆動します。回避する必要があるのは、2つのドライバデバイス間の競合です。つまり、プロセッサと周辺機器によって2つの端が反対の状態に駆動されます。これにより、せいぜい電力消費量が大幅に増加するか、プロセッサ、周辺機器、またはその両方のピンドライバ回路が悪化します。

プロセッサや周辺機器が何であるかはわからないので、リモートデバイスがステータスを出力できるようにする制御ビットがインターフェイスにあるかどうかはわかりません。これにより、周辺機器がいつでも回線を駆動しているかどうかを知ることができます。

于 2010-04-22T08:06:25.550 に答える
1

はい、マイクロコントローラーのI/O方向を繰り返し変更することはまったく問題ありません。これは、I2CやiButtonなどのオープンコレクタバスを介して通信するための標準的な方法です。(アセンブリ言語のコード例へのリンクについては、 PICList:バスを参照してください)。

  • 0ビットを送信:出力LATxビットを0に設定してから、TRISxビットをOUTPUTに設定します。
  • 1ビットを送信:出力LATxビットを0に保ち、TRISビットをINPUTに設定します(外部抵抗のプルアップラインをハイにします)
  • 周辺機器からの応答をリッスンします。出力LATxビットを0に保ち、TRISビットをINPUTに設定します。ペリフェラルが1を送信しているときに外部抵抗のプルアップラインをハイにするか、ペリフェラルが0を送信しているときにペリフェラルがラインをローにプルします。PORTxピンからビットを読み取ります。

バスの両端がこのプロトコルに正しく従っている場合(特に、どちらの端もアクティブにラインをHighに駆動していない場合)、競合や電流スパイクについて心配する必要はありません。

于 2010-05-22T23:58:07.157 に答える
1

私はこれをデジタルI/Oピンで問題なく実行しましたが、これに関する専門家からはほど遠いです。ただし、使用しているマイクロコントローラーによって異なります。

于 2010-04-22T06:46:58.923 に答える
0

高速でのIOスイッチングはEMIを生成することを覚えておくことが重要です。スイッチング周波数、ボードレイアウト、およびデバイスの感度によっては、このEMIがアプリケーションのパフォーマンスと信頼性に影響を与える可能性があります。

アプリケーションに問題がある場合は、オシロスコープを使用して、ボードレーンで照射されたEMIをチェックします。

于 2010-05-07T13:02:34.223 に答える