Top > Arduino > home_made_board

広告

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でボードの種類を選ぶ。
    • 今回は「ATmega328」
  • 作製したボードとライタを接続する。
    • 今回はやっぱり秋月で売っている純正ライター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で書き込む
    • パーミッションによっては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からブートローダーを書き込む事ができるようになる。

その他、問題点など

Arduinoではクロックが16MHzだが20MHzの発振子を付けても動く。ただしシリアル通信やタイミングなどが狂うので20MHzの発振子を使う場合は20MHz用のbootloaderを使う必要がある。

Arduino IDEからうまく書き込めない場合はRESET周りに問題があることがある。
今までに2度、書き込めない時があったが、ともにRESET周りだった。
例えば、FT232とAVRとをつないでいるコンデンサを間違えて抵抗にしていたら、ブートローダーを書き込んだ直後はArduino IDEから書き込めるが、その後は書き込めないという症状が出た。一度は書き込めたのでなかなか原因が見つからなかったが、良く見たらコンデンサのところが抵抗になっていた。


広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Thu, 05 Jan 2012 17:12:05 JST (4466d)