多数の例を使用してすべてが非常に詳細かつ詳細に説明されているこの資料を学習すると、AVRマイクロコントローラーの入力/出力ポートを簡単にマスターおよびプログラムできます。
ATMega8マイクロコントローラーの例を検討します。
Atmel Studio 6.0でプログラムを作成します。
Proteus 7 Professionalで回路をエミュレートします。
マイクロコントローラー用のプロジェクトを作成する際の最も一般的なタスクは、ボタンを接続することです。 その単純さにもかかわらず、このタスクには重要な、場合によっては自明ではない機能があります。
例えば、共通のワイヤ(「グランド」)にボタン接点の1つを接続し、「入力」モードに切り替えられるマイクロコントローラのI / Oポートの選択されたラインに2つ目を接続すると、この方法は機能しません。 ボタンが押されると、マイクロコントローラーのポートラインはグランドに接続され、プログラムはこのI / Oポートラインから「0」ログを読み取りますが、ボタンが離されると、マイクロコントローラーの出力は「空中に吊るされる」と呼ばれるものには接続されません。 この場合、プログラムは出力からlog。 "0"とlog。 "1"の両方をランダムに読み取ります。これは、接続されていない入力/出力ポート回線に干渉があるためです。
正しい接続では、オープン状態ではマイクロコントローラーの出力を抵抗を介して、たとえば電源バスに接続し、クローズ状態ではグランドに接続する必要があります。 抵抗器の抵抗は、ボタンの接点が閉じているときに抵抗器を流れる電流が大きくなりすぎないように小さくしないでください。 通常、10〜100kΩのオーダーの値が使用されます。
図:強化された電源バスとのボタン接続。
この接続では、I / Oポートラインのステータスは次のようになります。
-ボタンが押されると、ログと同じになります。
-ボタンが押されると、ログに等しくなります。
図:隆起した地面とボタンの接続。
この接続では、I / Oポートラインのステータスは次のようになります。
-ボタンが押されると、ログと等しくなります。
-ボタンが押されると、ログと同じになります。
-プルアップされた電源バスを備えたボタンの入力/出力ポートのラインへの接続:
// #include <AVR/io.h> #include <stdint.h> // int main(void) { // / DDRB = 0b11111111; // B "" PORTB = 0b00000000; // B .«0» ( GND) DDRD = 0b00000000; // D "" PORTD = 0b11111111; // D .«1» ( Vcc) // while (1) { //: PD0 .«0» if ((PIND&(1 << PD0)) == 0) { // PB0 .«1» PORTB |= (1 << PB0); } else { // PB0 .«0» PORTB &= ~(1 << PB0); } } }
-隆起したアースのあるボタンの入力/出力ポートのラインへの接続:
// #include <AVR/io.h> #include <stdint.h> // int main(void) { // / DDRB = 0b11111111; // B "" PORTB = 0b00000000; // B .«0» ( GND) DDRD = 0b00000000; // D "" PORTD = 0b11111111; // D .«1» ( Vcc) // while (1) { //: PD0 .«1» if ((PIND&(1 << PD0)) == 1) { // PB0 .«1» PORTB |= (1 << PB0); } else { // PB0 .«0» PORTB &= ~(1 << PB0); } } }