Arduino (2) 3.3V 化2014年03月16日

Arduino でしばらく遊んでいたが、さらにいろいろと試してみたくなった。
グラフィック LCD や GPS である。
これらは、電源や I/F の電圧が 3.3V となっているので、前回のキャラクタ LCD のように単純に組み立てる (そのまま繋ぐ) ことはできない。
すでに、そういったシールド (shield : Arduino の世界では、拡張ボードのこと) が販売されているし、あるいは、Arduino Due (もっと高性能、高機能なマイコンが搭載されている : 3.3V) にすれば、簡単に解決する問題である。
けれども、このブログのテーマは「迷い道」。
寄り道や遠回りが大好きなのだ。
手持ちの Duemilanove (もはや型落ちしてしまったが、純正品) に手を加えることを躊躇していたのでやらないでいたのだが、偶然にも aitendo で「在庫僅か」となっていた Duemilanove 互換ボードを手に入れることができた (今はもう売り切れてしまったようだ)。
このボードを 3.3V で動作させるように改造することにした (やはり、迷い道に踏み込んだ)。

互換ボード

ネットの情報を探ると、いろんな人が 3.3V 改造を行っている。
もっとも簡単な方法は、Arduino UNO (Duemilanove の次のモデルで最も普及している) に施された方法で、

  1. 電圧レギュレータを 5V 用から 3.3V 用に取り替える
  2. ヒューズ (USB パワーの過電流対策のため) を取り外す
  3. USB パワーをダイオードを介して電圧レギュレータの入力に接続する

というものだ。
Duemilanove では、さらに、USB I/F チップ (FT232RL) に 4V 以上の電圧を供給するために、

  4. USB I/F チップ (FT232RL) の電源ピンのパターンをカットし、電圧レギュレータの入力 (VIN) に接続する
  5. 電源切り替え回路は実装しない

パターン・カットする部分は FT232RL チップの下になるので、実装する前に行う必要がある (Duemilanove 純正品を改造するのは、やはり無理ということか)。
これにより、

  1. ヒューズを取り外したので、過電流対策にリスクがある (普通に使うには問題ないだろう)
  2. 外部電源を使うときには 5V の AC アダプタを接続する
  3. +5V のピンアウトは +3.3V になる、VIN は 4.7V 程度になる (5V からダイオードによる電圧降下があるため)
     (追記) のちに +5V と +3.3V のピンアウトに対する改造を行って、それぞれ +5V, +3.3V が得られるようにしている。
            パターンのカットが必要になるので、半田付けの前に行う必要がある。

SMD (Surface Mount Device : 表面実装部品) の半田付けには苦労したが、何とかできあがった。
白いジャンパ線とその周辺が改造した部分だ。

3.3V 版

マイコン・チップ ATmega328P の仕様上 3.3V での動作周波数の上限は 13MHz ほどなので、16MHz での動作は保証されないが、おそらく動くだろう。
ただし、このままでは Arduino にはならない。
ブートローダというプログラムを書き込む必要があるのだ。
(次回につづく))

Arduino (3) Duemilanove 3.3V2014年03月16日

改造ボードが組み上がったところで、Arduino ブートローダ (boot loader) を書き込む。
ネットの情報によると、2 つの Adruino をつないで、Arduino IDE に付属するプログラム (Arduino ISP sketch) を使って書き込むことができる。
ここでは、純正の Duemilanove (5V 版) を使う。

Arduino ISP

電源を純正 Duemilanove から供給し 5V で動作させるので、3.3V 版の Duemilanove 側には AC アダプタ (USB) を接続する必要はない (してはいけない)。
(追記) のちに +5V と +3.3V のピンアウトに対する改造を行っているので、
Arduino ISP プログラマの 5V 版 Duemilanove の 5V をブートローダが書き込まれる 3.3V 版 Duemilanove の 3.3V に接続して、3.3V 版 Duemilanove を 5V で動作させる必要がある。

ところで、この方法には、自動 RESET が影響して書き込みができないという問題がある。
これを回避するには、RESET と GND 間に 10μF のキャパシタを接続すればよい (自動 RESET が無効になる)。

普通ならターゲットとして Duemilanove を選んで書き込むのだが、ここで UNO を指定すれば、改良版の新ブートローダ optiboot を書き込むことができる。
公開されている手順にしたがってブートローダを書き込んで、ようやく 3.3V 版の Arduino Duemilanove ができあがった。
ボードは Duemilanove だが、optiboot が書き込まれているので、開発環境 (Arduino IDE) のボード選択では UNO を指定する。
Blink スケッチを upload して、動作を確認する。
LED が点滅すれば O.K. だ。

Blink

残念ながら、前回作ったシールド (LCD, SW などが載っている 5V 版) が使えなくなってしまった。
新たに 3.3V 対応のシールドを用意しなければならないようだ。