デバイスとAVRマイクロコントローラーの入出力ポートの操作。 パート1

I / Oポート操作



多数の例を使用してすべてが非常に詳細かつ詳細に説明されているこの資料を学習すると、AVRマイクロコントローラーの入力/出力ポートを簡単に習得およびプログラムできます。







ATMega8マイクロコントローラーの例を検討します。



Atmel Studio 6.0でプログラムを作成します。



Proteus 7 Professionalで回路をエミュレートします。



マイクロコントローラーは、入力/出力ポートを介して外部と通信します。 入力/出力ポートのスキームは、データシートに示されています。



画像



しかし、初心者がスキームを理解することは非常に困難です。 したがって、スキームを単純化します。



画像



Pxnはマイクロコントローラーポートポートの名前です。xはポートの文字(A、B、CまたはD)、nはポート放電番号(7 ... 0)です。

Cpinはポートの寄生容量です。

VCC-電源電圧。

Rpu-切断された負荷の上部抵抗(プルアップ)。

PORTxn -PORTxレジスタのビットn。

PINxn -PINxレジスタのビットn。

DDRxn -DDRxレジスタのビットn。



マイクロコントローラーの出力を検討してください。 マイクロコントローラーの入力には、2つのダイオードの小さな保護があり(1を参照) 、電源電圧を超える短期の電圧パルスからマイクロコントローラーの入力を保護するように設計されています。 電圧が電源よりも高い場合、上側のダイオードが開き、この電圧が電源バスにエッチングされます。電源バスでは、電源とそのフィルターはすでにそれと格闘しています。 負電圧(ゼロレベル以下)が入力に達すると、下側のダイオードを介して中和され、グランドに消えます。 ただし、そこにあるダイオードは脆弱であり、この保護は微視的なインパルスと干渉からのみ助けます。 5ボルトの電力で6〜7ボルトがマイクロコントローラーの脚に供給されると、内部ダイオードはそれを保存しません。



コンデンサ(2を参照)は、浮遊出力容量です。 小さいながらも存在します。 通常は考慮されませんが、考慮されます。 気にしないで、知ってください。



次はコントロールキーです(3.4を参照) 。 各キーには、図に描かれている論理条件が適用されます。 条件が満たされると、キーが閉じます。



AVRマイクロコントローラーの各ポート(通常はA、B、時にはCまたはDという名前もあります)には8ビットがあり、それぞれがケースの特定のレッグに関連付けられています。 各ポートには、 DDRxPORTx 、およびPINxの 3つの特殊レジスタがあります (xはポートA、B、C、またはDの文字に対応します)。 レジスタの目的:



DDRx-入力または出力用のポートxビットを構成します。



PORTx-ポートxの出力の状態を制御する(対応するビットが出力として設定されている場合)か、内部プルアップ抵抗を接続することによって(対応するビットが入力として設定されている場合)。



PINx —ポートxの論理ビットレベルを読み取ります。



PINnは読み取りレジスタです。 あなたはそれからしか読むことができません。 PINxnレジスタには、ポートのピンでの実際の現在の論理レベルに関する情報が含まれています。 ポート設定に関係なく。 そのため、入力に何があるかを知りたい場合は、 PINxnレジスタの対応するビットを読み取ります。 さらに、2つの境界があります:保証されたゼロの境界と保証されたユニットの境界-現在の論理レベルを明確に決定できるしきい値。 5ボルトの電源の場合、これはそれぞれ1.4ボルトと1.8ボルトです。 つまり、電圧が最大から最小に低下すると、電圧が1.4ボルトを下回ったときにのみPINxレジスタのビットが1から0に切り替わりますが、電圧が最小から最大に上昇すると、電圧が1.8ボルトに達したときにのみビットが0から1に切り替わります。 つまり、0から1への切り替えのヒステリシスがあり、干渉および干渉の影響下でのカオス的な切り替えを排除し、切り替えしきい値間の論理レベルの誤った読み取りも排除します。



もちろん、供給電圧が低下すると、これらのしきい値も低下します。



DDRxnはポート方向レジスタです。 特定の瞬間のポートは、入力または出力のいずれかになります(ただし、これはPINxnビットのステータスには関係ありません。実際の値はPINxnからいつでも読み取ることができます)。



DDRxy = 0-出力は入力として機能します。



DDRxy = 1-出力はEXITで機能します。



PORTxn-出力状態制御モード。 出力を入力に設定する場合、入力タイプはPORTxに依存します(Hi-ZまたはPullUp、詳細は以下を参照)。



ピンが出力用に構成されている場合、 PORTxレジスタの対応するビットの値が出力のステータスを決定します。 PORTxn = 1の場合、出力はlog.1、 PORTxn = 0の場合、出力はlog.0です。



足が入力に設定されている場合、 PORTxn = 0の場合、出力はHi-Zモードになります。 PORTxn = 1の場合、出力は電源投入前にプルアップ抵抗が100kのプルアップモードです。



テーブル。 ポートピン構成。



DDRxn PORTxn I / Oコメント

0 0 I(入力)入力ハイインピーダンス入力。 (電源によって誘発される可能性があるため、使用しないことをお勧めします)

0 1 I(入力)入力内部抵抗がプルアップされています。

1 0 O(出力)出力出力はローです。

1 1 O(出力)出力出力はハイです。



ポートの一般的な図を図に示します。



画像



DDRxn = 0 PORTxn = 0-モード: HI-Z-高インピーダンス入力。



画像



DDRxn = 0 PORTxn = 1-モード:プルアップ-ログへのプルアップ付き入力1。



画像



DDRxn = 1 PORTxn = 0-モード: 出力 -出力ログ0。 (ほぼGND)



画像



DDRxn = 1 PORTxn = 1-モード: 出力 -出力ログ 1。 (ほぼVCC)



Hi-Z入力-高インピーダンス入力モード。

このモードはデフォルトで有効になっています。 すべてのキーが開いており、ポートの抵抗が非常に高くなっています。 原則として、他のモードと比較して、無限大と見なすことができます。 つまり、電気的には、出力は、どこにも接続されておらず、何にも影響しません。 しかし! 同時に、彼は絶えず自分のステータスをPINnレジスタに読み込み、入力で何が1または0であるかを常に確認できます。 このモードは、データバスを聞くのに適しています。なぜなら、 タイヤには影響しません。 そして、入り口が空中にぶら下がったらどうなりますか そして、この場合、外部干渉、電磁干渉、および一般に月の位相と火星の天候に応じて、電圧がそれにジャンプします(乱数を刻む理想的な方法!)。 多くの場合、この場合のポートは不安定な50 Hzの正弦波です-220Vネットワークからのヒントであり、 PINNレジスタは約50 Hzの周波数で0と1を変更します



プルアップ入力- プルイン入力。

DDRxn = 0およびPORTxn = 1の場合、 プルアップキーが閉じられ、 100kΩの抵抗がラインに接続されます。これにより、どこにも接続されていないラインが即座に状態log1になります。 プルアップの目的は明らかです-ピックアップの影響下で入力状態の無秩序な変化を防ぐため。 ただし、入力に論理ゼロが表示された場合(ボタンまたは別のマイクロコントローラー/マイクロ回路でラインをグランドに短絡)、弱い100kΩ抵抗器はラインの電圧をlog.1に維持できず、入力にlog.0があります。



終了モード。

ここで、すべてが明確であると思います-ポートにlog.1を与える必要がある場合、出力にポートをオンにし( DDRxn = 1)、log.1を発行します( PORTxn = 1)-同時に、上のキーが閉じて出力に近い電圧が表示されます栄養に。 また、log.0が必要な場合は、出力ポート( DDRxn = 1)をオンにしてlog.0( PORTxn = 1)を発行します。これにより、下部ゲートが開き、出力に約0ボルトが与えられます。



All Articles