プログラムの前に16進数の軽い勉強
先ほどのプログラムでは、2進数でリレーの状態を指定したが、プログラムではたいてい16進数(または10進数)で指定する。ここでは、軽く2進数から16進数への変換方法を説明しておこう。
2進数は8桁の0と1で、16進数は2桁の数値とアルファベットで表記されていたことが、先のプログラムで確認できたと思う。2進数8桁の値は、左から4桁が16進数の左の1桁に、右からの4桁が16進数の右1桁に対応している。
つまり2進数で「0001 0001」というのは、16進数では「11」と表現されるのだ。次の表は、2進数の4桁の値が対応する16進数の1桁との対応表だ。
2進数 | 16進数 | 2進数 | 16進数 |
---|---|---|---|
0000 | 0 | 1000 | 8 |
0001 | 1 | 1001 | 9 |
0010 | 2 | 1010 | A |
0011 | 3 | 1011 | B |
0100 | 4 | 1100 | C |
0101 | 5 | 1101 | D |
0110 | 6 | 1110 | E |
0111 | 7 | 1111 | F |
もし2進数で「1010 1010」と指定した場合は、左の4桁が「1010」対応する16進数の「A」、右の4桁も「1010」なので16進数は「A」となり、結果として「AA」という16進数になる。
またチェックボックスなどを利用する場合は、2進数の各桁に次の定数をかけ、その総和が指定する値(10進数)になる。
128×8桁目のビット状態(0もしくは1)
+
64×7桁目のビット状態
+
32×6桁目のビット状態
+
16×5桁目のビット状態
+
8×4桁目のビット状態
+
4×3桁目のビット状態
+
2×2桁目のビット状態
+
1×1桁目のビット状態
=
指定する10進数
先にも出た「1010 1010」を上の式に当てはめれば、
128*1 + 64*0 + 32*1 + 16*0 + 8*1 + 4*0 + 2*1 + 1*0 =
となり、
128 + 32 + 8 + 2 = 170
ということになる。数学に詳しい人は、この定数が2の乗数になっているのに気づくだろう。2の(桁数-1)乗したものが定数というわけだ。
Excelでパラレルポートの制御
先ほどソフトをダウンロードしたサイトから、今度は「EXIOSCM」をダウンロードしてみよう。こちらは表計算のExcelから、パラレルポートを制御するExcelファイルとDLLなどが同梱されている。
同梱のExcelシートをダブルクリックすると、次のような画面が表示され、リレーユニットのコントロールが可能だ。
IOポートアドレスを確認し[Start I/O Access]ボタンをクリック。後は(Read/Write値/例:2)と書かれている左のセルに書き込む値を指定する。
セルで指定できる値は、10進数か16進数だ。たとえば先に計算した170を指定し[Write Port]ボタンをクリックすると、リレーはONとOFFが交互になった状態になる。
16進数で指定する場合は、数値の前に「&h」をつけて2桁の16進数を入力する。たとえば&hF0と指定すると、リレーユニットの4つがONになり、つづくリレーはすべてOFFとなる。
このVBAで肝になっているのは、Excelの「ツール」-「マクロ」-「Visual Basic Editor」で表示できるプログラムだ。
中でも重要なのが「標準モジュール」の「Module1」に書かれている、DLLの呼び出しに関する宣言。
この部分は、自分のプログラムにそのままコピー&ペーストすればいいので、テキストファイルなどとして保存しておくといい。
実際に制御を行なっている部分は「Microsoft Excel Objects」の「Sheet1(IO_Access)」に書かれているVBAだ。
「Private Sub cmdStartIO_Click()」で始まる、プロシージャ(プログラムの塊)は、制御を開始するための初期設定を行なう。
データの書き込みを行なうのは、 cmdWrite_Click()プロシージャだ。いろいろ処理を行なっているものの、肝となるのは「Call OutB(txtPort.Text, c)」という部分。コイツが指定したパラレルポートのIOポートアドレスに、指定したデータを出力する。
プログラムの終了時には、cmdEndIO_Click()プロシージャでプリンタポートを開放する。
さてExcelは表計算ソフトではあるが、一般にマクロと呼ばれている「Visual Basic for Applecation(VBA)」を利用すると、かなり複雑なプログラムも作れる。
次はExcel VBAを使ってプログラムからリレーユニットを制御してみよう。
(次ページへ続く)
この連載の記事
-
第8回
ゲーム・ホビー
あの電池実験はこうやった! リレーユニットの製作を全公開! -
第7回
ゲーム・ホビー
電池を越えた電池! 電池と言えない電池を発見! -
第6回
ゲーム・ホビー
大電流で電池も加熱! ミニ四駆で無茶してみた~コンビニPB軍団×100円ショップ帝国 -
第5回
ゲーム・ホビー
大電流で電池も加熱! ミニ四駆で無茶してみた~有名メーカー編 -
第4回
ゲーム・ホビー
コンビニPB連合 VS 100円ショップ帝国勝負! 連続使用決戦! -
第3回
ゲーム・ホビー
有名メーカー電池ガチンコ勝負! 連続使用決戦! -
第2回
ゲーム・ホビー
12時間電池耐久レースはコンビニ&100円ショップ対決に! -
第1回
ゲーム・ホビー
有名メーカー対抗! 12時間耐久電池間欠使用レース! -
ゲーム・ホビー
驚愕の結果! アルカリ乾電池性能比較実験! - この連載の一覧へ