ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

arduinoコミュの壊れちゃった気がします。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
最後に書き込んだプログラムはJPEGデータをデコードしながら、暴走していないかの確認用にLEDをチカチカさせるプログラム。

容量内に収まるようなJPEGデータを用意して、バイナリデータをテキストに変換し、byte配列に入れ、デコードプログラムとともにarduinoに転送>実行。
実行中にバグを発見したので再コンパイルし、ボードに再転送。
.....その後、ウンともスンとも言わなくなってしまいました。

そこで今後のために知っておきたい事があります。

1.何が原因で壊れたのか?
 PC側ではArduino0017を使っています。
 ボードはArduinoDuemilanoveを使っています。
 コンパイル終了時に「30720 byte maximum」と表示されます。
 今回のプログラムは26274bytesらしいです。
 この容量、問題ありますか?これだけの容量のものを入れるとローダが壊れちゃうとかありますか?
 もう一つ気になる事があります。
 もしかしたらプログラム転送中に....転送が失敗したか、転送中にハングアップしたような気がします。
 理由は「その寸前に転送した、似たような容量のプログラムより早く転送が終わった気がする」からです。

2.壊れてしまった箇所を知りたいのですが....
 壊れてしまったのはチップの中に入ってたローダなのか?
 それともボード自体が壊れてしまったのか?
 これらの判断方法で、良い確認方法はありますか?
 ただ今回私の場合、ボードのLEDが点滅しているのでボード自体は動いている気がします。
 と言うか、前回転送したプログラムが動いているような気がして仕方ありません。
 #JPEGデコード中のLEDチカチカに思えて仕方ありません

3.チップ内のローダが壊れてしまった場合、修復の方法はありますか?
 もしくはローダ入のチップが700円とかで売られているので、それだけ買って差し替えれば大丈夫なのでしょうか?


こんな感じですかね。
「どうやったら壊れてしまうの?」と「壊れた箇所の判断方法は?」と「チップだけ壊れたと判断した場合の対処法」ですね。
もちろん壊れてしまっていると思うし、壊れたものの修理は簡単ではありません。現在の症状自体、文章でしかお伝え出来ませんし...。
ただ今後他の人が「こんなんなっちゃったんですが...」と言う時に「残念でした」とか「こうして確認しましょう」とか「これだけ買い直せば大丈夫ですよ」みたいなアドバイスが少しでもあればなーと思いまして。

私の勝手な予想では「ローダが壊れたので、ローダ入りチップを買ってくるかな....」って感じです。

ところでプログラムを入れている所はフラッシュメモリみたいな感じなのですかね?
だとしたら書き換え回数制限とかもあったりしませんか?
と言っても何十万回とか大丈夫なのかもしれませんが....。

など。

コメント(9)

まずは、ブートローダを焼きなおしてみてはどうでしょうか?
http://www.geocities.jp/arduino_diecimila/bootloader/index.html
(当方はdiecimiraユーザなので、Duemilanoveだと手順がかわるかもしれませんが)
原因がわかるまで、何度も飛ばすと思うので、この対処はアリかもしれません。

イレーズチェックしてくれるので、"L"になりっぱなしのセルは検出してくれます。
また、ベリファイもあるので、ブートローダ領域の不一致も見てくれます。

よくやる原因は、書き込み中に電源ショートとか、割り込みまわりをいじって
ブートにもどれなくなるとか、
ブート領域にオーバーライトしちゃうとかですかね。

あと、プログラム領域は普通のEEPROMでいわいるフラッシュです。
あ、ライトサイクル保障1万回だから、普通のflashじゃなくて、なんか特殊なページングしてるかな?

大変な状況、お察しします。

ところで何が問題なのでしょうか?
「ウンともスンとも」の部分がも少し具体的ななったほうがアドバイスを受けられる可能性は高いと思います。何をしたときに何が普段と違うのか(正常だった時との差、現在の姿)。

Arduinoは回路図も公開されていますしシンプルな構造なのでなぜチップが飛んだと判断されたのか、ブートローダーが壊れたらしいと判断されている根拠が伝わってくると嬉しい。
ハードウエアの観点、ソフトウエアの観点で思い込みを捨てて順番に信号をトレースするのが本当は
一番早道のような気がします。
PC−USBポートーUSBケーブルーUSBポートーUSB/シリアル変換チップーATMEGA−IO

直感ですがLEDの点滅はCPUが演算して行っているので、リセット正常、CPUの機能(ある特定のIOポート)は正常に見えます。
USBポートからAVRチップが電源を取り込むところも正常でしょうね。USBから給電した直後にBoot LoaderがLEDをちかちか点滅させるはずなのですが…。
むむむ...自分で言い出しておきながら、難しい事になってきた!

とりあえず、一番の問題症状は「PCから新しいプログラムを転送出来ない」です。
PC上では
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
と表示されます。

漫画居士柴岡秀一様 とにかく上記サイトを見て試してみます。
うをっ!「空きパッドのハンダを吸い取り,ピンヘッダーを挿入してハンダ付けします」のっけから工作か...むむむ。
今後のためにも頑張ってみます....!
よく覚えていなくて恐縮ですが、自作環境にて、PCからの転送時に正常にリセットがかからなかった時にそのようなメッセージが出てたような…。

PCから転送を開始した直後に、Arduinoのリセットボタンを押してみてください。
ブートローダーが正常であれば、転送が開始されるはずです。
(テストにはblink等の確実に動くスケッチがいいかと思います)

ちなみに私は、AVRISP mk2を買いました。
ブートローダー書き込み方法としていくつかの方法がネット上で紹介されており、いろいろ試してみましたが、結局純正の手軽さ、確実さを選びました。

今回の原因は別として、周辺機器の接続を誤ると実際にチップそのものを壊してしまう可能性は充分あるので、予備&トラブル発生時の切り分け用にブートローダー書き込み済みのチップを用意しておくと便利です。
私もDiecimiraで同じ状況になりました。
ブートローダが飛んじゃってるっぽいですねあせあせ(飛び散る汗)
ネットで調べていたら私も、漫画居士柴岡秀一 さんの紹介されている復旧方法を見つけて難を逃れました。
#何したか思い出したら、、うっかり通電中にハンダ付けしていたような…まぬけなミスしていましたあせあせ

> avrdude: stk500_getsync(): not in sync: resp=0x00
> avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51
これは、ささっているATmegaを認識するコードがうまく読み出せていないためだそうです。
≒ブートローダが壊れている可能性高い

あと起動時、ボード上の”L”のLEDが3回点滅していますでしょうか?(もしくはD13にLEDをさしてみる)
もし点滅するならば、やはりブートローダが壊れているかと。
ブートローダーの書込みについて
漫画居士柴岡秀一さんご紹介のページから繋がっていますが、
http://www.geocities.jp/arduino_diecimila/avr-writer/index.html
こんな方法なら、工作も簡単で、Arduino基板をいじる必要も無いですよ。
材料も2000円しないし。

ちなみにマイコンチップのお値段
http://www.switch-science.com/products/detail.php?product_id=113
ブートローダー入り350円
http://akizukidenshi.com/catalog/g/gI-03142/
ブートローダー無し250円
というのが有りますね。
海外のArduino Forumによると
( http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1256147181 )
( 本家 http://www.arduino.cc/en/Guide/Troubleshooting#upload )

1.PC上のArduinoソフトウエア設定の確認
  * 正しいボードモデルが選択されている事
  * 接続用のSerial Port#があっていること、変えてみること
2.USBを刺さずにUpload、Binary sketch size:云々と表示されたところでUSBを刺す
  (個人的には???だとおもいますが)
3.それでもだめならBoot Loaderを再書き込み、もしくは動作するチップを用意する


だそうです。
Foschia様

>   * 正しいボードモデルが選択されている事
今迄使用出来ていたモデルが選択されているので正しいと思います。
ボードの表と裏に書かれている文字と同じものが選択されているので正しいと思います。

>   * 接続用のSerial Port#があっていること、変えてみること
デバイスマネージャでシリアルのポートが存在するか?の確認をしたら存在しました。
デバイスマネージャでポート番号を確認しました。
arduino0017でポートがデバイスマネージャと同じか確認しました。

arduino0017でモデル選択とポート選択を違う設定に変更して、もう一度正しいものを再選択しました。
PCの電源を切って再起動してみました。
やってないのはポートを変えてのテストですね。


> 2.USBを刺さずにUpload、Binary sketch size:云々と表示されたところでUSBを刺す
>   (個人的には???だとおもいますが)
それらしい事は何度か試しました。

> 3.それでもだめならBoot Loaderを再書き込み、もしくは動作するチップを用意する
動作するチップを買うのが楽ですが、今後のことを考え書き込みに挑戦します!


でも....ブートローダ入り350円なら買う方が楽だ...
しかし買っても一瞬で同じ状況になるとアレなのでブートローダ復活を学ぶしかないです。

正直皆様からの助言がなければ「ブート入りチップを何個かかっておく」と「どーせだからarduinoMEGAも買う」ところでした。
昼休みに「半田吸い取り&ピン付け」をする予定です!
作業部屋にこもり「半田吸い取り&ピン付け」をしました。

半田の苦手な私、最初は全然吸い取れず困りました....
でも送り半田(?)をして、半田の量を一度増やしてから一気に吸い取ったら綺麗に取れました!
#そのまま温めて吸い取った時は、綺麗に吸い取れず、ピンが通らなくて困りました(笑)

続けて残りの作業(配線とPCでのソフトの設定&実行)を一通り終わらせました。
私はDuemilanoveなのですがavrdude-GUIのProgrammerで何を選ぶか悩みましたが...
結局「FT232R Synchronous BitBang (diecimila)」でやっちゃいました。
あと私のはATmega328ってボードの裏に書いてあったので、その他の部分はATmega328Pの設定で行いました。

ブートローダの書き込みも無事終わり、ついに自分のプログラムの転送です!

念の為、今回問題となったプログラムは書き込まず、以前作った確実に動くものを転送してみると...
転送開始され、転送終了となりました!

液晶モニタを繋いでみると....ちゃんと動いています!

助かりました、皆様のおかげです!!!
どうも有難う御座いました!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

arduino 更新情報

arduinoのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。