連載
» 2009年11月18日 00時00分 UPDATE

イチから作って丸ごと学ぶ! H8マイコン道(8):ポートを使いこなし、いざ制御プログラミングの世界へ (1/3)

制御システムの基本といえるスイッチとLEDによる入出力回路の動作を理解したうえで、C言語によるポート制御を行う!!

[横田一弘 埼玉県立新座総合技術高等学校 教諭,@IT MONOist]

前回のあらすじ

――完成したマイコンボード「H8Tiny-USB」を手に、喜び勇んで大学のサークル仲間の元へ向かった健一君。しかし、肝心の使い方が分からない健一君に対し、先輩の晴子さんは怒り心頭。急きょ、H8マイコンの制御プログラミングの指導を受けることに……。晴子さんのペースに翻弄(ほんろう)されながらも、何とかソフトウェア開発環境を構築した健一君ですが、宿題も出され、すでにヘトヘト状態です。前回へ

 さて、午後の授業も終わり、そろそろ健一君が来るころです……。


本連載の登場人物

ay_S_icon_ani.gif
佐藤 健一(さとう けんいち)
電子工学を専攻している大学2年生。ロボットサークルに参加している。最近、やっと電子工作ができるようになったが……。

ay_H_icon_ani.gif
岡野 晴子(おかの はるこ)
健一君が所属するサークルの先輩。組み込みソフトウェアを研究しており、サークルでも中心的な存在。活発で頼れる(健一君あこがれの)女性。



※注:本連載では、筆者が実際にH8Tiny-USBを制作し、動作確認を行った内容を掲載していますが、読者個人で作成したH8Tiny-USBの動作保証や、H8Tiny-USBを使用したことによる、損害・損失については一切保証できません。すべての作業は自己責任で行ってください。よろしくお願いします。


H8Tiny-USBのハードウェアを分析しよう

ここは健一君が所属する大学のサークル部屋。また、いつもの足音が聞こえてきました……。

photo

こんにちは!


photo

あら、健一君じゃない。


手に持ってるのマンガみたいだけど、宿題のこと、もちろん忘れてないわよね?


photo

ギクッ!!


ハハハッ……(汗)。


な、何だか急にお腹が痛くなってきたなー。ちょっと、トイレに行ってきます。


photo

ちょっと!! ごまかさないでよ。


まぁ、いまの健一君の実力じゃあ、あの宿題を解くのは『ムリ』よね。


フフッ。


photo

ビクッ!!


えーと、そのー。


ぜひ今日もご指導いただけると……。


photo

まったく!


いいわ。ワタシがみっちり教えてあげるから。



――ソフトウェア編に突入した「H8マイコン道」も今回で2回目となりました。前回の晴子さんの宿題は、まだ何も知らない健一君には少々荷が重かったようですね。早速、C言語プログラミングをはじめたいところですが、まずはH8Tiny-USBのハードウェアについて調べてみましょう。プログラミングに入る前に、あらかじめ回路の動きを理解しておくことはとても大切です。

 制御システムにおいて、“スイッチからの入力”と“LEDへの出力”は、最も基本的なものといえるでしょう。これらの入出力回路は、マイコンのポートに接続されており、人間とマイコンとの対話の手段になっています。

 本稿のはじめに、「人間によるスイッチの操作が、どのようにマイコンに伝わるのか」、また「人間が情報を認知できるように、マイコンからどのような信号を出力するのか」について解説していきます。

スイッチ入力回路の動作

 図1にH8Tiny-USBのスイッチ入力回路を示します。ご覧のとおり、スイッチはH8マイコンのポート1に接続されています。

スイッチ入力回路 図1 スイッチ入力回路

 スイッチが押されていないとき、ポートの電位は電源(Vcc)の電位、すなわち「1(High)」です。スイッチが押されると、ポートはグランドに接続されます。その電位はゼロ、すなわち「0(Low)」です。

 以上のように、“スイッチを押した”という操作は、マイコンに「0」信号で伝えられるのです。

7セグメントLED表示回路の動作

 続いて、7セグメントLED表示回路の動作についても確認してみましょう。H8Tiny-USBの7セグメントLED表示回路は、「ダイナミック・ドライブ」と呼ばれるタイプのものです。

(a)ポート独立(b)ダイナミック・ドライブ 図2 7セグメントLEDとマイコンとの接続/(a)ポート独立 (b)ダイナミック・ドライブ

 7セグメントLED表示回路には、図2(a)のように7セグメントLEDをポートに直接接続する方法もありますが、この方法だと表示するけたが増えた場合、多くのポートが必要とされます。

 一方、図2(b)のように表示データを共通化し、表示するけたを高速に切り替えることで、複数のけたが同時に表示されているように見せかける方法もあります。この方法ですと、ポートを節約できますが、その半面、絶えず表示を切り替えなければなりません。この方式をダイナミック・ドライブと呼びます。

 それでは、H8Tiny-USBの7セグメントLED表示回路について詳しく見てみましょう。

 図3をご覧ください。H8マイコンのポート5を表示切り替えに、ポート8をデータ表示に使っています。

7セグメントLED表示回路 図3 7セグメントLED表示回路

 7セグメントLEDは「アノード・コモン型」なので、コモン端子に電源を印加し、カソードをLowにすることでLEDが光ります。

 7セグメントLEDの8つのLEDを光らせるには、ポートの電流能力をトランジスタで増幅する必要があります。いま、ポート5から「0」を出力すると、トランジスタのベースの電位が下がるので、ベース電流が流れます。するとトランジスタがON状態になり、そのけたの7セグメントLEDが発光可能になります。反対に、ポート5から「1」を出力すると、ベース電流は流れません。トランジスタがOFF状態なので、7セグメントLEDは光りません。

 さらに、7セグメントLEDに数字を表示させるには、ポート8から表示パターンを出力します。このときも「0」信号でLEDが光りますので注意してください。

ポートは2種類のレジスタで操作するのだ!

photo

それにしても、スイッチONで“ゼロ”なんて、何か気持ち悪いなー。


photo

そうかもね。


ちなみに、ゼロで回路がアクティブになることを「負論理」っていうのよ。


photo

へー。知らなかった。


じゃあ、ゼロで点灯する7セグメントLEDも負論理ってことですね。


photo

そのとおり!


健一君、回路の動きが理解できたようね。


それじゃあ、C言語プログラムを作るわよ!


photo

はいっ!



       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.