広告

  • 追加された行はこの色です。
  • 削除された行はこの色です。
*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を動かす必要があるかも
--パーミッションによっては[[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」を置いておく。こうしておけばArduino IDEからブートローダーを書き込む事ができるようになる。
*その他、問題点など [#pfa13699]
Arduinoではクロックが16MHzだが20MHzの発振子を付けても動く。ただしシリアル通信やタイミングなどが狂うので20MHzの発振子を使う場合は20MHz用のbootloaderを使う必要がある。

*その他 [#pfa13699]
Arduinoではクロックが16MHzだが20MHzの発振子を付けても動く。ただしタイミングなどが狂うので20MHzの発振子を使う場合は20MHz用のbootloaderを使う必要がある。~
Arduino IDEからうまく書き込めない場合はRESET周りに問題があることがある。~
今までに2度、書き込めない時があったが、ともにRESET周りだった。~
例えば、FT232とAVRとをつないでいるコンデンサを間違えて抵抗にしていたら、ブートローダーを書き込んだ直後はArduino IDEから書き込めるが、その後は書き込めないという症状が出た。一度は書き込めたのでなかなか原因が見つからなかったが、良く見たらコンデンサのところが抵抗になっていた。


広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS