■いろいろ景気の悪い話が聞こえてくるアトメル社のATmega。Cコンパイラが無料だったりで入り易いところに親しみを覚えています。プログラムの書き込みにはISPをつかっていて重宝しているんですが、ISP経由で間違えた設定をしてしまうとISPが使えなくなってしまう場合があるのが難点といえば難点。
ISPはIn-System Programmerの略で、何かの名前というよりは、「回路に組み込んだ状態で使えるプログラマ」という「方式」について述べていて、実体としてはシリアルプログラマということになる。この方式に対して「パラレルプログラマ」というものがあって、こちらはISPでは使えない状態であっても書き換えができるとされる。ただ、必要とするピン数が多い。ISPが制御線2本にデータ線2本、計4本であるのに対して、パラレルは制御線10本にデータ線8本で計18本になる。megaATRシリーズでピン数の少ないものは23本からだから、そうなると回路に組み込んだ状態でパラレル書き込む回路というのは当然、結構なオーバーヘッドになってしまう。
そういう面倒なものなんだけど、上記のように誤操作でISPに対して閉塞させてしまった石でも書き換えることができて、閉塞解除することができる。最近良く使っているATmega128は1個¥1700以上するものなので、閉塞してしまったからとほいほい買い換えるような感じではない。だから、閉塞解除できるパラレルプログラマというのは便利なのだけど、これはこれで結構お値が張る。改めて調べてみると、Digi-KeyでATSK500は‥‥¥8342(2009/01時点)で、あ、なんか微妙かも。
いやいやいや、やっぱりかさばるし、QFP64の変換ボード付きの状態で使えるアダプタを作らなければならないし、というわけでパラレルプログラマを作ることにした。だいたいやりたいことは閉塞解除だけなのだから、「プログラマ」までは
プログラマの本体側にはATmega168(そんなに大きなプログラムを使うわけではないからもっとATmega8でも構わないはずですが、手元にあるのがそれくらいだった)を使い、そこから18本の線を出して配線すればいいわけです。基本的には。
ただ、問題はパラレルプログラミングモードには12Vが必要で、しかも、シーケンスに従って0V, 5V, 12Vの間を遷移させなければならないということ。
良くしたもので、5V給電で12Vを出力する専用ICというものがあって、今回はそれを使いました。マクシム=ダラス社のMAX662Aで、マルツパーツから購入
このICにはシャットダウンモードというものがあって、シャットダウンさせると供給電圧がスルーアウトします。つまり、5V-12Vの制御が可能。あとは0Vを実現するために、出力側にNch-FETを一段噛ましてスイッチ制御するようにしました(もちろんPch-FETでも同じことはできる)。都合、制御線はさらに1本増えて19本ということに。
パラレルモードに切り替えるシーケンスはデータシートに乗っている通りで、やっかいなのがRESETに"0"を設定しろ、とか11.5-12.5Vを印加しろとかある箇所で、そこをMAX662の制御で対応するわけです。
大変だったのは、とにかく線の本数が多いことで、一部半田不良を見抜けず、うまく動作しないことに悩んだのですが、導通確認で解消しました。導通はもちろんコントローラとなるATmega168とターゲットのATmega128の端子間になるんですが、確認のため、ATega168側でそれぞれのピンをON/OFFさせるプログラムを走らせています。ATmega128側ではデジタルテスタの周波数カウンタで、ON/OFFの繰り返しによる方形波の周波数を検出できるかどうかで確認としています。ATmega168ではピンによってはアナログモードとデジタルモードを持っていたり、そおそもデジタル入力を持たないピンがあったりして、なぜかピンの電圧を落とせない(ロジック的に0にできない)現象などあって多少悩みました。明示的にAD変換やアナログコンパレータ機能まわりをディスエーブルにしておくのが無難と思います。
それと、データシートにはタイミングチャートが乗っていますが、けっこう間が空いているようで、OE,WR,XTAL1の変更とデータのリードライトタイミングには少し余裕を持たせた方が読み書きは安定するようです。
で、過去に閉塞させたATmega128やATmega64などを載せてみると、ちゃんとシグネチャバイトを読み出せて一安心。手元のATmega64はヒューズビットの書き換えができたのですが、チップイレースができない(ので、ロックビットをクリアできない)ようだったり、閉塞したATmega128の一つはシグネチャの読み出しもおかしくなっていたりと妙なものもありますが、基本的なところは押さえることができたようです。