以前に共立エレショップで買ってみたATmega168汎用基板キットはAVRマイコン基板としてはスタンダードな作りなので、そのまま流用してArduinoとして動かしてみた。
Arduinoはフィジカルコンピューティング用のマイコンボードで、物理的な現象に対して何らかの反応を行ったり、逆に物理的な現象を引き起こしたりする作品を、手軽に作成するために考え出されたものだ。
ハードウェア的にはワンチップマイコンボードと同じなんだけど、複雑な処理を高速に行う事はあまり考えずに、人間相手の低速な入出力を主眼としている所が違って、言ってみればゆるい処理をお手軽に開発する為のシステムなわけだ(笑)。
Cやアセンブラで開発すればマイコンの性能をフルに引き出すことができるけど、その為には開発する側にもそれに応じたスキルが必要になるわけで、インタラクティブなアート作品を作りたいだけの人にとっては敷居が高くなってしまうから、Arduinoのようなシステムは理にかなっている。適材適所。
ハンダ付けして基板を組み立てるのに対して、電子ブロックやマイキットを使って回路を作る違いと言えば分かりやすいか?(笑)。
実体はATmegaマイコンにブートローダを書き込んだもので、専用の開発環境でコンパイルしたプログラムがブートローダ経由でフラッシュメモリに書き込まれるから、ライタが不要というメリットがある(自作する時には必要だけど)。
でもその為にはハードウェアに適合したブートローダを作成する必要があって、最新のArduinoは共立のボードと同じATmega168チップが使われているのだが、クロックが16MHzでそこだけが違う。共立のボードは20MHzなのだ。
クロックが違うとタイマ関係の処理が違ってしまうし、なによりもシリアル通信ができなくなってしまう。
Arduinoはソフトウェア、ハードウェア共にオープンソースですべて公開されていて、ブートローダのソースもダウンロードできるから、まずはブートローダを共立のATmega168汎用基板キット用に作り直す。
と言ってもMakefileの
AVR_FREQ ? = 16000000L
を
AVR_FREQ ? = 20000000L
に変えてAVR-GCCでコンパイルすれば良いだけだ。これでクロック20MHzに対応したブートローダができる。コンパイルは\arduino-0010-win\arduino-0010\hardware\bootloaders\atmega168フォルダで以下のように打ち込めば良い。もちろんAVR-GCCは事前にインストールされている必要がある。
make diecimila
ATmegaBOOT_168_diecimila.hexのファイルが残っているとコンパイルされないので、予め削除しておくこと。出来上がったHEXファイルはATmegaBOOT_168_digit.hexとリネームしておく。
ライタでデバイスを消去してから、作成したブートローダを書き込み、次にヒューズビットの設定を変える。
Boot Flash section size=1024 words Boot start address=$1C00; [BOOTSZ=00]
Boot Reset vector Enabled (dafault address=$0000); [BOOTRST=0]
を両方チェックして書き込み、最後にロックビットの設定を変える。
Boot Loader Protection Mode3: LPM and SPM prohibit in Boot Loader Section
をチェックして書き込めばOK。
ヒューズビットの設定は一度書き込めば変わらないが、デバイスを消去するとロックビットの設定はデフォルトに戻るから、ブートローダを書き込んだ時は毎回設定する必要がある。
本物のArduinoはPB5ピンにLEDが接続されていて、ブートローダのみが書き込まれた状態で点滅するようになっているので、同じようにLEDを付ければこの時点でLEDの点滅が確認できるはず。
Arduinoの開発環境側にもクロックの設定があるので、\arduino-0010-win\arduino-0010\hardwareのフォルダを開いてboards.txtに以下の設定を追加する。
digit.name=Arduino Digit
digit.upload.protocol=stk500
digit.upload.maximum_size=14336
digit.upload.speed=19200digit.bootloader.low_fuses=0xF7
digit.bootloader.high_fuses=0xdf
digit.bootloader.extended_fuses=0x00
digit.bootloader.path=atmega168
digit.bootloader.file=ATmegaBOOT_168_digit.hex
digit.bootloader.unlock_bits=0x3F
digit.bootloader.lock_bits=0x0Fdigit.build.mcu=atmega168
digit.build.f_cpu=20000000L
digit.build.core=arduino
Arduinoの開発環境を起動して、Tool->BoardsメニューからArudino Digitを選択。あとはFile->Sketchbook->Examplesから適当なサンプルを開いてコンパイルし、ツールバーの「Upload to I/O Board」で基板に転送する。
転送時は基板上のリセットSWを押してから「Upload to I/O Board」ボタンをクリックする事になっているのだが、何故かそれだと転送に失敗する事が多い。原因は良く分からないけど、順番を逆にして「Upload to I/O Board」ボタンを押してから基板上のリセットSWを押すと大丈夫。
とりあえずサンプルにちょっと手を加えて、二個のLEDが交互に点滅するプログラムを作ってみた。LEDチカチカはマイコン工作の基本中の基本だしね。
それはもうC言語のHello Worldに匹敵するぐらいに(笑)。
このページは xfy Blog Editor?を利用して作成されました。
自作のArduino,共立bootloader168と
研究してきました。
Arduino NG(Alph-011)で、studio4で
出来たXXX.hexをWriteしたいのですが
どのような操作をすれば、良いのですか