広告
*Arduinoを自作する [#xa608c9e] Arduinoはオープンハードなので回路図やプリント基板パターンが公開されている。 ということは自分でも作れるということ。~ 自作する利点は買うより安いということよりも、自分の使いたいように作れるところだろう。センサなどの部品もモジュールとして組み合わせるのではなく同一基板上に付けることもできる。~ *ボードの作製 [#p2ea09fa] 今回は部品点数の少ない「[[Arduino Nano:http://www.arduino.cc/en/Main/ArduinoBoardNano]]」を作ってみた。~ CPU(ATmega328P)やUSBシリアル変換IC(FT232RL)、USBコネクタなどの主要部品は秋月電子にて格安で入手可能なのでかなり安く仕上がる(総額で2千円以下?)。 [[Arduino Nanoのページ:http://www.arduino.cc/en/Main/ArduinoBoardNano]]で公開されている回路図どおりプリント基板を作製すればいい。Eagleを使うならプリント基板パターンも公開されている。 僕自身は[[KiCAD]]を使っているので回路図を元に作製した。 *bootloaderの書き込み [#jae916b8] ボードが出来上がったらbootloaderを書き込む。~ [[AVR]]に書き込む方法と同じなのでbootloaderファイルを取ってきてavrdudeなどで書き込む。~ といってもbootloaderファイルを見つけるのが面倒。~ でもArduino IDEからも書き込む事ができるので今回はこの方法を採用。~ -Arduino IDEのTools→Boardでボードの種類を選ぶ。 --今回は「ATmega328」 -作製したボードとライタを接続する。 --今回はやっぱり秋月で売っている純正ライターAVRISPmkIIを使った。 --AVRISPmkIIからは電源が供給されないので、USBか外部電源をつなげる --AVRISPmkIIのLEDが緑ならOK。 ---赤の場合はボードにちゃんとつながっていないか電源が供給されていない。 ---オレンジ点滅の場合はボードのどっか(リセット周辺など)がおかしい。 -そしてTools→Burn Bootloaderで使用するライタを選ぶ。選ぶと書き込みを始める --パーミッションによっては[[libusb>libusbについて]]と同様にroot権限でArduino IDEを動かす必要があるかも -正常に書き込みが終わるとCPUの17ピン(D13/SCK)につながっているLEDが点滅する。 *bootloaderを作る [#b5ca8424] もともとATmega328などは最高20MHzで動くのだけど、Arduinoでは16MHzになっている。そこで水晶を20MHzに置き換える場合はブートローダを構築する必要が出てくる。 [[Arduino@wikiの記事:http://www15.atwiki.jp/arduino/pages/56.html]]を参照。~ -ソースはGoogle codeからsubversionで[[checkout:http://code.google.com/p/arduino/source/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の記事:http://stastaka.wordpress.com/2010/11/25/%E3%83%96%E3%83%AC%E3%83%83%E3%83%89%E3%83%9C%E3%83%BC%E3%83%89%E3%81%A7arduino1/]]の通りソースの上の方に「#define EEWE 1」という行を追加する -avrdudeで書き込む --パーミッションによってはroot権限が必要。下の例は20MHzバージョンを作ったときのもの avrdude -c avrispmkII -P usb -p m328p -U flash:w:ATmegaBOOT_168_atmega328p_20M.hex -正常に書き込みが終わると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」を置いておく。 この場合、「hardware/arduino/bootloader」のatmegaディレクトリに、ブートローダー「ATmegaBOOT_168_atmega328p_20M.hex」を置いておく。こうしておけばArduino IDEからブートローダーを書き込む事ができるようになる。 *その他、問題点など [#pfa13699] Arduinoではクロックが16MHzだが20MHzの発振子を付けても動く。ただしシリアル通信やタイミングなどが狂うので20MHzの発振子を使う場合は20MHz用のbootloaderを使う必要がある。 Arduino IDEからうまく書き込めない場合はRESET周りに問題があることがある。~ 今までに2度、書き込めない時があったが、ともにRESET周りだった。~ 例えば、FT232とAVRとをつないでいるコンデンサを間違えて抵抗にしていたら、ブートローダーを書き込んだ直後はArduino IDEから書き込めるが、その後は書き込めないという症状が出た。一度は書き込めたのでなかなか原因が見つからなかったが、良く見たらコンデンサのところが抵抗になっていた。 広告 |