2011/07/27

Macで自作Arduino : ATmega168PとFT232RLで作る



流行りに乗っかってArduino自作してみることにした。
調べてみると多くの人がやっていて手順を公開しているのでいいところを持ってきて作り方まとめてみた。

手順としてまず自作Arduinoを作るにはAVRマイコンにブートローダというファームウェアを書き込む必要がある。これは色々種類があるがArduino Duemilanoveを書込むことにする。
またブートローダの書込みはAVRライターなどを使うのが普通だが、今回は秋月のUSBシリアル変換モジュールFT232RLを使うことにする。これはAVRライター兼スケッチの書込みに使えるので一石二鳥。
もしAVRライタがあればそちらを使ったほうが早いかもしれないです。コスト重視です。
Arduino/Arduino の自作/ブートローダを仕込む

手順は、
①ブレッドボードにAVRなど配線する②ターミナルでAVRにブートローダを書き込む③Arduino IDEからスケッチを書き込む④おわり


ブートローダの書込みはBitBang Mode AVR-Writer on MacブレッドボードでArduinoを参考にしました、先人達に感謝。


①ブレッドボードにAVRなど配線する


必要部品 1個分
部品 規格個数
AVRマイコン ATmega168P 1
USBシリアル変換モジュール FT232RL 1
水晶発振器 16MHz 1
コンデンサ 0.1μF 1
コンデンサ 22pF 2
抵抗 1kΩ 2
抵抗 10kΩ 1
タクトスイッチ 何でも 1
ブレッドボード 何でも 1
ジャンプワイヤ 何でも 数本

ブレッドボードにAVRやシリアル変換モジュールなどの部品を配線する。
配線は外付けAVRライタ無しでBootloaderを書き込むの一番下を参考にする。
(※モジュールからのプラスマイナスを間違えないこと。AVRがかなり発熱します)
マイコンに貼るラベルはこちらのPDFを使う。


②ターミナルでAVRにブートローダを書き込む

USBシリアル変換モジュールのドライバ D2XXをインストールする。
MAC OS Xの最新版1.0.4をダウンロードする。
ダウンロードなどに保存後、展開する。
展開後、'D2XX'を「ユーザ」→「(ユーザ名)」に移動

ターミナルを開いて以下コマンドを実行する。
sudo mkdir /usr/local/lib
sudo mkdir /usr/local/include
sudo cp D2XX/bin/10.5\ -\ 10.6/libftd2xx.1.0.4.dylib /usr/local/lib/libftd2xx.1.0.4.dylib
sudo ln -sf /usr/local/lib/libftd2xx.1.0.4.dylib /usr/local/lib/libftd2xx.dylib
sudo cp D2XX/Samples/ftd2xx.h /usr/local/include/ftd2xx.h
sudo cp D2XX/Samples/WinTypes.h /usr/local/include/WinTypes.h
※USBモジュールがちゃんと繋がっているか調べるにはBitBang Mode AVR-Writer on Macに載ってるSampleのBitModeとSimpleを試す。(飛ばしても問題ないが以降エラーがあれば試してみたほうがよい)D2XXはデスクトップとかに置けば良い。
※ちなみに私の場合、BitModeがFailed to get bit modeとエラーを吐いたため、
調べた結果コード内を修正する必要があるとのことでした。参考修正版 main.c (BitModeディレクトリ内main.cに上書き後make)
※ちなみに普段Arduinoを使っている人はもうひとつのUSBシリアルドライバとぶつかってしまうためブートローダの時だけそっちを切る必要があります。
つまりFTDIUSBSerialDriverを切る→ブートローダ(D2XX使用)→FTDIUSBSerialDriverをつける→スケッチ書込み(FTDIUSBSerialDriver使用)の流れ
(停止コマンド)

sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext
(再開コマンド)
sudo kextload   /System/Library/Extensions/FTDIUSBSerialDriver.kext

AVRの書込み環境を作る。
serjtag-0.3 と avrdude-5.3.1をインストールする。
ターミナルで以下コマンド実行
mkdir mac_bitbang
cd mac_bitbang
wget http://www.nmj.sumomo.ne.jp/suz-avr/serjtag/serjtag-0.3.tar.gz
# wget http://www.geocities.jp/arduino_diecimila/bootloader/files/serjtag-0.3.tar.gz
wget http://ftp.twaren.net/Unix/NonGNU/avrdude/avrdude-5.3.1.tar.gz
# MD5 (avrdude-5.3.1.tar.gz) = 58c2be9f7a864b930ed9e6f1858f5cc7
# MD5 (serjtag-0.3.tar.gz) = 7228de34ad8221598401cd631dd6f55e
tar xvzf avrdude-5.3.1.tar.gz
tar xvzf serjtag-0.3.tar.gz
cd avrdude-5.3.1
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-usb910.patch
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-avr910d.patch
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-serjtag.patch
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-ft245r.patch
patch -p1 < ../serjtag-0.3/avrdude-serjtag/src/avrdude-5.3.1-baud.patch
mv ser_posix.c ser_posix.c.ORIG
grep -v B3000000 ser_posix.c.ORIG > ser_posix.c
./configure CFLAGS="-g -O2 -DSUPPORT_FT245R" LIBS="-lftd2xx"
make
./avrdude -v 
(※wget出来なければ代わりにcurlでダウンロード。あるいはファイル名でぐぐると出てくるのでFinderに落とす)

avrdude.confにArduino用の設定を書く。
avrdude.confはmac_bitbang>avrdude-5.3.1内にある。
以下内容を最後にでも書き足す。
#arduino diecimila
programmer
 id="diecimila";
 desc  = "FT232R Synchronous BitBang";
 type  = ft245r;
 miso  = 3;  # CTS X3(1)
 sck   = 5;  # DSR X3(2)
 mosi  = 6;  # DCD X3(3)
 reset = 7;  # RI  X3(4)
;
またhttp://www.geocities.jp/arduino_diecimila/bootloader/files/avrdude.conf
を参考に最後のATmega168Pの項目すべてをコピペする。
念のため以上2つを変更したファイルを用意した。avrdude.conf

ブートローダファイルをserjtag-0.3>binaryにいれる

いよいよAVRにブートローダを書きこんでいく。
その前にちゃんと書き込めるか確認。
ターミナルで
~/mac_bitbang/avrdude-5.3.1/avrdude -C ~/mac_bitbang/avrdude-5.3.1/avrdude.conf -c diecimila -P ft0 -p m168p -B 4800
を実行。avrdude: safemode: Fuses OKとか出て何事も無く終われば準備おけ。しかし
avrdude: initialization failed, rc=-1            Double check connections and try again, or use -F to override            this check.
など出ればエラーなので、配線や忘れが無いかチェックする。

ターミナルでAVRにフューズ(設定のようなもの)を書き込む。

~/mac_bitbang/avrdude-5.3.1/avrdude -C ~/mac_bitbang/avrdude-5.3.1/avrdude.conf -c diecimila -P ft0 -p m168p -t -B 4800
を実行し
avrdude> erase
で初期化し
avrdude> w efuse 0 0x00
(拡張ヒューズ:ブートローダ領域を2 Kbyte ( 1024 ワード )に設定)
avrdude> w hfuse 0 0xdd
(上位ヒューズ:電圧2.7V以下低下で停止)
avrdude> w lfuse 0 0xff
(下位フューズ:外部発振器を使う。マイコン内部を使うなら0xE2らしいです。)
avrdude> quit

以上でヒューズ設定終わり。ヒューズについての説明はこちらが分かりやすい。


ターミナルでブートローダを書き込む。

cd /〇〇/mac_bitbang/serjtag-0.3/binary/
移動後
~/mac_bitbang/avrdude-5.3.1/avrdude -C ~/mac_bitbang/avrdude-5.3.1/avrdude.conf -c diecimila -P ft0 -p m168p -U flash:w:ATmegaBOOT_168_diecimila.hex
書き込み中・・になって
avrdude: 16294 bytes of flash verified
でブートローダ書き込み完了。

最後にロックヒューズを設定する(ブートローダの上書き禁止設定)
~/mac_bitbang/avrdude-5.3.1/avrdude -C ~/mac_bitbang/avrdude-5.3.1/avrdude.conf -c diecimila -P ft0 -p m168p -t 
avrdude> w lock 0 0x0f 
avrdude> quit

③Arduino IDEからスケッチを書き込む

ブートローダ書き込み後、配線をスケッチ書込み用に変更する。
②までの作業は一回やればよいので、ここからは通常のArduinoに書きこむ感覚で良い。
配線はこちらを参考にする。Arduino/Arduino の自作/DuemilanoveTYPE

あとはArduino IDEを立ち上げて、
設定をArduino diecimila, duemilanove,or nano w/atmega 168
serial portをusbserialにして(ここで表示されてない場合はシリアルドライバの機能を止めている可能性があります。前述あり)
BlinkなどをUploadしてみましょう。
これで終わりです。

④おわり
②の工程がちょっとややこしくなってしまった。実はLuminet-IDEというブートローダの書けるArduino環境を見つけたのだが、それだとどうにも上手くいかなかった。
もしMacの環境で出来た方いたら教えて下さい。

自作するとかなりコスト安くなりそう。初期費用でシリアル変換モジュールが950円で、それ以降は1つ500円以内で出来てしまう。
次は発振子のマイコン内蔵版とワンチップArduinoとか作りたい。

0 件のコメント:

コメントを投稿