小ネタ 2008-006
AVRマイコンキットLED GameをArduinoに改造する
1. LED GameとArduino
ATMEL社のAVRマイコンを使った電子工作キット「LED Game for AVR」というのが国内で出ている。携帯ゲーム機風のキットである。
ゲームを題材にして手軽にマイコンの学習ができるキットというのが面白い。
一方、海外ではAVRマイコンを使ったArduinoと呼ばれるキットが流行っている。
こちらは、マイコン基板にあらかじめ外付けの部品がほとんど無く、自前でブレッドボードで外部に回路を組んで手軽にテストするためのものである。
特にソフトを手軽に作って試せるように工夫してあり、使いやすいと思った。
2つの回路の特徴を合わせたものを作ってみようと思って、改造してみた。(2008-02-24)
電子工作キット「LED Game for AVR」と、「Arduino Diecimila」
2. LED GAMEをArduinoに改造する
実際に改造して作った回路は、以下の通り。
・FT232(USB-UART)を追加
・リセット回路を追加
・16MHzの発振用水晶を追加
・モニタ用にポートB5にLEDを追加
・元のLED GAMEの回路のBボタンがUART用の信号ピンと重複するので、ポートD1からD3に変更する
回路の概略図
UART部分の回路図
・UARTのTXD,RXDを接続する
・遠隔リセット操作用にUARTのDTR信号でリセットできるように、DTRとリセット回路を接続する
・手動でのリセットもできるようにスイッチを接続する
遠隔リセット機能は、無くても手動のリセットで済むのだが、有れば毎回ソフト書き込み時に手動でリセットしなくても済むので便利
実際に作製した "LED GAME + Arduino"
GreenCardというキットを流用してUSB-UART部分を作製した
USB-UART用のICとして、今回はFT232BMを使用した。
FT232Rの電子工作用の基板も各社からいくつか出ているので、そちらを使えばGreenCardを使わなくても作製することは可能。
マイコンATMEGA168には、Arduino用のBootLoaderのソフトを書き込む。これにより、UART側からソフトを読み込んでマイコンのフラッシュメモリに保存したり実行できるようになる。
3. ソフト作成
Arduinoの開発用ソフトを使って、LEDを全点灯/消灯させるテスト用ソフトを作ってみた。
[ テスト用ソフト led_game_demo.lzh ソースコード (download) ]
(後日加筆 2008-03-11)
LED Game for AVRは、2008年2月27日に完全にフリー化されたそうだ。
曰く、
>『2008/02/27 「LED Game for AVR」を完全にフリー化しました。当ページで公開しているプログラムと基板データを商用/非商用に関わらず自由に利用できます。自力で改良して、よりいいものにしていきましょう。』
とのこと。 (ありがたく使わせて頂いております。感謝。)
(後日加筆 2008-04-05)
上記で作製したArduino化「LED Game」は、とりあえず回路がうまく動くかどうか試すために作ったプロトタイプ品だったりする。
ちゃんとした筐体に入れた本番を作ってみる。
任天堂というメーカーの携帯ゲーム機「GAME BOY」のジャンク品の筐体を流用した。
筐体に入れる理由
・使いやすい。ゲームに使う場合、操作がしやすい。
・携帯して持ち運びするのも容易。
・基板むき出しのキットだと、ゲームソフトを書き込んで玩具として小さい子供に触らせるのが危険だったりする。(半田に含まれる鉛とか)
・画面の赤色がバーチャルボーイ(2D)風。
まだ作り中。 Arduino化できていないが、それ以外ほとんど出来ている。
・単3電池4本で駆動。
・筐体の上部に電源スイッチ。
・十字ボタンとA,Bボタンで操作可能。
・いまのところ、ソフトの書き換えができない状態。
・Arduino化し、USBコネクタ(miniUSBコネクタ)を付けて、外部から書き換えができるようにする予定。
(余談)
ArduinoとGAMEBOYを接続するArduinoboyというのがあるらしい。
今回作った回路を自分はそんなコードネームで呼んでいたのだが、既に同名のものが存在していたとは知らなかった。
Wiiリモコンからポインティング用の赤外線センサ部品を取り出してArduinoに接続するのを試してみた。(2008-04-13)
(I2Cで接続できるのだが、赤外線センサが3.3Vの回路なので、I2Cバス電圧変換回路を作った。)
AVR mkII Lite (JTAGICE mkII / DebugWIRE clone)を使ってみた。 (2008-08-10)
AVRマイコンの開発環境は、WinAVR(gcc)とAVR Studioとの組み合わせを使う場合が多く、ネットや本で入手できるサンプルコードがWinAVR用だったりする。Arduino環境では凝ったものを作る場合に苦労することになりそう。そこで、WinAVRを試してみることにした。
AVR Studioを使うと、統合環境上からインサーキットデバッガの機能を使うことが可能である。純正のデバッガは高価なのだが、安価なcloneがあると知って導入してみた。その際に難しかった注意点などを書いておく。
(1)ハードウェアの注意点
使用した機材
・KEE Electronics社のAVR mkU Lite
・ターゲット接続用のISPケーブル
・Arduino Diecimila (w/ATMEL ATMEGA168)
AVR mkII Liteの本体にISPケーブルを接続するための10ピンコネクタのピンアサインが分からなくて困った。
この写真で、左上からMISO,SCK,/RST,GND,MOSIの順で、下段は左下からGND,GND,GND,GND,VTGという順になっている。
AVR mkII Liteは、ISP用書き込み機の機能と、DebugWIREを使ったデバッガ機能の2つの機能を持っている。
ISP機能を使う場合の6ピンのISPケーブルに変換する必要がある。StrawberryLinuxで売っているSparkfunの変換基板を使うと簡単に作製できる。
DebugWIRE機能を使う場合は、リセットピンのみを接続したケーブルを作る必要がある。とりあえずISP用のピンの部分を使わないソフトをデバッグするならば、わざわざケーブルを作らなくてもISPケーブルで代用できる。
DebugWIRE機能を使う場合には、ターゲットとなるArduino基板に手を加える必要がある。DebugWIREではリセットピンを使って通信するため、リセットピンに余分な回路が接続されていると誤動作するおそれがある。プルアップ抵抗の抵抗値に気を付けるように説明書に書いてあった。
写真の矢印の部分のチップコンデンサーを取り外した。これはPCからシリアルポートのDTR信号を使ってATMEGA168の遠隔リセットをするための回路なのだが、このコンデンサーが接続されていると正しくDebugWIREモードでの通信ができないためである。
(2)ソフトウェアの注意点
使用したソフト
・WinAVR (WinAVR-20080610)
・AVR Studio4 (Version 4.13 build 528)
・AVR mkII LiteのUSBシリアル通信IC用のドライバ (ARK3116)
WinAVRとAVR Studioは、インストーラーを使ってすんなりインストールすることができた。
USBシリアル通信IC用のドライバが難物だった。ArkMicroという会社のチップらしいが、聞いたことがない会社だ。
AVR mkII Liteの付属のCDの中にARK3116.rarが入っているので、中からARK3116.exeを取り出す。
ARK3116.exeがインストーラーなので、実行する。
インストーラーの表示がロシア語(?)なので読めないが、全部OKとかNextっぽいのを選択すると無事に終了する。
C:\Windows\Ark\というフォルダが作成され、中にドライバのファイルが生成されている。これだけではドライバがOSには組み込まれていないので、注意。
AVR mkII LiteをPCのUSBポートに接続するとドライバを要求してくるので、先ほどのドライバのファイルを指定する。
このとき誤認識して、"USB-IRDA"という機器のドライバのインストールを要求してくることがあるが、IrDAのドライバをインストールしては駄目なので、キャンセルすること。ケーブルを接続しなおしたり、PCを再起動したりするとUSB-IRDAと出なくなる。
PCの起動時にAVR mkII LiteがPCに接続されている場合にも誤認識することがあるので、PC起動時にはUSBケーブルを抜いておくこと。
ISPケーブルを挿している状態でUSBケーブルをPCに接続した場合も誤認識することがあるので、USBケーブルの抜き差し時にはISPケーブルを抜いておくこと。
(3)使用時の注意点
・ISP機能
AVR Studioで、メニューバーの"Tools"の中の"Program AVR"の"Connect"を選択すると、ISP機能を使うことができる。
Select AVR Programmerというダイアログが出るので、"JTAGICE mkII"と、シリアルポート番号を選択する。
ISP機能で、FLASHメモリの書き込みや読み出し、ヒューズ設定などができる。
・DebugWIRE機能
AVR Studioで、メニューバーの"Debug"の中の"Start Debugging"を選択すると、デバッグ機能を使うことができる。
注意すべきなのは、ATMEGA168マイコンのISP機能とDebugWIRE機能は切り替え式になっており、どちらか一方に設定してそちらの機能しか使うことができないことである。このせいで多少ややこしいことになっている。
マイコンの出荷時にはISP機能に設定されているので、そのままではDebugWIRE機能を使うことができない。DebugWIRE機能を有効にするには、ISP機能を使ってATMEGA168マイコンのヒューズを設定する必要がある。
"Start Debugging"でデバッグ機能を開始したときにATMEGA168マイコン側のDebugWIRE機能が有効になっていないと、エラー表示が出て、DebugWIRE機能を有効にするかどうか聞いてくる。これを選択すれば普通は自動的にDebugWIRE機能が有効になり、デバッグ機能を使うことができるはずである。
あからじめISP機能を使って手動でヒューズを書き換えておくのも可能。
自動にしても手動にしてもISPケーブルで接続されていないと切り替えができないので、Debug用にリセット信号のみのケーブルを使っている場合には、切り替えの操作時だけケーブルをISP用ケーブルに取り替えること。
DebugWIREからISPに戻すには、デバッグ機能の設定画面の中の"Disable DebugWIRE"でISPに戻すことができる。これが分かりにくかったりする。
あと、Arduino基板を使う場合には問題ないが、ATMEGA168マイコンに内蔵されているオシレーターを使っている場合や低い周波数の水晶を使う場合には、CLKを1/8に分周する設定のヒューズに注意すること。メインクロックが低い場合、DebugWIREで要求しているクロックに満たないとDebugWIREが正しく機能せず、たぶんエラーが出てしまう。
クロック関係の設定などのヒューズ設定はISPからでしか設定できないので、正しくないヒューズ設定でDebugWIREに切り替えると元に戻せずにハマってしまうことがある。特に注意すること。
Arduino Diecimilaの後継機種のArduino Duemilanoveというのが出ている。(2008-10-29)
新しいArduinoの変更点
・電源の選択JPが無くなって、自動切り替え回路が追加された。
・RESET-ENという基板上のショートランドがあり、DTR信号を使った遠隔リセットを有効/無効の設定ができる。場所がUSBコネクタの直近なので、カット作業がしにくい。