ポートを使いこなし、いざ制御プログラミングの世界へ:イチから作って丸ごと学ぶ! H8マイコン道(8)(1/3 ページ)
制御システムの基本といえるスイッチとLEDによる入出力回路の動作を理解したうえで、C言語によるポート制御を行う!!
前回のあらすじ
――完成したマイコンボード「H8Tiny-USB」を手に、喜び勇んで大学のサークル仲間の元へ向かった健一君。しかし、肝心の使い方が分からない健一君に対し、先輩の晴子さんは怒り心頭。急きょ、H8マイコンの制御プログラミングの指導を受けることに……。晴子さんのペースに翻弄(ほんろう)されながらも、何とかソフトウェア開発環境を構築した健一君ですが、宿題も出され、すでにヘトヘト状態です。(前回へ)
さて、午後の授業も終わり、そろそろ健一君が来るころです……。
H8Tiny-USBのハードウェアを分析しよう
ここは健一君が所属する大学のサークル部屋。また、いつもの足音が聞こえてきました……。
こんにちは!
あら、健一君じゃない。
手に持ってるのマンガみたいだけど、宿題のこと、もちろん忘れてないわよね?
ギクッ!!
ハハハッ……(汗)。
な、何だか急にお腹が痛くなってきたなー。ちょっと、トイレに行ってきます。
ちょっと!! ごまかさないでよ。
まぁ、いまの健一君の実力じゃあ、あの宿題を解くのは『ムリ』よね。
フフッ。
ビクッ!!
えーと、そのー。
ぜひ今日もご指導いただけると……。
まったく!
いいわ。ワタシがみっちり教えてあげるから。
――ソフトウェア編に突入した「H8マイコン道」も今回で2回目となりました。前回の晴子さんの宿題は、まだ何も知らない健一君には少々荷が重かったようですね。早速、C言語プログラミングをはじめたいところですが、まずはH8Tiny-USBのハードウェアについて調べてみましょう。プログラミングに入る前に、あらかじめ回路の動きを理解しておくことはとても大切です。
制御システムにおいて、“スイッチからの入力”と“LEDへの出力”は、最も基本的なものといえるでしょう。これらの入出力回路は、マイコンのポートに接続されており、人間とマイコンとの対話の手段になっています。
本稿のはじめに、「人間によるスイッチの操作が、どのようにマイコンに伝わるのか」、また「人間が情報を認知できるように、マイコンからどのような信号を出力するのか」について解説していきます。
スイッチ入力回路の動作
図1にH8Tiny-USBのスイッチ入力回路を示します。ご覧のとおり、スイッチはH8マイコンのポート1に接続されています。
スイッチが押されていないとき、ポートの電位は電源(Vcc)の電位、すなわち「1(High)」です。スイッチが押されると、ポートはグランドに接続されます。その電位はゼロ、すなわち「0(Low)」です。
以上のように、“スイッチを押した”という操作は、マイコンに「0」信号で伝えられるのです。
7セグメントLED表示回路の動作
続いて、7セグメントLED表示回路の動作についても確認してみましょう。H8Tiny-USBの7セグメントLED表示回路は、「ダイナミック・ドライブ」と呼ばれるタイプのものです。
7セグメントLED表示回路には、図2(a)のように7セグメントLEDをポートに直接接続する方法もありますが、この方法だと表示するけたが増えた場合、多くのポートが必要とされます。
一方、図2(b)のように表示データを共通化し、表示するけたを高速に切り替えることで、複数のけたが同時に表示されているように見せかける方法もあります。この方法ですと、ポートを節約できますが、その半面、絶えず表示を切り替えなければなりません。この方式をダイナミック・ドライブと呼びます。
それでは、H8Tiny-USBの7セグメントLED表示回路について詳しく見てみましょう。
図3をご覧ください。H8マイコンのポート5を表示切り替えに、ポート8をデータ表示に使っています。
7セグメントLEDは「アノード・コモン型」なので、コモン端子に電源を印加し、カソードをLowにすることでLEDが光ります。
7セグメントLEDの8つのLEDを光らせるには、ポートの電流能力をトランジスタで増幅する必要があります。いま、ポート5から「0」を出力すると、トランジスタのベースの電位が下がるので、ベース電流が流れます。するとトランジスタがON状態になり、そのけたの7セグメントLEDが発光可能になります。反対に、ポート5から「1」を出力すると、ベース電流は流れません。トランジスタがOFF状態なので、7セグメントLEDは光りません。
さらに、7セグメントLEDに数字を表示させるには、ポート8から表示パターンを出力します。このときも「0」信号でLEDが光りますので注意してください。
ポートは2種類のレジスタで操作するのだ!
それにしても、スイッチONで“ゼロ”なんて、何か気持ち悪いなー。
そうかもね。
ちなみに、ゼロで回路がアクティブになることを「負論理」っていうのよ。
へー。知らなかった。
じゃあ、ゼロで点灯する7セグメントLEDも負論理ってことですね。
そのとおり!
健一君、回路の動きが理解できたようね。
それじゃあ、C言語プログラムを作るわよ!
はいっ!
Copyright © ITmedia, Inc. All Rights Reserved.