広告
Arduinoを自作する
Arduinoはオープンハードなので回路図やプリント基板パターンが公開されている。
ということは自分でも作れるということ。
自作する利点は買うより安いということよりも、自分の使いたいように作れるところだろう。センサなどの部品もモジュールとして組み合わせるのではなく同一基板上に付けることもできる。
ボードの作製
今回は部品点数の少ない「Arduino Nano」を作ってみた。
CPU(ATmega328P)やUSBシリアル変換IC(FT232RL)、USBコネクタなどの主要部品は秋月電子にて格安で入手可能なのでかなり安く仕上がる(総額で2千円以下?)。
Arduino Nanoのページで公開されている回路図どおりプリント基板を作製すればいい。Eagleを使うならプリント基板パターンも公開されている。
僕自身はKiCADを使っているので回路図を元に作製した。
bootloaderの書き込み
ボードが出来上がったらbootloaderを書き込む。
AVRに書き込む方法と同じなのでbootloaderファイルを取ってきてavrdudeなどで書き込む。
といってもbootloaderファイルを見つけるのが面倒。
でもArduino IDEからも書き込む事ができるので今回はこの方法を採用。
- Arduino IDEのTools→Boardでボードの種類を選ぶ。
- 作製したボードとライタを接続する。
- 今回はやっぱり秋月で売っている純正ライターAVRISPmkIIを使った。
- AVRISPmkIIからは電源が供給されないので、USBか外部電源をつなげる
- AVRISPmkIIのLEDが緑ならOK。
- 赤の場合はボードにちゃんとつながっていないか電源が供給されていない。
- オレンジ点滅の場合はボードのどっか(リセット周辺など)がおかしい。
- そしてTools→Burn Bootloaderで使用するライタを選ぶ。選ぶと書き込みを始める
- パーミッションによってはlibusbと同様にroot権限でArduino IDEを動かす必要があるかも
- 正常に書き込みが終わるとCPUの17ピン(D13/SCK)につながっているLEDが点滅する。
bootloaderを作る
もともとATmega328などは最高20MHzで動くのだけど、Arduinoでは16MHzになっている。そこで水晶を20MHzに置き換える場合はブートローダを構築する必要が出てくる。
Arduino@wikiの記事を参照。
- ソースはGoogle codeからsubversionでcheckoutして取ってくる。
svn checkout http://arduino.googlecode.com/svn/trunk/ arduino-read-only
- ダウンロードしたディレクトリの下の「hardware/bootloaders/atmega/」へ移動
- Makefileを自分用に変更「hardware/bootloaders/atmega/
- makeする。
- AVR用のクロスコンパイラ(avr-gcc)やライブラリをあらかじめインストールしておく必要がある。
- 「error: ‘EEWE’ undeclared」というエラーがでたらstastaka's Blogの記事の通りソースの上の方に「#define EEWE 1」という行を追加する
- avrdudeで書き込む
- 正常に書き込みが終わるとCPUの17ピン(D13/SCK)につながっているLEDが点滅する。
- ついでにarduinoディレクトリ(例えば/usr/share/arduino)の「hardware/arduino」にある「boards.txt」を変更しておくと便利かもしれない。
例えばこの例だと以下のような行を追加しておく。すると「Tool」->「Board」に表示される
##############################################################
atmega328_20m.name=Arduino Nano w/ ATmega328 20MHz
atmega328_20m.upload.protocol=arduino
atmega328_20m.upload.maximum_size=30720
atmega328_20m.upload.speed=57600
atmega328_20m.bootloader.low_fuses=0xFF
atmega328_20m.bootloader.high_fuses=0xDA
atmega328_20m.bootloader.extended_fuses=0x05
atmega328_20m.bootloader.path=atmega
atmega328_20m.bootloader.file=ATmegaBOOT_168_atmega328p_20M.hex
atmega328_20m.bootloader.unlock_bits=0x3F
atmega328_20m.bootloader.lock_bits=0x0F
atmega328_20m.build.mcu=atmega328p
atmega328_20m.build.f_cpu=20000000L
atmega328_20m.build.core=arduino
この場合、「hardware/arduino/bootloader」のatmegaディレクトリに、ブートローダー「ATmegaBOOT_168_atmega328p_20M.hex」を置いておく。こうしておけばArduino IDEからブートローダーを書き込む事ができるようになる。
その他、問題点など
Arduinoではクロックが16MHzだが20MHzの発振子を付けても動く。ただしシリアル通信やタイミングなどが狂うので20MHzの発振子を使う場合は20MHz用のbootloaderを使う必要がある。
Arduino IDEからうまく書き込めない場合はRESET周りに問題があることがある。
今までに2度、書き込めない時があったが、ともにRESET周りだった。
例えば、FT232とAVRとをつないでいるコンデンサを間違えて抵抗にしていたら、ブートローダーを書き込んだ直後はArduino IDEから書き込めるが、その後は書き込めないという症状が出た。一度は書き込めたのでなかなか原因が見つからなかったが、良く見たらコンデンサのところが抵抗になっていた。
広告