SSブログ

Arduino互換機を自作する [arduino]

今回は、Arduinoを自作します!
2011年11月現在、とても簡単な作り方が出来るようになりました

ある程度Arduinoに慣れてくると、ふと「あー、この作った回路を残しておきたい…」って感じることありませんか?

 回路図を書き残して、プログラムを保存して…
 何日か経ってみたらもう一度その回路を作ることがめんどくさかったり、疲れていたりすると配線を間違えてしまって動かなかったり…じゃあ、もうひとつArduinoを買っておこうか?って思って気がつくと、手元にArduino Duemilanoveが三つ、MEGAがひとつ、NANOが3つ、とかあるようになってしまいます。でもね、結局何の解決になってないし。
 残したい回路が一つ出るたびに数千円は考えます。親せきの男の子に楽しいよって渡すにも数千円だとねぇ、子供の小遣いとしては高いし。
 安くArduinoが作れたらいいのに!でもめんどくさそうだなぁとか、難しそうだなぁって思っていました。

 で、そんなときに見つけたのがこのプロトタイパーズの記事です。
http://pc.watch.impress.co.jp/docs/column/musashino_proto/20090806_307235.html

 おおーっすげー!Arduinoを自作してる!
 しかもすっごいシンプルな回路図だーっ! おお、乾電池で動いてる!
 これならハードウェア初心者の俺にも作れるぞ!

 と思ったわけです。

 で、やってみたい人もいるでしょうから、初心者にわかるように説明です。

 用意するものは、プロトタイパーズを読んでもらえればわかりますので、私が悩んだポイントを中心にいきます。

(材料・ハードウェア系)
 Arduino Duemilanove(1個)※ブートローダー書き込みのため
 ATMEGA168(ATMEGA168PでもOK)(1個)
 SparkfunのFTDI BASIC・3.3V版(1個)※出来上がってから、プログラムを書き込むのに必要
 積層セラミックコンデンサ、0.1μF(3個)
 積層セラミックコンデンサ、10μF(1個)
 10KΩの抵抗(1個)
 1KΩの抵抗(3個:このうち1個はD13のLED点灯用)
 ジャンパワイヤ適宜必要な分だけ
 ・コンデンサーや抵抗は不意の手違いで壊してしまうことも考えて予備もあると安心です。
 ・ATMEGA168を基板に取り付けることも考えて、ICソケットもあったほうが安心。

(材料・ソフトウェア系)
 ブートローダーを書き組むためのソフトとして…参考になったのがこちらです。
http://www.geocities.jp/arduino_diecimila/bootloader/index.html 
まず、このとおりにArduino Duemilanoveを改造(?)し、パソコンに必要なものをインストールしましょう。

インストールするもの。
(1)FTDI BitBang AVR-Writer "avrdude-serjtag"
(2)avrdude-serjtag用設定ファイル"avrdude.conf"をダウンロードして、上書きコピー
(3)avrdudeのGUIラッパー"avrdude-GUI (yuki-lab.jp Version)"
(4).NET Framework 2.0がインストールされていないときは「.NET Framework 2.0」もインストールしてください。
※(1)~(3)は、XPなら「C:\Program Files」フォルダにコピーすれば簡単ですが、VISTAなどの場合は、他のディレクトリにインストールしないと正しく動作しないかもしれません。

 で、新品のチップということで話をすると、
----------------------------------------------------
低速クロック動作にします。
Command line Option 欄に -B 4800 を記述します。
【注意】工場出荷状態のデバイスは高速クロックでは動作しません。
----------------------------------------------------
 ということで、私の新品チップの場合はさらに 「-F」を追加しないとうまくいきませんでした。
 (さらに、高速クロック動作で動かしてみることが書かれていますが、実際には必要ないのでこのままいきます)
 DiecimilaやDuemilanoveなら、記事のままでいいのですが、ここで作ろうとしているのは外付け発振子のいらない8MHzのArduinoなので、ちょっと変わってきます。
 まず、選ぶファイルはプロトタイパーズで説明されているように

----------------------------------------------------
次はProgramタブへ移って、ブートローダを書き込みます。ブートローダはArduino IDEに付属しています。IDEがインストールされているフォルダがarduino-0016だとしたら、arduino-0016→hardware→bootloaders→atmegaとたどっていくと、「ATmegaBOOT_168_pro_8MHz.hex」というファイルが見つかります。これが今回書き込むべきブートローダです。
----------------------------------------------------
ということで、ブートローダのHEXファイルは、「ATmegaBOOT_168_pro_8MHz.hex」を指定します。
(今はarduino-0016ではなく、arduino-0017になっているので読み替えてください)


 さて、ここから重要な作業が続きます。ここを間違うと、最悪チップは動作不能に陥るので注意してください。
(1)まず「Chip Erase」で中身を消去
(2)フューズ・ビットの書き込み
  本来、定義ファイルが「arduino-0017→hardware→bootloaders」の中にある「boards.txt」にすべて記載されているのですが、「ATmegaBOOT_168_pro_8MHz.hex」を内蔵クロックで動かすため値が変わります。
 hFuse=DF
 lFuse=E2
 eFuse=00
 となります。(168/168P共通)
 なお、これはavrdude-serjtag、avrdude、avrdude-GUIを使って書き込む時の設定値です。

 「AVR Studio」を使って書き込む場合は、
 hFuse=DF
 lFuse=E2
 eFuse=F8
 となります。これは、「avrdude」は未使用ビットを0、「AVR Studio」は未使用ビットを1として取り扱うために違う数値になります。(eFuseの未使用ビットは7~3ビットです※この情報は未確認なのでご注意を)

(3)HEXファイル(ブートローダ)の書き込み
「ATmegaBOOT_168_pro_8MHz.hex」を指定

(4)ロックビットの書き込み
「0F」を指定して書き込み

 これで、内部クロック8MHzで動作するArduino互換機ができました。
 ※ロックビットに関しては、ネットの断片的な情報から「おそらくこの値だろう」ということで書き込んでみたら動いたというのが正直なところです。本当は別の値があるのかもしれません、AVRSTUDIOなどで「CF」で書き込んでいる方もいるようです。(詳しい方、どうぞ教えてくださいm(_ _)m)

 ちなみに乱暴なテスト方法では、ブートローダー書き込みに使ったケーブル4本をはずして、Arduinoに電源を入れてD13と連動しているLEDが点滅すればブートローダーがちゃんと働いています。
 ただし、外部クロックのフューズビットに設定してあるときも点滅しますので、あくまで目安です。
 (ちなみにこの方法はとても乱暴な方法ですので壊れても責任は持ちません)

 最後に、これをプロトタイパーズで紹介されているように作成して組み込めばOKです。
 間違いなければ、D13と連動しているLEDがチカチカと点滅をします。

 私の場合、なぜかブレッドボードとチップが接触不良でうまく動かず、基板に作り直してやって動きました。

 あとは、SparkfunのFTDI BASIC・3.3V版を接続してサンプルのBLINKを転送してみてください。
 FTDI BASIC・3.3V版は、スイッチサイエンスが手軽で早く、入手しやすいです。
 秋葉原の店頭で入手したい方は、千石電商の2階フロアのArduinoコーナーや、「マルツパーツ館 秋葉原2号店」などで買えます。


 これが私が作ったArduino(ムサシーノ)互換機です。
RIMG0168a.jpg
 チップの周りにはブレッドボード代わりに使えるソケットを配置してあって、リセットスイッチ(GNDと1番ピンを接触させる)が追加されています。
 乾電池でピコピコ動いているのはなんかかわいいです(^^)
 
 ちなみにここまで来るのに2週間かかりました。
 昨日フューズビットがわからず徹夜して、今日のスケジュールを全部キャンセルし、もう一度プロトタイパーズの記事を読み返してやっと数値を見つけ、さらにそこから直して夕方にやっと動き出しました。ああもう疲れました。
 でも、これでいろいろほっとして安心して眠れます。
(ちなみに、単三電池2本でBLINKのスケッチをどのくらい動かせるかと計ったところ、5日間以上動き続けて、こちらがめんどくさくなってやめました(^^;;;)


5V動作のArduinoについてはこちらです。

Arduino ISPを使った場合はこちらです。
nice!(1)  コメント(0)  トラックバック(0) 

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。