2011年5月8日日曜日

Arduino XBee Shield Wireless プログラミング

前回、Arduino Fio のWireless プログラミングを行いました。
その最後に書いた通り、Arduino Uno + XBee Shield ではうまく行かなかったので、今回はそれを検証します。

エラーはこの通りです。

avrdude: stk500_recv(): programmer is not responding


今回はeJackino (この本の付録基板)という Duemilanove (Uno の1つ前のモデル) 相当のArduino 互換ボードを使ってみました。
すると、あっさり書き込みOKでした。


折角なので検証のため、直結をやめてケーブル接続にします。必要な配線は

電源 (+5V,Xbee Shield 上に3.3V のレギュレータが載っています。Xbee は3.3V 動作です)、GND、TX(D1)、RX(D0)、Reset の5本です。

線を外すことで、わざとエラーをおこします。



通信ができていないときのエラー(RX or TX を外したとき)

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding

リセットができていないときのエラー(Reset を外したとき)

avrdude: stk500_getsync(): not in sync: resp=0x30
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

となりました。

さらに、Arduino Uno とeJackino で使っているマイコンを入れ替えたり、このページを参考に、リセット回路の強化を試してみました。リセット信号直列のコンデンサは XBee Shield 上に載っていたので、追加したのはNPN トランジスタ(2sc1815) と抵抗10kΩのみ





結果

本体設定 (Tools > Board)マイコン
(ブートローダー)
リセット
回路強化
結果
eJackinoArduino Duemilanove
or Nano w/ ATmega328
Duemilanove相当なしOK
eJackinoArduino Duemilanove
or Nano w/ ATmega328
Duemilanove相当ありOK
Arduino
Uno
Arduino UnoArduino UnoなしError
Arduino
Uno
Arduino UnoArduino UnoありError
Arduino
Uno
Arduino Duemilanove
or Nano w/ ATmega328
Duemilanove相当なしError
Arduino
Uno
Arduino Duemilanove
or Nano w/ ATmega328
Duemilanove相当ありOK
Arduino
Uno
Arduino UnoDuemilanove相当なしError
Arduino
Uno
Arduino UnoDuemilanove相当ありError


Arduino Uno とDuemilanove は、ブートローダーが異なるため、そのあたりに原因がありそうです。
(5/15 追記:Uno のブートローダーが115kbps で書き込むらしいので、XBee の速度(ATBD) を115kbps にしてみましたが、やはりだめでした。)

結局、Uno のWireless プログラミングの方法は分かりませんでしたが、Duemilanove (相当) では問題なさそうです。
同じくDuemilanove 相当の「akizukino」こと、AE-ATmega 基板(秋月電子・150円) を購入したので、これを USBシリアルアダプタなしで作るのもありかなと思っています。

緑がAE-ATmega 基板、上の小さいのは eJackino mini と eJackino pico。

2 件のコメント:

  1. 現在XBee S1にてwireless programmingに挑戦しています.

    AE-ATmega基板で行ってるのですが,ArduinoIDEからプログラムのアップロードが成功するときと失敗するときがあります.(特にファイルが重くなると失敗率が高くなります)
    同じ状況で優先だと成功率100%です.
    回路はVcc,GND,RX,TX,RSTをXBeeとつなげています.
    RST回路の強化は行っています.
    なお,Arduino上のシリアル通信は送受信成功しています.


    errorメッセージは,

    avrdude: stk500_getsync(): not in sync: resp=0x00
    avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
    --------------------
    といったものや、
    Binary sketch size: 2156 bytes (of a 30720 byte maximum)
    avrdude: stk500_loadaddr(): (a) protocol error, expect=0x14, resp=0x55

    avrdude: stk500_paged_load(): (a) protocol error, expect=0x14, resp=0x36
    avrdude: stk500_cmd(): programmer is out of sync
    ----------------------





    eJackino Arduino Duemilanove
    or Nano w/ ATmega328 Duemilanove相当 なし OK
    eJackino Arduino Duemilanove
    or Nano w/ ATmega328 Duemilanove相当 あり OK

    とありますが,これらの実験時の成功率はどの程度でしょうか?

    返信削除
  2. kas さん、コメントに気づかずすみませんでした。

    ちょっと簡単には検証できないのですが、実験のときはかなり小さなプログラムしか書いておらず、その後もこの手法は使っていません。お役に立てずすみません。
    新たに何か分かりましたら追記します。

    返信削除