マイコンはどうやって動くのか? 〜LEDを光らせてみる〜:魔法の部品“マイコン“を使いこなそう!(3)
今回はCPUがどのように周辺機能を動かしているのかを説明します。さらに、Spansion(スパンション)製のARMマイコン「FMファミリ/MB9BF568R」を例に、LEDを光らせる方法を説明します。
前回はマイコンで何ができるかを知るために、その中身を少し詳しく見てみました。さらに、ARM(アーム)と呼ばれるマイコンの種類について説明しました。
今回はCPUがどのように周辺機能を動かしているのかを説明します。後半では、Spansion(スパンション)製のARMマイコン「FMファミリ/MB9BF568R」を例に、LEDを光らせる方法を説明していきます。
マイコンへの命令書が「プログラム」
マイコンが、CPUと周辺機能からなる電子部品であることは、前回説明しました。では、実際にCPUはどのように周辺機能を動かしているのでしょうか? いくら有能な計算機でも、何を計算させたいかを入力しなければ動きませんよね。
この「マイコンに何をさせたいか」を表す命令が書かれているのが「プログラム」です。
そして、マイコンの中でこのプログラムを格納する場所を「メモリ」といいます。メモリは、ある一定の大きさの箱の集まりからできていて、各箱にその位置を示す「アドレス」が割り振られています。
一般的に、プログラムを格納するメモリには、電源を切ってもデータが消えない、不揮発性メモリが使われています(逆に、電源を供給しなければデータを保持できないメモリを揮発性メモリといいます)。
Spansion製FMファミリでは、プログラムを格納するメモリとして「フラッシュメモリ」を搭載しています。フラッシュメモリは、電源を切ってもデータが消えず、データの書き換えが可能なため、万が一プログラムに間違いがあった場合でもプログラムを修正して再び書き込むことができます。
さて、ここまでマイコンを動作させるために「プログラム」が必要であること、そのプログラムを格納する「メモリ」がマイコンに搭載されていることを説明してきました。ここからは、CPUがフラッシュメモリに保存されたプログラムを使って、どのように周辺機能を動かしたり、計算をしたりしているかを見ていきましょう。
1.フラッシュメモリにプログラムを書き込む
まず、マイコンを動かす準備として、作成したプログラムをマイコンに搭載されているフラッシュメモリに書き込みます。書き込み方法は、実際にマイコンに積まれている周辺機能によって変わってきますが、USBを使用する方法や、マイコンの周辺機能のシリアル通信機能を使用する方法などがあります。いずれの方法でも、マイコンの端子を通して書き込みを行います。
2.CPUがフラッシュメモリからプログラムを読み込む(命令フェッチ)
電源を入れると、CPUはフラッシュメモリのプログラムを取りに行きます。この動作を「命令フェッチ」といいます。CPUは、プログラムを正しい順番で取りに行くために、次のプログラムが置かれているフラッシュメモリのアドレスを自分の中に持っています。CPUは、このアドレスを見て、フラッシュメモリにプログラムを取りに行きます。取り出したプログラムはCPUに保存されます。
3.CPUがフラッシュメモリから取ってきたプログラムを解析する(命令デコード)
次に、CPUは「2.」でフラッシュメモリから取ってきて保存したプログラムが、どのような命令なのかを解析します。この動作を「命令デコード」といいます。
4.CPUが解析した命令を実行する
最後に、CPUは「3.」で解析した命令を「実行」します。周辺機能を動かすために命令を出したり、計算を行ったりします。周辺機能は、CPUからの命令に従って動作を開始します。
ここまでの説明を簡単にまとめます。
・マイコンにはプログラムを格納するメモリが搭載されています。
・マイコンを動かすには、あらかじめメモリにプログラムを書き込む必要があります。
・CPUは「命令フェッチ」「命令デコード」「実行」の順番で命令を処理して周辺機能を動かします。
LEDを光らせよう
現在、身の回りには、LED(発光ダイオード)を使用した製品が数多く存在します。イルミネーションの電飾、信号機やLED電球、電車の行先掲示板なんかにもLEDが使われています。このように、さまざまなところで使用され、今や私たちの生活になくてはならないLEDですが、実はマイコンを使用すれば、簡単に制御することができます。マイコン内部の周辺機能を使用することで、LEDをただ光らせるだけではなく、一定の間隔で点けたり消したり、明るさをゆっくり変えていったりといった、電池を付けるだけでは実現できない少し複雑な動作をさせることができます。この少し複雑な制御については、次回に説明することにします。
ここからは、Spansion製FMファミリ「MB9BF568R」を例として、LEDを光らせる方法を説明します。
MB9BF568Rは、ARM社のCPUを搭載しているARMマイコンです。マイコンに電源を供給するためのピンも含めて120本の端子を持っています。ここでは全てを書きませんが、周辺機能としては、USBと接続するためのUSBインタフェース、アナログ信号をデジタル信号に変換するA/Dコンバータ、逆にデジタル信号をアナログ信号に変換するD/Aコンバータ、時間を計ったり信号の幅を測定したりするのに使用するさまざまなタイマーなどを搭載しています。
今回は、MB9BF568Rの14ピン(14番目の端子)「P30」にLEDを接続します。また、マイコンに供給する電源の電圧は3.3Vとします。
「P30」は「汎用I/Oポート」という機能により、端子を入力方向に設定したり、出力方向に設定にしたりすることができます。入力方向にすると、外部からの信号をマイコンに取り込むことができます。出力方向にすると、マイコンから電源電圧と同じくらいの電圧の信号(Hレベル信号)を出したり、出力を0V(Lレベル)に落としたりすることができます。
プログラムを作成する前に、何をやりたいのかを整理しておきましょう。
今回やりたいこと(マイコンにさせたいこと)は、P30に接続したLEDを光らせることです。では、どうすればLEDは光るのでしょうか?答えは簡単で、豆電球と同じように電源を使ってLEDに電圧をかけて電流を流せばいいのです(電流の流れすぎで電源やLEDを壊さないように、必ず抵抗を入れましょう)。今回はLEDに電圧をかける役割をMB9BF568Rに担ってもらいます。
やりたいことが明確になったら、いよいよプログラムを作成します。今回は、P30に接続しているLEDに電圧をかけたいので、まずは、P30を出力方向として使用するようにプログラムします。次に、P30からHレベルを出力させるようにプログラムします。これでプログラムは完成です。作成したプログラムをマイコン内部のフラッシュメモリに書き込みましょう。
ここまで来たらあとは、簡単です。マイコンに電源を入れるだけで、CPUが、フラッシュメモリからプログラムを読み出し、命令を解析して、汎用I/Oポートに「P30を出力設定して、Hレベルを出力しろ」という命令を出してくれます。汎用I/Oポートは、CPUからの命令通りにP30からHレベル(今回の場合は3.3Vくらい)を出力します。
これで、LEDに電圧がかかり、LEDを光らせることができます。
今回は、マイコンのCPUがどのように周辺機能を動かしているのかを見ていきました。また、FMファミリMB9BF568Rを使ってLEDを光らせる方法を説明しました。次回は、MB9BF568Rの周辺機能を利用して、もう少し複雑にLEDを光らせる方法を考えてみましょう。また、マイコンがどのようなものに使用されているのか、FMファミリを例に具体的見ていき、私たちの生活にマイコンがどのように関わっているのかを見ていきましょう。
※この記事は電波新聞社発行の電子工作マガジンの2013冬号に掲載されたものです。許可を得て転載しています。
提供:Spansion Inc.(スパンション)
アイティメディア営業企画/制作:EE Times Japan 編集部/掲載内容有効期限:2014年5月22日
Copyright © ITmedia, Inc. All Rights Reserved.