前回は、フラッシュメモリへプログラミングができたところまででした。その後 AVRISP mkII での書き込みも普通にできるようになりました。何だったんでしょう?使えるとなればこちらが何かと楽なので AVRISP でプログラミングしてゆくことにします。
さて、プログラミングは無事にできるようになったものの、もとのファームウェアを書き戻してもやっぱり動きません。ここで疑った問題は以下の三点:
- ヒューズビットの設定を間違えていてプロセッサが動いていない(クロック設定間違いなど)
- プロセッサが壊れている
- ファームウェアが壊れている
1 と 2 の問題は簡単なテストプログラムを書いて走らせて、ちゃんと動けば潰せます。のでそこから手を付けることにしました。
あとで使うかもしれないので、もともとのヒューズビットを思い出しつつ記録します。確か以下だったはず
E: FD, H: 99, L: C1
ATMega64 は初めて使うので、以前のプロジェクトで書いたプログラムと微妙にレジスタ名が違ったりするかもしれないので、データシートを首っ引き、特にヒューズビットのところは注意深く読みます。もともとの設定から変えるべきところは以下の通りでした:
- ATmega103 互換モードに設定されていたのでこれを解除
- クロック設定ビットを「外部水晶発振子・ゆっくり起動」に設定 (CKSEL = 1111, SUT = 11)
- 水晶発振子の周波数は 16MHz なので、「強いクロック」に切り替える CKOPT を設定
変更後のヒューズは以下のようになりました。
E: FF, H: 89, L: FF
ヒューズの変更は問題なく済みました。あとはテスト用のプログラム組み。まずは回路図から入出力ピンの用途を確認してソースコードのコメントに書いてゆきます。
これがなかなかに時間がかかりました。ATMega64 はピン数が多いです。内部タイマーを使って LED 出力ピンが一秒に一回点滅するプログラムを書き、ついでにスイッチが認識されているかどうかをテストするプログラムも書いたところ、LED は一秒間隔で正しく点滅、スイッチも正常動作を確認しました。プロセッサには今のところ異常は見られません。まあ一度書き込みができなくなってはいたんですが。
こうなると、ファームウェアが壊れている可能性が濃厚です。フラッシュメモリのデータは不揮発性といっても、原理は、FET のゲートに電荷を保持するというもの。乱暴に言えば DRAM とやっていることは変わりません。何年も放置したらさすがにデータが揮発するのでは?と思い、調べてみましたが、やはり、5-10年という情報が多くみられました。少なくても10年は放置していたので怪しいです。analog さんに「ごめーん」と言って連絡すれば「しょうがないですねー、プログラマ持ってますか?」などといってもとのファームウェアを送ってくれたんじゃないかと思うんですが、それはもうかないません。なんか analog さんの声が懐かしく思い出されます。返す返すもひどいことしたな。ごめんね
これはもう仕方がない。プロセッサは生きているようなので、analog さんの言っていたことを思い出しながらファームウェアを自分で組むことにします。色々懸念点はあるけれども今日はここまでです。
あ、ヒューズビットの設定をするのに、以下のサイトがとっても助けになりました。感謝
http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega64