Previous: 2.1.3.2. 8×8ドットマトリックスLED |
Up: 2. 汎用入出力(GPIO) |
Next: 2.3. キャラクタ液晶の利用 |
サンプルプログラム |
gpio_read_rotary_dip_switch |
図 6?62 回路図
複数のピンへの入力レベルを同時に読み取ってみましょう。ここではロータリー型ディップスイッチを利用してみます。回路図は図 6?62です。読み取り結果はシリアル経由でターミナルに出力します。
通常ディップスイッチというと、写真 6?34のように、複数のスイッチが並んだ形状になっており、それぞれのスイッチを別々に操作できます。
写真 6?34 ディップスイッチ
***P3111387***
ディップスイッチはこの他にも写真 6?35のように、数値の入力のため、回転させて操作できるものがあります。
写真 6?35 ロータリーディップスイッチ
***P2210855***
シャフトの向きによって、C端子と、1/2/4/8それぞれの端子との導通の組み合わせが変わります。○印がある部分のピンがC端子と接続されます。正論理やリアルコードと呼ばれている種類のものは、図 6?63のような組み合わせとなります。要は4ビットの2進数です。
図 6?63 正論理の出力表 通常の2進数になっている
***再トレース ***
各表示ポジションに軸を向けたときに○印のあるピンがCピンとショートする。
|
表示ポジション |
|||||||||||||||
ピン番号 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
1 |
|
○ |
|
○ |
|
○ |
|
○ |
|
○ |
|
○ |
|
○ |
|
○ |
2 |
|
|
○ |
○ |
|
|
○ |
○ |
|
|
○ |
○ |
|
|
○ |
○ |
3 |
|
|
|
|
○ |
○ |
○ |
○ |
|
|
|
|
○ |
○ |
○ |
○ |
4 |
|
|
|
|
|
|
|
|
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
一方負論理やコンプリメンタリコードと呼ばれているものは、図 6?64のような組み合わせとなります。4ビットの2進数の論理を反転させたものです。
図 6?64 負論理の出力表 通常の2進数を反転したものになっている
***再トレース ***
各表示ポジションに軸を向けたときに○印のあるピンがCピンとショートする。
|
表示ポジション |
|||||||||||||||
ピン番号 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
1 |
○ |
|
○ |
|
○ |
|
○ |
|
○ |
|
○ |
|
○ |
|
○ |
|
2 |
○ |
○ |
|
|
○ |
○ |
|
|
○ |
○ |
|
|
○ |
○ |
|
|
3 |
○ |
○ |
○ |
○ |
|
|
|
|
○ |
○ |
○ |
○ |
|
|
|
|
4 |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
|
|
|
|
|
|
|
|
マイコンへの入力の際に、プルアップ抵抗を介して接続する場合には、負論理のものを使用すると、マイコンがデータを読み取る時点では、通常の2進数に戻っています。プルダウン抵抗を介して接続する場合には、正論理のものを使用すると、そのまま通常の2進数として読み取ることができます。
ポートの各ピンのデータをまとめて読み取るためにはGPIO_ReadInputData関数(ライブラリ 6?15)を使用します。
ライブラリ 6?15 GPIO_ReadInputData関数
関数プロトタイプ |
uint16_t GPIO_ReadInputData (GPIO_TypeDef * GPIOx ) |
|
動作 |
指定された入力ポートの状態を読み取ります |
|
引数 |
GPIOx |
xをA?Gとしてポートを指定します |
戻り値 |
入力ポートに入力されているレベルを2バイト(16ビット)で返します |
サンプルプログラムでは以下のように繰り返し入力の状態を読み取り、状態に変化があったときには、その内容を16進数でターミナルに表示させています。
while(1) ? { ?? present_status = (uint8_t)GPIO_ReadInputData(GPIOX_PORT); ??? if (present_status != previous_status) ????? { ??????? cprintf(“Selected number is :%X\r\n”, present_status); ??????? previous_status = present_status; ????? } ??? delay_ms(10); ? } |
ところで図 6?62の回路図にプルダウン抵抗がないという点に気づいた方がいらっしゃると思います。今回は、GPIOの初期化の際に以下のように設定して、GPIOに内蔵されているプルダウン抵抗を利用しましたので、外付けのプルダウン抵抗を省略できます。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; |
Previous: 2.1.3.2. 8×8ドットマトリックスLED |
Up: 2. 汎用入出力(GPIO) |
Next: 2.3. キャラクタ液晶の利用 |