« 熱電対によるヒーター制御:まずまずのPID制御。ソースの公開 | トップページ | AVR Dragonのデバッガー機能 debugWIREにはまる »

2011年12月17日 (土)

Atmel純正プログラマーDragonで書き損じたCPUチップを救う

AVR DRAGON来る(12/10/2011)
 とうとう、この研究所にもAtmelの純正プログラマー(プログラムライター)が来ることになった。ATmel AVR Dragonである。4年近くAVRとつきあっていながら、これまで当研究所のAVRのライターはすべて互換品ばかりで、それもシリアルだけである。

 作ることが目的ではなく、何かの役に立つ「しかけ」を作ることを電子工作の目的(何度もしつこく書くけれど)にしているので前から、プログラムライターは道具と割り切っていて余り興味はない。しかも、ケチなので安価で互換ライターが作れるのに、わざわざ純正品を買う気持ちは全くなかった。

S_pc164453 それが、何故買う気になったのか。フューズビットを書き損なった石が増えてきたこともある。それならパラレルライターを自作すればよい。制作例はいたるところにころがっている。実はブレッドボードで2回ほどリセッターらしいものを作ったが、何故か2回とも動かなかった。これがどうもトラウマになっている。

 めげ易いタイプである。リカバリーのための「手段」に不具合があるのか、対象そのものが不具合なのかの判別ができない状況というのが、どうも不安であった。これ以上追求しようという気力を失った。特にパラレルプログラミングは、12Vの高電圧を使う。ちょっと間違えば、簡単にチップを壊してしまう。このあたりが、パラレルプログラマーは純正を買おうと大分前に心に決めた理由である。

 Dragonはデバッガーとしても使える。こちらはAVRではデバッガーやICEを使うつもりがなかったので、実感がわかないが、ICEとしての価格$49(現地価格)は破格の廉価なのだそうだ。日本で買えば、¥7000以上するが、DigiKeyでは¥4400である(ちょっと前は¥4305だった)。

 ただ、DigiKeyは安いかわり、買い物代金の合計が¥7500以上にならないと送料が¥2500かかる。いつもこれが悩みの種である。今度は、あと¥3100分の電子部品を買わねばならない。無理して買って使われない部品が次々に溜まっていく。これが工作のプレッシャーに拍車をかけることになる。この前書いた「電子工作の無限地獄」である。

それはとにかく、今回の送料のゲタは以下の通りである。

①LM2735(DC-DCコンバーター)
このまえ一つ高圧で失い手持ちがなくなった。9V電池の充電版を作るため、さらに3ヶを注文する(@¥308)

②MAX6675(熱電対インターフェースIC)
このICはすぐれもので、冷温端センサーを内蔵していて出力は何と、SPIのデジタルデータである。熱電対温度測定は、とりあえずオペアンプですべて自作したが、これと、どれだけ差があるか、比較したくて買ってみた。¥1219 1ヶ

③DP83848C(イーサネットのPHY層チップ)Aitendoで買った2インチのTFT液晶を動かす予定のSTM32F107 CPU基板のLANインターフェースのため。この基板はmbedと少しかぶるが、安かったのとCPUチップが余っていたので。¥587 1ヶ。

④ATTiny85(8ピンのAVRチップ)
パラレルプログラマーが揃うので、前から欲しかった8ピンAVRを買ってみた。今のところアプリケーションの予定はないが、¥195と安かったので2ヶ買う。

 これで924+1219+587+390=3120、ゲタはめでたく¥3120となり、合計¥7520と無料合計に到達した。喜び勇んで発注する。

 さて、Dragonである。ウェブには沢山の購入記があるので、予備知識はいくらでも手に入る。何しろCDや説明書は一切なくて基板だけが届くようだ。気持ちのよい割り切り方である。ただ、本体のサイトには情報が少ない(というよりこのサイト、情報の引き出し方がとてもわかりにくい)。

 最近、秋月でも売り出した極小のチップTiny10もサポートしているはずなのだが、直営のショップの情報ではサポートとなっているのに、既存のAVRStudio(4.19)の正規のマニュアルにはない(AVRStudio5は、Dragonはまだフルサポートではない)。

 DigiKeyにしては珍しく、到着に3日以上かかった。クリスマスが近いからかもしれない。日本語マニュアルは、例のavr.jpで発見した。ただ、これもバージョンが古いのでTiny10のサポートは入っていない。

ZIFソケットを買ってきた(12/12/2011)
 Dragonは、ISPピンが実装されているだけで、他のパラレルや、肝心のターゲット基板はパターンだけで何もついていない。ユーザーが何らかのソケットを実装する必要がある。初心者には手ごわいだろう。

 本体が届く前から実装レイアウトを色々検討していた。仕事の帰り久しぶりに秋葉に出て秋月に寄り、ゼロプレッシャーソケットを買ってきた。ずっとAVRチップを使って、基板につけたままプログラムできるISPを愛用してきたので、電子工作では定番のこういうソケットに縁がなかった。小さな汎用基板に取り付けてメスのソケットをつけ、Dragonとのあいだをフラットケーブルのジャンパーでつなぐことにする。

S_pc164452 沢山の人が様々な方法で接続している。Dragonのボードそのものをプロトタイプ部で切り取って、Dragonを小さいケースに入れてしまった人もいる。ターゲットチップごとに、ピン接続を固定したプラグインを用意する方式が一番安全で確実だが、ひとつひとつ準備しなければならず手間がかかる。ジャンパーで接続するのが最も手軽だが、間違う確率は高い。

 こちらがやりたいのは、パラレルプログラミングで、ISPでデバッグをすることは余りないだろう。Dragonの基板にZIFソケットをつけてしまうことも出来るが、ジャンパーを扱うには手狭でやりにくい。ということで別基板に移すことにした。実装は、40ピンのソケットとZIFとの配線がけっこう面倒で時間がかかった。同じことの繰り返しなのであきてしまう。

Dragonの動かし方が難しい(12/14/2011)
 プロトタイプ基板の実装をしながら、Dragonの使い方を学習する。マニュアルはあるが、Dragonは多種多様の書き込み法をサポートしているので、やり方は一本道ではない。これが始めての人をまごつかせる。どうもやりかたが頭に入ってこない。

S_pc164451

 しかも、AVRStudioを動かしているうち、いつのまにか画面からプログラムアイコンが消えて、大騒ぎになった。Dragonが起動できないのである。要するに、AVRStudioは最初、プロジェクトを立ち上げる前に使用するプログラマーを指定しなければプログラムアイコンが出てこない。それをしないで既存のプロジェクトを読み込むと、プログラムアイコンが消える(そのプロジェクトは別のプログラマーを指定していたので、それがないので消える)。

 言われてみれば、そのとおりで、最初から手順通りプロジェクトを立ち上げ、プログラマーを指定して開発をしていれば、問題はないのだろうが、こちらはAVRStudioの変則的な使い方を長年している(コンパイルだけAVRStudioで、ファーム書き込みはChaNさんのシリアルプログラマー、エディターはTeraPadなど)。これに気がつくまでえらい時間がかかった。

 こういうIDE(統合開発環境)というのは、決まった手順を忠実になぞっていかないと、うまく行かないことが多い。8ビットのマイコンの環境だと馬鹿にしているところがあったのだろう、一時は半べそをかくほどあせっていた。

 さらに、とんでもないことが起きた。やっとのことでDragonが動き出して、Tiny2313のリカバリーをしようとしたとき、何故かチップが暖かい。へえー、Dragonの高電圧プログラミングってこんなに電力を消費するのかと思いながらチップを良く見たら、こいつはTiny2313ではなくて、もうひとつの動かないチップ、Tiny861の方だ! 顔が青ざめる。2313と861はピンアサインが全く違う。チップを壊した可能性が高い。

 Dragonを買った目的の大部分は、この動かなくなったCPUチップのリカバリーである。それがリカバリーする前に壊してしまったら、何のために買ったのか意味がなくなる。とにかく慌てて861をはずし、2313に入れ替える。ジャンパーを2313用にしてあるので861が壊れたかどうか確認するのは先の話だ。2313の方をすませてからだ。

 気を落ち着かせ、再度Dragonを立ち上げる。Main画面で、シグネチャーバイトの読み出し。よし、2313と認識した。ジャンパーは間違ってなかったようだ。フューズビットの読み出し、よーしこれもOKだ。うむ、Higherバイトが0xFEと、SPIENが不許可になっているだけでなく、RSTDSBLが0、つまりリセットピンも無効になっている。念の入った壊し方をしたものだ。

 とりあえず、工場出荷時の0xDFにして書き込む。よーし、書けた。念のため、チップをブレッドボードのテスト環境に戻し、シリアルで読んで見る。いつものAVRSPがチップを認めてディバイス情報を返してきた。やったやった、良いぞ。ファームを書き込む。テスト環境のステッピングモーターが静かに廻り始めた。ヒャッホー、動いた、動いた。

 いやあ、Tiny2313は生き返った。¥100の石だけれど、資源は無駄にならなかった。嬉しさがこみ上げる(本当に安い娯楽だ)。しかし、手放しでは喜べない。高電圧で駄目にしたかもしれないTiny861のテストが待っている。

Dragonfuse見事に2つとも生還(12/16/2011)
 861のためにピン接続を替える。あせっているので中々うまく接続できない。ただ、861はこのDragonのプロトタイプ基板のリファレンスチップだったらしく、HVSP/パラレルとのピン接続は順番どおりで2313ほどばらばらでなく助かった。

 さあ、ジャンパーがつながった。861が生きているか、生還寸前で倒れたか、緊張の一瞬である。念のためジャンパーの接続をもう一度確かめる。間違いない。意を決して通電し、シグネチャーバイトを読む。おーし、良いぞ。861のシグネチャーが戻ってきた。861はまだ生きていたようだ。思わず拍手が出る。

 次はフューズビットの読み出しである。これも無事読めた。予想通り、クロックの設定ビットが未定義と出ている。これを直して書き込む。書けた。エラーはない。良かった。861は死んでいなかった。HVPPの高圧(といっても12Vだが)はかかっていなかったのだろう。ファームを書いてみよう。Dragonは勿論ファームを書くことも出来る。

 直近のプロジェクト、熱電対のHexファイルを書き込んでみる。うーむ、途中の作業メッセージは全部OKと出ているが、最後のVerifyで何かエラーが出た。高電圧で何かおかしくなったのだろうか。

 2313と同じように、チップをはずしてシリアルの環境に移す。ここでのテスト。フューズビットの読み出しOK。ファームの書き込み。これも順調に終わった。エラーメッセージはない。ふーむ、こちらは大丈夫だ。しかし、高電圧がどこかにかかってI/Oピンがやられている可能性はある。

 こうなったら、とことん調べないと気がすまなくなってきた。全部のピンを確かめるのは大変だが、このあいだの熱電対システムは、861の殆どのピンを使っている。こいつが動けば、完全復帰をほぼ証明できる。

面倒だけれど、アクリル曲げ器に実装された温度表示・制御部でテストすることにする。こいつは、台板、ケース、さらに基板の3組のネジをはずさないとチップが出てこない。行きがかりでもう止められない。ネジを手近な皿に盛って中味を出す。うわー、だめだ。チップは2階建ての基板の下の段だ。もう一段ネジをはずさねばならない。

 ここでやめたら、今までの作業は全く無駄になる。もう止めるわけにはいかない。2ミリセルフタッピングビスを4つはずす。Tiny861Aを取り出した。ファームをテストベンチで書き込んだ。石をセットする。さあどうだ。電源を入れる。ああー良かった。動いた。7セグLEDが数字を表示してヒーターが加熱されていく。暫く動かしてみる。全く問題なし。

 これで、フューズビットを書き損なって動かなくなったCPUチップがパラレルプログラミングで2つとも生還した。見事に生き返ったのである。AVR Dragon導入の当面の目的は完全に達成した。投資対効果から行けば、¥300/¥4400、6.8%の元はとったことになる。

 まあ、それはとにかく、今までの胸のつかえがいっぺんに降りた。はたから見れば何のことかと言われそうな、ささやかな出来事だが、この上なく爽快な気分である。少し短いけれど、ブログにこの喜びを報告することにしよう。

|

« 熱電対によるヒーター制御:まずまずのPID制御。ソースの公開 | トップページ | AVR Dragonのデバッガー機能 debugWIREにはまる »

AVR」カテゴリの記事

コメント

>こいつらはみんなTimeDependしますので無理です。
なるほど、 breakして止めないと変数は見られませんからね
私も V-USBを使ったUSB-SERIAL変換のデバッグに使おうと
したのですが、breakさせることができず使用できませんでした。
(ホストからの通信には必ず応答しないといけない)

投稿: kuga | 2011年12月21日 (水) 20時15分

>あとは 6P-ISPケーブルでターゲットと接続すればすぐ使えますよ。

あ、はい。つなぐだけなら簡単ですが、折角だからペリフェラルを動かしながら、ICEしたいわけで、それが面倒だと言いたかったわけです。

単に、I/Oポート、レジスターの変化を見るだけなら、printfで十分ですよね。

USBや、SDカードとかのやりとりが、変数の内容付きで見られたら最高なんですが、こいつらはみんなTimeDependしますので無理です。

何かシミュレーターのようなダミーのしかけをつないだりするか、ブレークポイントを吟味する必要がありますよね。

投稿: がた老 | 2011年12月21日 (水) 16時00分

>デバッガーって環境づくりが大変なんですよね。
AVRStudio4を使っているなら、
Debug->Select Platform and Device でDragonとターゲットの品番を選択
あとは 6P-ISPケーブルでターゲットと接続すればすぐ使えますよ。

投稿: kuga | 2011年12月21日 (水) 12時02分

>興味はないかもしれませんが、

 ははは、みすかされている。いやあ、kugaさんからも言われているし、いずれやります。デバッガーって環境づくりが大変なんですよね。Lチカくらいなら造作がないんですけど、UARTなんて動かないし。え、動くんですか(こんなことまでわからない)。

>最初の通電までは、中々勇気がいりました。

 はい。でも、このドキドキする気持ちって大事ですよね。これがなくなったら、生きている楽しみが半減します。先が読めないから面白い。

投稿: がた老 | 2011年12月19日 (月) 16時25分

電子工作を始めた頃、ChaNさんの8ピンオーディオでパラレルライタを自作しましたが、その時、ドラゴンの存在を教えてもらいました・・・その時は理解できず(汗;)。

ところで、Dragonといえば、resetピンによる1wire debugができるそうなので、興味はないかもしれませんが、もし機会があればレポートお願いします。

> 意を決して通電

この気持よくわかります。最近はあまり電子工作的な事はできて
いませんが、先日、超久々にパソコンを自作した時も、最初の通電までは、中々勇気がいりました。

投稿: shuji009 | 2011年12月18日 (日) 23時49分

おおー、知らぬ間に2つもコメントがついてしまった。
みなさん、ありがとうございます。

1WIRE DEBUGというのは私も始めてで、持っている石はすべて(Tiny2313、Mega328)、これが出来るようですね。

年末で野暮用が多く、こちらになかなか時間が割けないのですが、いずれ報告いたします。

投稿: がた老 | 2011年12月18日 (日) 22時31分

ぜひデバッガとしても使ってみてください。
私は、mega88でのdebugにしか使ったことがありませんが
Tiny2313でも DebugWire接続はできるし
実機でソースレベルデバッグ、ブレークポイントを置いて
変数の内容を確認できるのは感動ですよ。

投稿: kuga | 2011年12月18日 (日) 18時08分

おー、AVR Drangon買ったんですね。
いいなぁ。

http://www9.plala.or.jp/fsson/NewHP_elc/AVR/Avr_3WdragonDbg.html
こちらにもありますが、デバッガの使い勝手はどうなんでしょうか。

投稿: そら。 | 2011年12月17日 (土) 20時43分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Atmel純正プログラマーDragonで書き損じたCPUチップを救う:

« 熱電対によるヒーター制御:まずまずのPID制御。ソースの公開 | トップページ | AVR Dragonのデバッガー機能 debugWIREにはまる »