#topicpath ** 自作の Arduino を使う [#ddca75af] *** なぜ自作の Arduino を使うのか [#dd0947b5] ++ 安い~ 今時、ネットブックと呼ばれるノートパソコンが3万円程度でも買えます。ノートパソコンではモニターできる環境、電源のバックアップ、ネットワークインターフェースにキーボード、等など、様々な装備が充実しています。そんな中、マイコンボードが数万円してどうするのだろうか?と思います。数万円のマイコンボードで何かするくらいなら、パソコン自身を利用した方がよいのでは?。~ 逆に、よりずっと安価なマイコンであれば使う意味があります。大量に展開できる可能性があるからです。そして、可能な限り徹底的に安くすべきだと思います。秋月電子では、AVR マイコンで Arduino に利用できる ATmega 168P を 14 個以上購入すると、1個あたり 270円になります。 ~ ~ ++ USB ポートは必要ない~ 標準的な市販品の Arduino では、USB ポート部分(シリアル変換機能)を持っていることで値段が高くなっている部分があります。~ ところが、実際にスタンドアローンで稼働させる場合、USB ポートをつけながら動かす必要はありません。パソコンからプログラムを送る時だけ接続していればいいのです。~ だから、USB 通信部分と本体部分は別々に作るべきです。 ~ ~ *** Arduino を自作する −Duemilanoveタイプ−[#g8dc9d66] ネットを見ると、Arduino を自作するにも様々な種類があります。ここでは、Duemilanoveと似たものと、USB直結タイプを作ります。 ++ 部品~ +++1つずつ必要なもの~ |種別 |型番|価格|URL| |AVRマイコン| ATmega168P | 300 | http://akizukidenshi.com/catalog/g/gI-03033/ | |ブレッドボード| EIC-301 | 150 | http://akizukidenshi.com/catalog/g/gP-00313/| ~ +++ 複数個のためにまとめて買うもの~ |種別 |型番|価格|何個分?|URL| |ワイヤ|KQE0.5mm 50m|1040 |いっぱい|http://www.sengoku.co.jp/mod/sgk_cart/search.php?code=4ASM-KMLX| |水晶発振器|16MHz|500|10個|http://akizukidenshi.com/catalog/g/gP-00545/| |コンデンサ|0.1μF|100|10個|http://akizukidenshi.com/catalog/g/gP-00090/| |抵抗|10kΩ|100|100個|http://akizukidenshi.com/catalog/g/gR-25103/| |タクトスイッチ| |700|100個|http://akizukidenshi.com/catalog/g/gP-01282/| |ジャンパワイヤ| |300|いくつか|http://akizukidenshi.com/catalog/g/gP-02933/| ~ +++ シリアル変換部で使うもの~ |種別 |型番|価格|何個分?|URL| |USBシリアル変換モジュール|FT232RL|950|1個|http://akizukidenshi.com/catalog/g/gK-01977/| |抵抗|1kΩ|100|50個|http://akizukidenshi.com/catalog/g/gR-25102/| |コンデンサ|0.1μF|100|10個|http://akizukidenshi.com/catalog/g/gP-00090/| ~ ~ +++ ブートローダを仕込むために必要なもの |種別|型番|価格|URL| |マイコンライタ|AVRISP mkII|4000|http://akizukidenshi.com/catalog/g/gM-02582/| ++ 作る +++ ATmega168P にラベルを貼る。~ ラベルは、[[このサイト>http://todbot.com/blog/2009/05/23/arduino-chip-sticker-label/]]にある[[PDFファイル>http://todbot.com/blog/wp-content/uploads/2009/05/arduino-atmega-sticker.pdf]]をダウンロードし、使わせてもらう。~ 貼らなくてもいいけど、貼った方が間違いが少ないと思う。~ CENTER:&ref(ArduinoLabel.jpg,,400x300);~ ~ LEFT:なお、ICチップのルールとして、切り欠き(半月状に凹んだところ)を左側にしたときに、~ 左下のピンを1番とし、反時計回りに番号をふっていくルールがある。この番号はここでも使うので確認しておきたい。~ また、1番ピンの近くには、丸いくぼみもある。これもルールとして覚えておきたい。 ~ ~ プリントされたくぼみの部分を合わせて合わせてラベルを貼るようにする。(つまり、1番のピンに rst 28番のピンに ai5 が対応する。)~ ~ +++ 本体部分の構成~ 写真のように配線する。左下の白いボタンは「タクトスイッチ」、左上は10kΩの抵抗。青い部品は0.1μFのコンデンサ。銀色のものは水晶発振器。~ CENTER:&ref(ArduinoWired.jpg,,400x300);~ LEFT:銀色の水晶発振器は、9番ピン(xt1)と10番ピン(xt2)の間につなぐ。 ここで、公開されている設計図との違いについて説明する。将来、動作が不安定になったらここを疑う。 ○ 水晶発振器とグランド(GND)との間のコンデンサ(それぞれ22pFの)を省いた ○ 両側のGNDは内部で接続されているようなので両者の間の接続を省いた +++ USBシリアル変換部~ パソコンからのUSBケーブルを接続する部分を写真のように組み立てる。~ CENTER:&ref(USB232.jpg,,400x300);~ LEFT:基盤に書いてある文字はピンの間に書いてあって紛らわしい。下に当たるピンが該当する。~ 抵抗はどちらも1kΩ、コンデンサは0.1μF。~ CENTER:&ref(Arduino_USB.jpg,,400x300); |変換モジュール側|間に挟むもの|Arduino 本体側| |Vcc| | Vcc(7番)あるいは AVcc(20番)あるいは上段| |DTR| コンデンサ 0.1μF| rst(1番)| |TxD| 抵抗1kΩ|rxd(2番)| |RxD| 抵抗1kΩ|txd(3番)| |GND| |gnd(8番、22番)あるいは下段| ++ ドライバ・開発環境~ [[Arduino のプログラミング環境を整える>../ArduinoIDE]]を参照してドライバとArduinoIDE(統合開発環境)を入れる。~ ~ ※ Arduino IDE の変更について~ [[ここの追記3>http://www.geocities.jp/arduino_diecimila/bootloader/index.html]]のような情報はあるが、Arduino 017 では hardware/tools/avr/etc/avrdude.conf の変更は不用なようである。 ~ ~ ~ ++ ブートローダ +++ 準備1 : AVRISP mkII の接続~ これを Windows パソコンに接続して、ハードウエアを検出させてから付属の CD を入れる。~ ドライバが CD に入っているので、ここを指定してドライバを導入する。 +++ 準備2 : AVR Studio を CD から導入する。~ +++ 準備3 : AVR Studio を起動する。~ 起動直後に立ち上がる Window は Cancel で消去する。~ 小さなチップに"Con-"と書かれたアイコンをクリック。Platform-> AVRISP mkII と Port-> USB を設定して Connect。~ 初回はいろいろと言われるが、適当に処理する。 +++ 接続 : ~ [[武蔵野電波のデジタル式FMラジオ>http://pc.watch.impress.co.jp/docs/column/musashino_proto/20090806_307235.html]]を参照して、AVRISPmkIIと本体とを接続する。 |AVRISPmkII|Arduino本体| |1番|d12 (18番)| |2番|Vcc (7番あるいは上段)| |3番|d13 (19番)| |4番|d11 (17番)| |5番|rst (1番)| |6番|gnd (8番、22番あるいは上段)| ~ AVRISPmkIIとは別に電源を確保する必要がある。そこで、USBシリアル変換部をUSBケーブル軽油でPCに接続する。 +++ ブートローダを書き込む~ 再び[[武蔵野電波のデジタル式FMラジオ>http://pc.watch.impress.co.jp/docs/column/musashino_proto/20090806_307235.html]]を参照して、ブートローダを書き込む。~ ただし、上の記述は内臓のクロックを使うものである。そこで、 Program : ATmegaBOOT_168_diecimila.hex Fuses : Extended 0xF8 High 0xDD Low 0xFF Lock bits : 0xEF とする。(ちゃんと確かめていない…)~ ※ なお、未使用ビットの表し方が arduino と AVR Studio とで異なるという重大な事実がある([[参考URLはこちら>http://roshiago.blog.so-net.ne.jp/2009-08-23]])。~ ~ ~ ++ うまくいかないとき~ 次のようなメッセージに随分悩んだ。(Windows の場合のエラーメッセージ) avrdude: stk500_getsync(): not in sync: resp=0x00 avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51 次のような対応を考えるべき。~ ~ +++ シリアルポート~ Tools > Serial Port で指定するシリアルポートを正しく設定する。ケーブルを抜いて消えたデバイス名。 +++ ボード~ Tools > Board で指定するボードを確認。 +++ 配線~ よく確認する。特に、USBシリアル変換器 の (RxD, TxD) は、Arduino の (TxD, RxD) と、クロスして接続することに注意。 +++ Fuse Byte~ 特に extended は、ブートローダの大きさを指定している。また、上書きされないように、Lock bit も正しく。 // +++ 準備2 : [[ここ>http://isi.kicks-ass.net:8080/isi/bakilog-2.0/isiduino-168p]]を参照して、bootloader のソースに手を加える。→ コンパイルできなかったので、意味がなかった。2009-07-31 (金) 18:32:16 // +++ 準備3 : boards.txt も編集する。168p のエントリを作る。 // +++ ブートローダを仕込む方法 : 当面は、[[このページ>http://arms22.blog91.fc2.com/blog-entry-219.html]]に書いてある方法が一番楽。 // まず、スケッチをダウンロードする。そして編集。 // enum { atunknown=0, atmega8=0x7, atmega48=0x5, atmega88=0xa, atmega168=0x6, atmega168p=0xb }; // ~ // case atmega168: の後に続けて、case atmega168p を加える。 // ~ // #define PULSE_SCK(level) { *sckport |= sckbit; delayMicroseconds(10); *sckport &= ~sckbit; delayMicroseconds(10); } // …うーむうまくいかない。なぜだろう。2009-07-31 (金) 18:32:16 ~ *** 資料 [#ocadf2a0] ++ 履歴 +++ 配線は完了。2009-07-31 (金) 16:35:45~ しかし、ブートローダを仕込んでいないので動かない。 +++ とりあえず動く。2009-08-25 (火) 16:16:44~ とりあえずうまく動いた。この辺は改めて整理する。 +++ なんとかまとまる。2009-09-07 (月) 18:01:45 ++ 参考 URL :~ [[Duemilanoveの回路図>http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf]]~ [[秋月 FT232RL(AE-UM232R)のマニュアル>http://akizukidenshi.com/download/20090514ft245rlmodule_manual.pdf]]~ [[「はじめてのArduino」>http://isi.kicks-ass.net/blog/isi/bakilog-2.0/categories/arduino]]の写真~ [[「ブレッドボードでArduino」>http://zampoh.cocolog-nifty.com/blog/2008/04/arduino_b87f.html]]の写真