前回、Arduino Fio のWireless プログラミングを行いました。
その最後に書いた通り、Arduino Uno + XBee Shield ではうまく行かなかったので、今回はそれを検証します。
エラーはこの通りです。
今回はeJackino (この本の付録基板)という Duemilanove (Uno の1つ前のモデル) 相当のArduino 互換ボードを使ってみました。
すると、あっさり書き込みOKでした。
折角なので検証のため、直結をやめてケーブル接続にします。必要な配線は
電源 (+5V,Xbee Shield 上に3.3V のレギュレータが載っています。Xbee は3.3V 動作です)、GND、TX(D1)、RX(D0)、Reset の5本です。
線を外すことで、わざとエラーをおこします。
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) | マイコン (ブートローダー) | リセット 回路強化 | 結果 |
---|---|---|---|---|
eJackino | Arduino Duemilanove or Nano w/ ATmega328 | Duemilanove相当 | なし | OK |
eJackino | Arduino Duemilanove or Nano w/ ATmega328 | Duemilanove相当 | あり | OK |
Arduino Uno | Arduino Uno | Arduino Uno | なし | Error |
Arduino Uno | Arduino Uno | Arduino 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 Uno | Duemilanove相当 | なし | Error |
Arduino Uno | Arduino Uno | Duemilanove相当 | あり | Error |
Arduino Uno とDuemilanove は、ブートローダーが異なるため、そのあたりに原因がありそうです。
(5/15 追記:Uno のブートローダーが115kbps で書き込むらしいので、XBee の速度(ATBD) を115kbps にしてみましたが、やはりだめでした。)
結局、Uno のWireless プログラミングの方法は分かりませんでしたが、Duemilanove (相当) では問題なさそうです。
同じくDuemilanove 相当の「akizukino」こと、AE-ATmega 基板(秋月電子・150円) を購入したので、これを USBシリアルアダプタなしで作るのもありかなと思っています。
同じくDuemilanove 相当の「akizukino」こと、AE-ATmega 基板(秋月電子・150円) を購入したので、これを USBシリアルアダプタなしで作るのもありかなと思っています。
緑がAE-ATmega 基板、上の小さいのは eJackino mini と eJackino pico。
現在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
とありますが,これらの実験時の成功率はどの程度でしょうか?
kas さん、コメントに気づかずすみませんでした。
返信削除ちょっと簡単には検証できないのですが、実験のときはかなり小さなプログラムしか書いておらず、その後もこの手法は使っていません。お役に立てずすみません。
新たに何か分かりましたら追記します。