突然我が家にPICプログラマ(ライター)がやってきた。

近所で立ち寄れる電子部品を扱う店がRadioShack以外はほとんど壊滅状態になった今日この頃、米国で電子工作に使う部品とか工具を入手しようとすると通信販売に頼るのが普通だろう。 ざっとあげてみるだけでも、ICなどの電子部品はDigikey.comかMouser.com 。
この二社は工場で使うような大口注文からホビースト向けにICのばら売りまでこなしてくれるので重宝する。スイッチとかモーターなどはallelectronics.com。あとはAmazonをみれば大体なんでも入手できる感じ。 またHobbyist専用のキットやSMTのセンサー部品などを扱いやすいように小さな配線板にモジュール的に実装した製品などはadafruit.comやSparkfun.comなどが品揃えも豊富かつ対応が早い。 少し時間がかかるのを覚悟すれば中国からSeeedstudioなども使える。

で、やっとこさ本題に入るが、Sparkfun.comでは年に1度か2度の頻度で梱包があいているものとか、傷不良、旧製品などの半端ものの処分をする。 形式としては、縦横15cm、奥行き20cmくらいの箱に雑多な製品や売れ残り品を詰め込み、福袋のようにして(この場合は福箱か) Dumpster Dive と銘打って売り出す。 数量的には100個くらいのようで、インターネットで時間を決めてよーいドンで始めると2分くらいで完売する。

ところでDumpster Diveという言葉だが、 dumpsterというのは路地の裏側などに置いてある大きなゴミ箱のことである。 このゴミ箱を漁ろうとするとよじ登って入り込み、それこそ潜って物色するような感じになる。 乞食や浮浪者だけではなく、大きな食料品店やレストランのdumpsterは普通に食せるものが平気で捨てられている、ということで、Dumpster Diveの愛好者グループも存在する由である。

そんなところからSparkfunのサイトでも何が入っているかわからないよ、ということでDumpster Diveと銘打ったイベントになっている。

今回、クリックしてみたら運よく購入することができた。 $10プラス送料で一体何が送られてくるか楽しみにしていたのだが、 送ってきたものを開けてみれば想像以上の収穫だった。

  1. CanaKit USB PIC Programmer: Microchip純正 PICKIT2 と完全互換の PICマイコン用プログラマ。まともに購入すると販売価格60ドルくらいである。Firmware 更新用のボタンスイッチの上部がとれていたが、マイコンのプログラムには全く支障がないことを手持ちのPIC18F2550で確認。ボタンも手持ちの押しボタンスイッチに半田付け交換し、完全復帰。PICKIT2と違ってICPの他に40ピンのZIFソケットも付いているのでDIPマイコンを直接焼くことができる。
  2. PCduino: Allwinner A10を実装したArduinoとピンコンパチのArmCortex Development board. これまたMotorolaのLapdockに接続し、内臓2GBフラッシュからLubuntuが立ち上がることを確認。 wifi内臓+Arduinoシールド互換のPcduino2が出たので、Sparkfunはpcduinoの扱いをやめ、旧品在庫として処理したらしい。 これもまともに買えば50ドル以上はしそうだ。
  3. FTDI USB シリアル コンバーター: このブレークアウトほしかったんだよね。上のPcduinoにも実装されているDebug用のシリアルピンに接続するにぴったりではないか。 小売価格15ドル
  4. I2C対応室外用ソーナーモジュール X2 : 1個90ドルくらいするはずなのだが、車載用のバックアップウオーニングか自立歩行ロボットでも作りますか?
  5. 車両Diagnostic Kit: 車両のダイアグコネクタに接続して車両情報を読み取るためのモジュール。コネクタケーブル付き。やはり普通に買うと60ドルくらいする。
  6. 電解コンデンサーが山ほど。
  7. コンパレーターIC,A/DコンバーターIC、Opt Interrupter、ギャップセンサーICがそれぞれ一個づつ.
  8. Banana plug端子が半ダースほど
  9. USBのBlueToothドングル一個
  10. Stepper motor のドライバーボード、6枚続きのアレー状態が一枚。これをうまく切り離すことができれば使えそうだが、手持ちのロータリーツールで破損させずに切断できるかな。
  11. 3ピンロータリーエンコーダ

小売価格としては恐らく300ドル以上は行っている。たまたま当たりだったのか、いつもこんなものなのか、こういうセールがあればまたチャレンジしてみたいと思った次第。

一番嬉しかった(困った?)のはPICプログラマである。 前にも書いたがPICマイコン始めてみたいと思っていたのだが専用プログラマが高いので遠慮していた。それが入手できたのでもう言い訳ができなくなってしまったわけだけれど、今、AVRマイコンの学習も佳境に入っているところだ。 週末の日数が足りないよ..

Arduino でAVRプログラムライター

先回、ArduinoのIDEに同梱されているスケッチでAVRプログラマを作成できると知識だけで(無責任に)書いたのだが、本当にできるんだろうね、と検証してみたので結果を書いておく。

結果  できました。

前置き:
ATMELのサイトを眺めてみると、もっとも安価でかつポピュラーな純正プログラムライターはATMEL AVRISP MK2 なるものだが、価格は、とみると$34となっている。 本格的に開発に使おうとするならAVRDragonというのが良さげだが、これが$49.

MK2はArduino Unoの値段とほぼ同じ。 またAdaFruit.com でAVRプログラマシールドなるものを売っているが、シールドにZifソケットや328Pチップをつけてくれているとは言え、$17. これにArduinoを購入することになるので$50くらいの出費になる。これまたAVRDragonとほぼ同じ値段。

Arduino Proとか$10くらいの廉価品を買ってきてセットアップすれば本格的なライターより安くは組めるだろうが同じくらいの出費をするなら専用ライターを買ったほうが良いに決まっている。(Atmel Studioという統合型のIDEでデバッグなどにそのまま使える) Arduinoを使ってAVRプログラマを作成するというのはどこかに使っていないArduinoが転がっていて、かつAVRとC(++)をちょっと試してみようか、という状況ならともかく、普通はなるべく安いライターを探すことをまず考えるだろう。ま、arduinoを使えば、AVRに挫折したときに改めてArduinoとして再利用できる、という利点はある。実はAvrdudeを使えばプリンタ用のパラレルポートから直接ワイヤーを配線してAVRマイコンをプログラムすることが可能(つまりライターすらいらないの)だそうだが、最近のパソコンではパラレルポートなど実装していない。 (追記:amazon.comで$6のUSB ISPプログラマを売っているのを見つけた。現在のところこれが最安値)

本文
で、自分の場合、うっかり買ってしまったArduino Microという小さなArduino boardが手元に転がっていた。 そこで、このArduino Microに Arduino IDEのメニューのSampleの中から”Arduino ISP”というサンプルスケッチをアップロードし、このプログラムの中に書いてある通りにブレッドボードに配策し、試してみても動かない。

延べ4時間くらい、はまってしまったのだが、ネットを調べて最終的にはマイコンチップをプログラムできるようになった。 要点をかいつまんで書いておく。
1.Arduino MicroはArduino Leonardと同じく32u4というマイコンチップを使っている。 従前のArduinoが使っていたAtmega328Pというチップではない。このため、DigitalPinに対する入出力ポートの割り付けが従来とは異なっている。
2.このため、上記のスケッチで #define RESET SS となっている部分はUnoなどではPin10があてがわれるが、マイクロとLeonardではPin17に定義されている。 このPin17、RX_LEDへと接続されてしまっているので、上の表記は #define RESET 10 とPin 10に明示的に変更してやる必要がある。
3.同じようにSPI用のピン3本(MOSI,MISO,SCK) スケッチ上のコメントでは11,12,13の3つの出力に接続するような指示になっているが、Micro (Leonardも)の場合、SPIはこれらのピンにはマッピングされていない。幸いなことにMicroの場合、MOSI,MISO,SCKの3本がヘッダーピン配列に物理的に存在しているので、ここに接続してやることになる。(Leonardの場合はUnoと同じヘッダーピン配置というのが災い?してこれらのピンは存在しないので、ICP用の6本ピンヘッダーの当該PINにそれぞれ接続することになる。(ただし、ResetはPin10に接続)

回路図的にはこんな感じ。

Arduino Micro as AVRISP

Arduino Micro as AVRISP ダブルクリックで大きな図を見る

実際のブレッドボードへの配策はこんな感じ。

AVR ISP using Arduino Micro (at left)

AVR ISP using Arduino Micro (at left)左のArduinoMicroで右のATmega168をプログラムする図

手順だけ羅列すると
1.Arduino のSample sketchからArduino ISP をIDEに読み込み、#define reset SS を #define reset 10と書き換える。
2.”Arduino as ISP”スケッチをArduino Microにアップロード
3.上のようにワイヤを配策。LED3点については無くてもOK(だがあると恰好よい)
4.CファイルをAVR-GCCでコンパイルし、生成できたHEXファイルをAVRDUDEを使ってアップロード, あるいはArduino IDEでスケッチを作成、sift-Uploadでターゲットをプログラム。(この部分の説明は記事を改めていずれそのうち)