GW短期集中連載!マイクロはちゅねで楽しいネット工作の世界へ

第3回 マイコン電子頭脳で,はちゅねを賢く

この記事を読むのに必要な時間:およそ 2 分

ネギ振りプログラミングはマイコン初級レベル

マイコンに入門したとき最初に作るプログラムとしては,⁠LEDを点滅させる」のが常套手段です。マイコンに慣れていても,使ったことのない品種のチップを初めて触る時には,やはりLED点滅をやってみるものです。

ネギ振りはLED点滅と同じプログラムでできますので,マイコン入門にぴったりです。筆者が自分のマイクロはちゅねの駆動に使っているサンプルCコードを公開しますので,以下からダウンロードしてください。他のマイコンでもかなりの部分を流用できるはずです。

マイクロはちゅねの駆動に使っているサンプルCコード:

サンプル・コードについては,1行ずつ読まなくても,全体の流れを把握すれば十分です。マイコンのI/Oポート(沢山あるピンの大半)のうち一つを電磁石に制御に割り当て,そこに0と1を繰り返し出力する,というのがやっていることです図3⁠。

図3 マイコンのI/Oポート(ピン)の一つを電磁石につなぎ,0と1を繰り返し出力すればネギ振りになる

図3 マイコンのI/Oポート(ピン)の一つを電磁石につなぎ,0と1を繰り返し出力すればネギ振りになる

プログラムの構成は図4のとおりです。C言語を知らなくても意味を掴めるのではないでしょうか。なお,図中に「しばらく待つ」という目的のforループがありますが,そのループ回数(10000)は現物あわせで調整する必要があります。

図4 C言語によるネギ振りプログラム例。処理本体よりもハード初期化部が面倒なのだが,ネットからサンプルコードを拾ってきて書き換えるのが手っ取り早い。チップを初めて触るときには必ずこのような簡単なコードを試してみるものだが,ハード初期化部分や各種書式のテンプレートを作る意味合いがある

図4 C言語によるネギ振りプログラム例

じつは,このプログラムを自分でゼロから書いて動かそうとすると,次の3つの問題にぶつかります。

1つ目は,ハード初期化部分を作るのが意外に面倒だという点です。沢山あるポートの設定(入出力方向やディジタル/アナログの切り替えなど)や各種I/F(UART,I2C,SPIなど)の初期設定などを,マイコンのリファレンス・マニュアルを調べつつ丁寧に書かなければなりません。

2つ目は,同じような処理をしようとしても,マイコン品種やコンパイラによって記法が違うという点です。簡単なポート読み書きひとつとっても,書式はコンパイラによってかなり違います。

3つ目は,マイコンのコンパイラはパソコン用のコンパイラ(VC++やgccなど)と異なり,バグが残っていたり様々な機能制約があったりする場合が珍しくない点です。あまりユーザがいないコンパイラほど,その傾向は顕著です。ネギ振り程度の素朴なプログラムが思ったとおり動かず延々と悩む,という事はままあります。

これらへの対策としては,ネット上で情報を集めるのが入門者に一番適した方法です。このため,サンプル・コードやQ&Aなどを簡単に見つけられるポピュラーな品種を選び,なるべく純正の開発環境を使っておくのが無難です。

正確なタイミングでネギ振りを振らせる

図4のコードを動かすことができたら,マイコンの各種機能を一つずつ試していくとよいでしょう。少なくとも割り込み機能(インタラプト)は,マイコンを使っていくうえで避けられないので,最初に体験するのをお勧めします。割り込みとは,何かの処理をしている最中に,別の処理を自動的に起動する機能のことです。その起動は色々なきっかけ割り込み要因でかけることができます。

マイクロはちゅねの場合には,ネギ振りのタイミングを正確なタイミングで行ったり,PCなどとの通信や他のセンサの読み取りを同時に行いながらネギを振る,といった目的に割り込みが使えます。

図5に,正確な周期でネギを振るためのプログラムの構造を示します(サンプル・コードは,先に述べたアーカイブ中にあります⁠⁠。ほぼ全てのマイコンは,一定時間ごとに割り込みをかけるためのタイマーを持っています。そのタイマーに周期を設定したうえで割り込み許可を与えると,ある特別な関数割り込みベクタが定期的に呼ばれるようになります。その関数内部でコイルのON/OFFを切り替えればネギ振りができます。どの関数を割り込みベクタにするかを指定する記法は,コンパイラによって異なります。

なお,割り込みベクタの関数が呼ばれていないときは,main関数のwhile文中の処理が実行されています。複数の割り込みを併用することも可能です。

図5 マイコンでは割り込み機能の利用は避けてとおれない。正確なタイミングで処理をしたり,複数の処理を同時進行するために必要となる。割り込みが頻繁だったり種類が多かったりすると煩わしい問題も起きてくるが,一定周期でネギを振るくらいならごく簡単

図5 マイコンでは割り込み機能の利用は避けてとおれない


次回は,マイコンとコイルをつないで実際に動かす方法について説明します。

著者プロフィール

森岡澄夫(超電磁P)

ニコニコ技術部所属。マイクロはちゅねを皮切りに,はちゅねミク小型化戦争やはちゅねミククローン戦争などで作品を発表。現在は,はちゅね宇宙航空研究開発機構(HAXA)の主謀者として積極的に活動中。

URLhttp://www002.upp.so-net.ne.jp/morioka/