プログラムライタ と ライティングソフト  06.05.29 
 プログラムライタとライティングソフトをまとめました。
===========================================================================================
ライタ  時の流れとともにライタも移り変わります。作ったことのあるものをすべてあげましたが印がお勧めです。
     (PCはwindowsXP,2k ME?)
HIDaspxライタ デバイスドライバのインストールが不要です。USBの基本ライタとして常用できます。
           使い方   2台目   hidmonの実験  D+,D-の電圧
AVRminiProgライタ AVRISP mkUとしてAVRstudioで使えるのが特長です
COMポート接続ISPライタ 他のライタがないときに作りやすいライタです。PCにCOMポートが必要です。
COMポートSPI Bridge ライタ COMポート使用の使いやすいライタです。giveio.sysは不要です。
COMポートSPI Bridge ライタ2 ws☆Nakさんの#173ライタ ChaNさんのオリジナル改良で成長したライタになりました
USB-SPI Bridge ライタ USB-シリアル変換にcp2102を使います。
USBasp ライタ USB専用ICを使わずATmega8一つのUSBライタです。mega48,88.168用の改良版もあります。
USB-SPI Bridge ライタ2 USB-シリアル変換にFTDI-FT232BMを使います。
にわとり−たまご ライタ シリアルポートのないPCでUSBaspのファームを書くライタです。
    ----- 以下は制作して使いましたが、今ではお勧めできないライタです -----
AVR910 ライタ ATMELアプリケーションノートによるものです。
FTDI232BM+AVR910 ライタ USB接続に換えてみたものです。
LPTポート制御 ISPアダプタ 私が最初に作ったライタです。
 ※USBのみのPCでは、ライタがないとライタ作りは困難です(初めての場合)。USBasp ライタをお貸しできます。ご相談ください。
===========================================================================================
ライティングソフト
avrspx.exe  ChaNさんのソフトavrsp.exeをUSBaspにも対応できるようにkkkさんが拡張したものです。
avrdude  オリジナルUSBasp指定ソフト。使いませんが使用法を調べましたので残します。
===========================================================================================
その他
3.3Vのターゲット ===========================================================================================






HIDaspxライタ  2008.09.28   最新版はここです

(現在の発展状況から考えて、HIDaspxライタの制作と利用の観点から紹介することにして、記述を変更しました。2008.09.28)

 HID は Human Interface Device の略でキーボードやマウスなどのデバイスをさすものです。USBにはHIDクラスが規定されていて、OSはこのデバイスドライバをあらかじめ準備しています。したがって、これを利用したUSBデバイスは特別にデバイスドライバを用意することなく使えることになります。自己の所有でないコンピュータでは自由にインストールできない場合が多いのですがそのときには重宝するライタです。

HIDタイプのライタはびんずめ堂さんの原作で、senshuさんがデバイスドライバインストール不要の利点に着目して研究・改良して使いやすくて速度の速いライタとなありました。この間、森芳電子さんのライタも参考にされています。同時に、以前からこの研究をしていたirukaさんがファームウエアの向上に成功し、senshuさんirukaさんと情報を交換しながら成果を取り入れてファームウエアを構築しました。また、別途PC側書き込みソフトを改善して新しいHIDライタとして完成の域に近づいています。
関係システムの名称は、他のHIDライタとの混同を避けるために、ファームはHIDaspx、PCソフトはhidspxとしています。なお、ハードウエアはびんずめ堂さんが後ほど改訂しましたので、3者とも同じ構成になっています。

この欄では私の都合のいいように取捨選択したものについて書いていますので、是非関係の方々のページをご覧になってください。


HIDaspxのハードウエア
USBインターフェイスは3.3V電源によるデバイスの入出力となっているのでいろいろな工夫があります。USBバスから電源を取るときはそれが5Vですから、@三端子レギュレータを入れて3.3Vにする、Aダイオードを複数入れて3.3V近くに落とす、B電源は5VのままでD+、D-に3.6Vのツェナーダイオードを入れて制限する、などの方法が取られます。私のライタはターゲットから電源を取ることにしています(5Vと3.3Vに対応するために)のでBの方法を取っています。次の回路図は自分の都合のいいようにアレンジしています。正しくは原典を参照してください。





HIDaspxのファームウエアとライティングソフト:
 HIDクラス利用のライタは速度が遅くてややメモリの大きいデバイスでは使いにくかったのですが、senshuさんとirukaさんの努力で十分な実用速度を持ったファームウエアになっています。開発の状況が日を追って詳しく書かれていますので是非senshuさんのページを訪ねてください。
プログラム一式の最新版はsenshuさんのページhidspx-0924a.zip として公開されています。サイト内検索でこのファイル名で検索するのが便利です。この方法を取るとキーワードが黄色背景の文字になりますので高速スクロールしても発見しやすいです。今後、改善とともにファイル名も変わると思いますが、"HID [download]"のキーワードでサイト内検索をすると発見できます。

 プログラム利用の手順……慣れない人のために (2008.11.02 書き換えました)
繰り返しになりますが、senshuさんのページで「hidspx実行ファイル, HIDaspxファームウェア ... hidspx-mmdd.zip」を探し出し、ダウンロードします。 11.02現在では hidspx-1031.zip  です。
zipファイルを解凍すると、"hidspx-1031"フォルダができますがその中の"bin"フォルダにあるファイルを使います。なお、以前の版に比べてハードウエアとヒューズ設定が変わっているので注意が必要です。ライタ専用で外部へのクロック出力をしなければ以前のハードでもかまいません。
main.hexがライタのファームウエアですから、ライタのtiny2313に書き込みます。(ヒューズは L=11111111、H=11111011、Ex=00000001、LとHを変更します)
つぎに、このライタで他のターゲットに書き込むライティングソフトの準備をします。このままのフォルダでもいいのですが、使いやすい場所に適当なフォルダを作ってその中に hidspx.exe hidspx.ini fuse.txt (libusb0.dll) をコピーします。このとき、全角文字や空白や半角カタカナを含むpathやフォルダが関係しない方がいいことに注意してください。\Documents and Settings、デスクトップ、My Documentsなどが曲者です。
hexファイルを書き込むときは(ライタを使うときは)、hexファイルのあるディレクトリをカレントにしたコマンドプロンプトを開き、hidspx を実行する(このときはpathをとおしておくこと)か、hidspxをドラッグアンドドロップして行います。

まだ読み出しに少し使っただけですが、「遅いけれども」と付いていた表現は過去のものとなっています。。
hidspx-0924.zipでは、ファームとライティングソフトがセットになって動くようです。同時に配布されたものを使う必要があるようです。「なお,このアーカイブはテスト的な公開です。」となっていますのでご注意ください。

hidspxはAVRspxをHIDaspxに対応させたものです。基本的な使い方はAVRspxと変わりません。またこれは、AVRspxの派生型ですから、AVRspxとして他のライタでも書けるようですが副作用の確認が取れていないので今のところはHIDaspx専用とされています。
hidspx-bcc.exe は全角文字を含むpathに対応するためにbccでコンパイルされたものです。フォルダ名に全角やスペースを含んでいて動作がおかしいときは是非使ってみてください。これをを使うときは ini ファイルがありませんので -ph -d4 の指定が必要です。(hidspx-bcc.exeをhidspxとリネームするとiniファイルが使えます)

HIDaspxはBASCOM-AVRからも利用できます。senshuさんのページで"BASCOM-AVRから利用する方法"でサイト内検索をしてください。使った方から「快適です」と報告いただきました。

私自身は、大きなプログラムを書くことがほとんどないこと、せいぜい64kBのROMしか使わないこと、速度が十分満足できること、USBでポート番号を考えなくても使えること、などからCOM-SPIとともに常用してみようと思っています。

もし、HIDaspxライタを作られたら、是非senshuさんのページに報告をお願いしたいと思います。良否いずれであっても、簡単であってもsenshuさんは待っておられます。多く方の報告を元に普遍的なライタとして確立したいとの願いを持っておられるのでご協力をお願いします。

(2008.09.28) ターゲットボードportBのsck、miso端子にLEDを接続して、常時H出力で点灯時L出力になる回路に書き込みを行ったところ、イレーズ状態では正常に書き込めますが、portBに書き込んだあと再書き込みを使用とするとエラーが起こり、また消費電流に異常があらわれました。senshuさんに問い合わせたところ、気がかりであったところの欠点が現れたといわれて、早速新しいソフトを公表してくれました。hidspx-0928a.zip として公開されていますので、例によってキーワード"HID [download]"でサイト内検索をされるのがいいと思います。(2008.10.01現在はhidspx-0929a.zip ですが、進歩が早いので「最新のHIDaspx用アーカイブ[Download]」をキーワードにサイト内検索をすると確実に見つけられます。この場所の最新版に注意してください。)
実行に当たっては同時に配布されるHIDaspxとhidspxをペアで使用することが大切です。ポートの競合を回避しただけでなくirukaさんの高速化6を採用しているので一層速くなっています。
ついでながら、実験中は電源の消費電流をよく見ることにしています。今回もエラーが出て、「おかしいな」と思うと同時に電流計を見ていました。通常20mA程度のものが80mAほど流れています。念のためCOM-SPIブリッジライタを繋ぐと正常です。これでイレーズしてHIDaspxを繋ぐと異常電流は流れません。senshuさんから聞いていたポート処理の問題であると気が付きました。

(2008.10.07) バグが修正されて hidspx-1006.zip  となりました。これでクロックが遅いときも問題なく使用できるようです。以前のバージョンを使っている場合にはファームウエアとhidspxをともに最新版に変更すべきでしょう。この間の流れを見ていますと1ヶ所を修正するとその副作用が生じる場合があって、全体を見ながらの修正が難しいことを感じさせられます。利用させていただく一方のみにはただ感謝のみです。

senshuさんのページから、-dnの使用法を抜粋しますと、
-d0 18MHz以上  -d1 8MHz以上  -d2 4MHz以上  -d4 1MHz以上  -d5 500kHz以上
-d120 16kHz以上
  となっています。
なお、ヒューズを書くときは、誤書き込みは困るので、安全を見て大きめの-dを使うことが推奨されています。 -d4 にしておくと通常の使用には問題なさそうです。

私のPCは、hidmon.exeのbenchテストで3.5kB/sと遅いのですが、mega48の読み出しが -d4で2.4秒、 -d1で1.8秒でした。 4〜8kBのROMでは待ち時間は感じられません。

(2008.10.08) senshuさんから掲示板経由で次のようなメッセージをいただいています。(太字は私が付け加えました)
  hidspx-1006は最新版のavrspxです
 hidspx.exe と avrspx.exe は名前が異なるだけです。hidspxと名前を付けているのは、-ph(HIDaspx)をサポートしていますが、それ以外はavrspxと全く同じものです。
hidspx.exeといっても、-ph がデフォルトになっているわけではありません。avrspx.exe と改名し、これを利用するのも良い方法です。
現行のavrspx.exeには、エラー表示などの不具合があり、hidspxではこれらを修正しています。
現在使っているものをBACKUP後に、hidspx.exe をavrspx.exe にコピーしてお使いください。私のところでは、この方法で正常に動作しています。

私(kuman)は現在のところ、0hidspx.exe としてHIDaspx用のiniファイルを用意し、また 1hidspx.exe と名を変えて COM-SPIライタ用iniファイルでavrspxとして使っています。 hidspx=avrspx+α ですからavrespxはなくても良いことになります。やがてHIDaspx対応のavrspxという名に変更されるとのことです。

(2008.10.12) 多くの人に改良を加えられてhidspxも完成バージョンに近づいています。hidspx-1010.zip hidspx-1012.zipが最新のものです。SUT設定によるエラーや、電源投入順序によるエラーも改善されました。ハードウエアもエラー時にUSBコネクタを繋ぎ直さなくても良いようにD-のプルアップ抵抗がVccではなくPD5端子に接続されました。電源を入れ直すと一瞬PD5が入力(Hi-Z)になってUSBコネクタを抜いたのと等価になるそうです。

私のコンピュータは古くて遅いようで(celeron 500MHz WinXP)、USBはオンボードで1.1が付いています。あとからPCIバスに2.0のUSBカードを付けています。オンボードでないと最良ではないと聞きますが、2.0のUSBハブを付けるとハブとPC間の通信がハイスピードになるために速度が向上するとのことですから、ハブの有無を含めて速度を調べました。
mega48、8MHzに4kBのランダムデータを読み書きしました。-dオプションは -d1 (8MHz以上)です。
  書き込みとベリファイ読み出しのみ
ハブなし:  3.2秒  1.6秒
ハブあり:  2.1秒  1.1秒
ハブ経由が快適です。特に大きなROMでなければ待ち時間はありません。
よく使う Tiny2313 を -d1 ハブあり で読み出すと 0.6秒でした。 一瞬の感じです。

もっと速いものが欲しい、と思わなければ USBポートで最も使いやすいライタではないかと思えるところまで進歩しています。


HIDaspx 2台目の制作 2008.11.02 HIDaspxの改訂にしたがって。
今日現在の最新版 hidaspx-1031 では回路図が大幅に変わっています。
@レスキュー用の外部へのクロック出力が PORTB2 に変わり、クロックも 1MHz になりました。
A関係して、ライタとI/OのPORTB2出力を切り換えるために PD2入力のHL切替機能が付加されました。
BUSBrs232用にTXDとRXDの端子が増設されました。

これらの変更を受けて、I/O実験用にPB7〜0接続用の端子(ICソケット)、USBrs232用のTXD/RXD端子を準備し、PB2のHL入力切替のためのスイッチを取り付けたボードを作りました。


基板のサイズはある程度小さければ机上で邪魔になることもないので、私のスタンダードサイズの1/2の73mm×23mmとしています。
Tiny2313は手持ちのSOICとなりました。邪道ではありますがD±の電圧リミタに青LED(秋月の20個\100)を使ってみました。事前測定では小電流で2.8V、82Ω5Vで3.2V(約20mA)でしたから使えるのではないかと判断しました。

電源供給はセルフパワーに限定しています。他のライタと共通にしていることと、不特定のターゲットボードにUSBから供給したくないからです。このためにファームを書き換えるときは基板の端子に5Vを直接加えます。

電源確認用の赤LEDは電源ラインに直結です。

中段の写真のようにICソケットを端子として取り付けました。ISPのアダプタは以前に作りましたからそのまま使いますが、I/0の実験、UARTの実験、レスキュークロックの出力などのアダプタはあとで作る予定です。

表面は間延びした配置ですが、裏面は結構埋まっています。ジャンパピンを置く場所がなくて、スイッチにしました。微少電流ですから信頼性はもう一つですが心配しながら使います。

ライタとしてのみ今は使っていますが快適に動いています。他の場所にも書きましたが特別な高速を求めなければ十分実用になるスピードです。senshuさんの言葉にもありましたが、少し前まではこの速度が最高だったと思います。

副産物として青色LEDがおもしろい挙動をします。D-側のものは常時は点灯していますが、USBに接続したままPCの電源が切れると消灯します。USBから抜くと点灯します。D+側のものは通信中だけ点灯します。通信のモニタになるようです。

パスコンはICのVcc近くに0.1を付けてあるだけですが、過去には誤動作を経験していませんのでそのままにしています。セルフパワーですから電源に大きなCがあるので大丈夫なのでしょう。

余談ながら裏面写真の中央付近にチップセラミックコンデンサを置いています。このような場所ではチップ部品が工作を楽にしてくれます。青色ダイオードもチップですが1608サイズで極性もありますから少々苦労しました。

ケースは思案中ですが、とりあえず裏面の接触事故を防ぐためにアクリル版を貼り付けています。ISPリードは長めが使いやすいので22cmになっています。エラーが出るようなら切りつめようと考えていますが、これも快調です。

ライタが多数必要なときは組み立てる手間と確実性が求められますが1台だけ自分用を作るのならいろいろな楽しみ方ができると思います。

なお、ライタとして使うだけなら回路図の I/O端子、UART端子、クロック出力切替スイッチ は不要です。

ご感想などありましたらお寄せください。




HIDaspx kuman流使い方
個性の強い使い方だとは思いますが、書き込み方法を自分流に固定しておくと間違いが少ない使い方ができます。まねてみようかな、と思われるかかたはどうぞお読みください。
当方にはWindowsXPしかないのでその環境での方法となります。また、ライタの電源はターゲットから取る仕様にしています。

ソフトウエアの準備は senshuさんのサイトhttp://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2FHIDaspx#content_1_15から最新版の hidspx-mmdd.zip をダウンロードして解凍して、hidspx-mmddフォルダの \bin の中に hidspx と hidspx.ini と fuse.txt があることを確認します。

次にあとの操作をしやすくするために、C:\に 0writerフォルダを作ります。このフォルダの中に先に確認した  hidspx と hidspx.ini と fuse.txt をコピーします。使いやすいように C:\0writerフォルダのショートカットをデスクトップに作っておきます。 なお、0writerという名前にしたのはゼロを付けると探しやすくなるためです。もちろん名前は、aでもbでもxxyyでもかまいません。

以下のCMD窓(コマンドプロンプト)を開くには powertoys(XPのとき)またはFolderPrompt(2000/XPのとき)のインストールが必要です。

ショートカットをクリックして C:\0writer を開きますが、使いやすいように左下に小さく窓を出しておきます。


hidspx.exe をドラッグアンドドロップしたらENTERキーを押してみてください。hidspxの使い方が表示されます。
ここで F3キーを押すと前回入力した行がリピートされますから、そのまま使ったり、編集して使うと便利です。私は多用しています。

ターゲットボードのMCUの情報を読み出して見ましょう。ターゲットボードを繋ぎ、ライタとターゲットに電源が入っていることを確認します。
そのあとに、 C:\0writer>C:\0writerhidspx -rを書いてエンターキーを押します。
このようにMCU情報が表示されます。このとき、ターゲットボードのクロックが遅い場合は読み出しに失敗するかもしれません。そのときはデフォルトの -d4 ではなく、-d10 などとゆっくり読み出す措置を取ります。
C:\0writer>C:\0writerhidspx -r -d10
-dを書かなければ hidspx.ini ファイルのフ指定で -d4 となっています。クロックが速ければ -d1 など試してみてもいいでしょう。

次に書かれたプログラムを読み出します。尤も書いてなければFFが読み出されるだけです。
C:\0writer>C:\0writerhidspx -rp とします。

ヒューズ情報を読み出すときは、
C:\0writer>C:\0writerhidspx -rf
です。
書き込む前に読み出しの習慣を付けておくと、書けなくて困ったり、間違った書き込みで誤動作することも少なくなります。特に、遅いクロックの時にヒューズを書き込み損ねて再起不能のMCUとしないためにも大切です(私は救済のパラレルライタを持っていません)。

次に、プログラムの書き込みの方法です。書き込むhexファイルを見えるようにして、
C:\0writer>C:\0writerhidspx のあとにドラッグアンドドロップするのが簡単です。


ヒューズの書き込みは、間違わないように注意が必要です。誤ってリセットピンを無効にするヒューズを書きますとパラレルライタがなければ救済できません。プログラムに指示があるときはいいのですが、自分でデータシートから読み出すのはパズルを解くような難しさを感じます。自分のためにこんな表を作ってみました。
たとえば購入時のTiny2313は 内蔵RC発振 1MHz になっていますが、これを内蔵RC発振で8MHzにしたいときは
C:\0writer>C:\0writerhidspx -fL11100100 -fH11011111 -fx00000001
とするか、または、fLだけの変更ですから
C:\0writer>C:\0writerhidspx -fL11100100
とします。(この表のドラッグアンドドロップで設定できるように表を作っています)
このライタに限らず、購入時は内蔵RC発振ですが、これを水晶やセラロックに設定すると書いたとたんに水晶またはセラロックがないと稼働しないので、書き込む前に水晶などを配線しておくことが必要です。

MCUから読み出したプログラムをhexファイルとして残したいときは、
C:\0writer>C:\0writerhidspx -rp>xyz.hex
とリダイレクトするとC:\0writerフォルダに書き出されますから必要に応じて移動・保管をします。


hidmon.exeの実験
2台目はライタ以外の実験ができるように端子を出しましたから、hidmon.exe でポートのon,offをする実験をしました。PORTDは0,1は使えるとのことですが、その他は通信用に使っていますから安全に読み書きができるPORTBだけで実験しました。
ICソケットで端子を作っているのでブレッドボード用に作ったLEDアレイがそのまま使えます。ただ、このLEDはアノード共通になっていますから(抵抗内蔵のジャンク品です)アノードを電源に接続して、カソードをportに接続しています。論理Lで点灯しますからPORTに1を書けば消灯、0を書けば点灯になります。

下の写真はLEDがわかるように露出不足気味で撮っています。LEDを撮影するのは難しいですね。赤が白になってしまいます。


HIDaspxを接続して(私のものはセルフパワーですから外部電源を繋ぐ必要があります)、PD2の切替SWをGND側にして、その後電源を入れます。動作中はPD2を読みませんので通電中は切り替えできません。
PCのCMD窓を立ち上げて、hidmon.exeを実行します。

C:\a10_11>C:\a10_11\0hidmon.exe  起動する                ・
HIDaspx is USB-IO mode.      USB-IOモードにななった
AVR> p *              I/Oに関係するレジスタの表示
    DIDR(21) 00 0000_0000
   UBRRH(22) 00 0000_0000
   UCSRC(23) 06 0000_0110
    ACSR(28) 00 0000_0000
   UBRRL(29) 00 0000_0000
   UCSRB(2a) 00 0000_0000
   UCSRA(2b) 20 0010_0000
     UDR(2c) 00 0000_0000
     RXB(2c) 00 0000_0000
     TXB(2c) 00 0000_0000
   USICR(2d) 00 0000_0000
   USISR(2e) 00 0000_0000
   USIDR(2f) 00 0000_0000
    PIND(30) 30 0011_0000     portDの入力レジスタ
    DDRD(31) 63 0110_0011     portDの入出力方向指定 1になっているビットが出力
   PORTD(32) 24 0010_0100     portDの出力状態 1がH
  GPIOR0(33) 00 0000_0000
  GPIOR1(34) 00 0000_0000
  GPIOR2(35) 00 0000_0000
    PINB(36) ff 1111_1111     portBの入力レジスタ
    DDRB(37) 00 0000_0000     portBは全ビット入力方向
   PORTB(38) 00 0000_0000     portBはゼロ
    PINA(39) 00 0000_0000     portAは水晶接続機能になっているから無関係
    DDRA(3a) 00 0000_0000     〃
   PORTA(3b) 00 0000_0000     〃
    EECR(3c) 00 0000_0000
    EEDR(3d) 00 0000_0000
    EEAR(3e) 5f 0101_1111
   EEARL(3e) 5f 0101_1111
   PCMSK(40) 00 0000_0000
  WDTCSR(41) 00 0000_0000
  TCCR1C(42) 00 0000_0000
   GTCCR(43) 00 0000_0000     
   ICR1L(44) 00 0000_0000
   ICR1H(45) 00 0000_0000
   CLKPR(46) 00 0000_0000
  OCR1BL(48) 00 0000_0000
  OCR1BH(49) 00 0000_0000
   OCR1L(4a) 00 0000_0000
   OCR1H(4b) 00 0000_0000
  OCR1AL(4a) 00 0000_0000
  OCR1AH(4b) 00 0000_0000
  TCNT1L(4c) 00 0000_0000
  TCNT1H(4d) 00 0000_0000
  TCCR1B(4e) 00 0000_0000
  TCCR1A(4f) 00 0000_0000
  TCCR0A(50) 00 0000_0000
  OSCCAL(51) 5f 0101_1111
   TCNT0(52) 00 0000_0000     
  TCCR0B(53) 00 0000_0000
   MCUSR(54) 05 0000_0101
   MCUCR(55) 0c 0000_1100
   OCR0A(56) 00 0000_0000
  SPMCSR(57) 00 0000_0000
    TIFR(58) 00 0000_0000
   TIMSK(59) 00 0000_0000
    EIFR(5a) 00 0000_0000
   GIMSK(5b) 80 1000_0000
   OCR0B(5c) 00 0000_0000
AVR> p               portを表示せよ
    PIND(30) 30 0011_0000      内容は上に同じ
   PORTD(32) 24 0010_0100
    PINB(36) ff 1111_1111
   PORTB(38) 00 0000_0000
    PINA(39) 00 0000_0000
   PORTA(3b) 00 0000_0000
AVR> p ddrb ff           portBの入出力方向を全ビット出力にする 16進数で指定
    ddrb(37) ff 1111_1111      出力になった
AVR> p portb ff           pportBをすべてHにする
   portb(38) ff 1111_1111      全LED消灯
AVR> p portb 00           すべてLにする
   portb(38) 00 0000_0000      全LED点灯
AVR> p portb 1010_1010       一つおきに点灯させる 2進数の時はニブル間に_を入れる
   portb(38) aa 1010_1010
AVR> p pinb 1111_1111        AVRの特別な機能か、pinに1を書くと出力が反転する
    pinb(36) 55 0101_0101      もちろん書かれた値でなく、portのHLを読みとっている
AVR> p portb 1010_0101       上の写真の点灯状態を指定
   portb(38) a5 1010_0101
AVR> q               hidmonを終了する
Bye.
とりあえず簡単なテストをしてみました。
CMD窓での操作となりますが、上下キーで前のコマンドを呼び出せることと左右キーで編集できるのでキー入力は意外に少ない感じです。昔のラインエディタを使っている気分になります。

バイトデータの入力は、16進数はそのままの2桁か、または0xを付けて書きます。2進数の時は4桁と4桁を "_"(アンダースコア)で区切って書きます。

安全を考えるとportBだけしか使えませんが、ポート制御を体験するには適していると思います。テスタで当たれば入力ポートの内蔵プルアップの有無まで体験できるかもしれません。コンピュータのキーボードからIOをコントロールする実例を思いつきませんが、簡単なロボットの制御などどうでしょうか。

dllを使う技術はありませんが、プログラムで活用できればportDの一部も(プログラムでマスクして)使うことで適用範囲が拡がると思います。
単一のハードウエアでいくつかの使い分けができれば、おもしろいおもちゃだといっていいでしょう。この他にUART機能も試してみたいと思っています。


D+,D-の電圧
(序)HIDaspxのUSB入力端子の扱いについて多くの議論がなされました(2008.10)。私kumanの考えでまとめてみたいと思います。記述に誤りがありましたら掲示板かメールでご連絡をお願いします。

HIDaspxの原型はUSBaspと思いますが、初期のUSBaspにはD+,D-にクリップのZDは付いていませんでした(usbasp.2006-09-16.tarまで)。この時期に私が弘前大学の小山さんにUSBaspの使用を勧めたのですがノートパソコンで5V使用ができないものがある、という報告がありました。kkkさんにお願いしたところ、直接小山さんとのメール連絡で研究されました。kkkさんの成果で、D-を抵抗分圧で3.3V付近にすると5V電源で使用できることが判明しました(2006.6)

その後の詳細は覚えていませんが、USBaspは2006-12-29版で3.6VのZDをd+,d-端子に加えています。以後、類似の回路ではZDを付けるのが普通になったようです。これを付ける前には海外でも同じ問題が起こっているようだとkkkさんに聞いています。USBasp開発者も問題にしたのだと思います。

(現在の状況) HIDaspxは3.6VZDを入れていますが3.3Vにクリップするには他の方法もあるのではないかと考えられて次の方法が採られています。
 @3.6VZDを入れる。(原典)
 AVfが3.3Vに近い青色LEDを入れる。
 BPNPトランジスタを青色LEDまたはシリーズレギュレータでアクティブにクリップする(senshuさん「安定な2.6Vの電圧源を検討する」)

@はかなり多くの人に使われているようですがこれで不具合が起こったという報告はすんさんのZD3.3では認識されなかった(すんさん掲示板)という以外は聞いていません。3.6VZDを付加する負担は小さくHIDaspxだけでなく他の回路でも実績があるようですのでこの方法が奨められます。
Aはkugaさん、senshuさん、kumanの実験報告がありますがいずれも問題は起こっていません。点滅が通信情報も知らせますのでおもしろい方法です。実験的に使うには十分価値があると思います。
Bは安定したクリップ電圧が得られますので、今後、厳密なクリップが求められれば付加デバイスが比較的簡単なため有効な方法だと思います。

(入出力端子に関する考察):5Vと3.3V切替にすると複雑にはなりますが、多くの解があると思います。シンプルに5V、3.3V共用のために考察を行います。

1 リミタを入れなければ動作しない実際の報告はUSBaspで小山さんが2台のノートパソコン(異機種)で動かなかったのと、kumanがハブではHIDaspxで動かなかった、という3例しか国内ではありません。これに対してkugaさんのコンピュータではマスターボード、増設カード、ハブともに正常に動いたと報告があり、kumanもマスターボード、増設カードでは正常です。当時のUSBaspに反応がないことからもリミタを入れなくても動作するコンピュータが多いのではないかと推測されます。

2 5V動作の時にD-のプルアップを抵抗分圧で3.3Vに近づけると信号にリミタがかからなくても、またD-の処理をしなくても正常です。また、D-にだけZDを入れた場合も正常に動きます。このことから、フローティング時のD-を検出するときに3.3Vからプルアップされているような結果があるとあとの通信信号のレベルは3.3Vより遙かに高くても問題がないのではないかとも考えられます。すんさんも同様の意見を持っています。

3 USB2.0の規格書では、ドライバの信号出力の上限VOHが3.6Vとさてれいます。しかし、入力信号の上限は規定されていません。このことからドライバは3.6V超を出しませんが、入力側はそれを超えても認識するかもしれません。ただし、フローティング時(接続して信号はともに入力状態で、D-の直流をホストが読んでいると、と思う)の入力は2.7〜3.6Vと決められています。ホストがこれを読んだときに3.6Vを大幅に超えているときは、@マージンとして3.6Vを満たしていると見るか、AVbusとショートしているような異常事態と見るか、があるのではないでしょうか。@なら正常に動くでしょうし、Aならエラーとなるはずです。このように考えれば上記 2 も説明できます。

4 信号のクロスオーバー電圧は1.3〜2.0Vと規格で決められています。tn2313を5V駆動したときは、リミタなく3.3Vプルアップの時にD-信号には約4V、D-信号には70〜100Ωがあっても4Vをかなり超過する信号が出されると思います。本来、規格外ですから動かなくてもいいのですが現実に正常動作します。このtn2313の出力レベルはリミタを付けると上限は押さえられますが、クロスオーバー電圧は小さくならないはずです。これを小さくするためにはノンノさん提案のLEDとショットキD逆並列によるリミタが必要になります。

5 3.6VZDを入れると問題なく稼働するのが実状ですが、誰が最初にこれを発表したのか、なぜうまくいくのかという理論を見つけ得ていません。D-に入れるとうまく動いた、信号は対称だからD+にも入れておこうとよく知った人が入れたと推測してはいけないでしょうか。余談ですが、LCD表示器を4ビットモードで使うときに残った4ビットをどう処理するかについて、メーカーから解放が望ましい、と説明されているにもかかわらず、著名な方がGNDに接続した回路を発表したために、あとに続く多くの人がGNDにつないだ回路図を発表していました。ひょっとしてこれに似たことが起こってはいないでしょうか。

6 将来はkugaさんの言葉のように信号振幅が3.6V超になれば規格外だとして受け付けないドライバ(レシーバ?)が出るかもしれません。あるいはクロスオーバー電圧が規格内でなければ受け付けないホストが出てくるかもしれません。そうなれば現在のHIDaspxやUSBaspは使えなくなることも考えられます。
規格を厳密に守ろうとするならば、FTDI232RLやCP2102などの専用チップを使う方が確実でしょう。工業製品的に世に出すならそうすべきと思います。しかし、HIDaspxはそれに比べてずば抜けてシンプルで作りやすい上にドライバのインストールが不要です。アマチュアが自分のために作って自己責任で使う、または教育現場で指導者が限界を知りながら実習に使う、という使用条件では今現在、高い確率で正常に使えるならそれは正しい使い方だと思います。

7 tn2313による高い電圧の出力によってホスト機器を傷めるのではないかとの心配はありますが、Vbusに24時間連続ショートしても非可逆的なダメージが残らないとする規格(すんさん掲示板)にさらにマージンを考えると70〜100Ω経由の信号がホストに悪影響を及ぼすとは考えにくいと思います。D-だけをZDまたは青LEDでクリップして多くのコンピュータで実験していただけるとこの問題も一つは明らかになってくると思います。コンピュータやハブによって変わることですから個人ではとうてい調べられません。(実績のある2つのZDを付ければ問題がない、といわれればそれまでです)

8 ホスト機器に悪影響がなく、ライタとして正常に使えれば自分専用の道具として十分だとする意見は説得力があると思います。理論的な議論は必要でしょうが、その結論を待っていたのでは今使うことができません。

                                (工事中です)




AVRminiProgライタ 2007.11.24   2007.12.04追記  2008.09.15追記
 senshuさんの薦めで作ることになりました。mega8(原典はmega168)一つでUSBから使えることとATMELのAVRISP mkUとしてAVRstudioで直接書き込めるのが特長です。
USBライタはすでにあるのですが、このページのライタの内、AN910を除いてAVRstudioで使えるものがありませんでした。AVRstudioも勉強してみようかな、との気持ちもあって作りましたが、何しろわからないことばかりです。senshuさんの手取り足取りのお教えで完成に漕ぎつけました。(多謝!)

原典はこちらです。mega168を使って、ブートローダを持っていてファームウエアの変更はライタなしでできる特長を持っています。また、JTAG機能を持つようですが私が知らないためととりあえずAVRstudioで使えるISPライタが欲しかったのでISP機能に絞って、かつ、過去に無くても動いた部品は極力省略しています(原作者に叱られそう)。

最終的にできたものは次の通りです。

電源回路の赤色LEDは電圧降下によってVccが3Vに近くなるように付けていますが、同時に電源パイロットランプにもなっています。このため、実測値は3.22V程で動いていることとなります。(私のコンピュータは5Vでも動くのでその効果はわかっていません。)
ライタのインターフェイス抵抗は出力側は100Ω程度にして入力側は1kΩくらいの方がいいと思うのですが、ここは原典のままです。82Ωは手持ちの関係です。47でも動いたと思います。


最近楽しんでいる両面基板です。紙上で考えることもなく、適当に穴を開けてカッターで刻むわけですから、無駄な穴が空いたり、あとで場所が足りなくなったりとさんざんな状態ですがとりあえずこんな形だと見てください。写真に撮ると空中配線も見えなくなっています。
実験状態ではあとの変更もありますからファームを書き込むコネクタは別にしました。高さを押さえたいことからICソケットを切って使っています。上部にあるのはそのためのアダプタです。(適当に気に入っています) 表面左のピンヘッダは自分流のUSBコネクタです。USB関係の実験をいくつかするようになりましたが、1本のコードで使い回しができ、嵩が低いのでこれに落ち着いています。B型コネクタを使うのが本当でしょうが、遊びの世界に入っています。 ハードは例によって電源回路とプログラム書き込み回路ができるとPCに繋いでmcuの読み書きテストをしています。 ハードの制作では特に困ることはありません。mega8がTQFPになったのは単なる手持ちの関係です。

ソフトが大変でした。ダウンロードした中にファームのhexファイルがあるのですが、これはmega168用であると同時にクロックが16MHzでコンパイルされているとのsenshuさんのお話しです。単純なC言語なら修正もわかるのですが、ダウンロードのファイル群には、どこでどうなっているのか整理さえできません。senshuさんに助けを求めたところ、カレントをデフォルトディレクトリに移して、makefileのmcuとFCPUを変更後にmakeでできると聞き、その通りにコンパイルが順調に進みhexファイルができました。なお、基本構造がわかるまではブートローダは無視した方が良いと教えていただきました。最新版のファーム(2007-11-20)ではこのように簡単に修正が可能です。

修正ファームを書き込み、PC(WinXP)に繋ぎましたが、ドライバが無いので使えないと返ってきます。途方に暮れてsenshuさんに掲示板でお願いして、よくよく掲示板を見るとすでにAVRstudioに含まれると回答されているのを発見しました(遅い!)。自分のバージョンを調べると4.12です。最新版をDLすると4.13です。AVRstudioを入れ替えてつなぎましたら、簡単に認識され登録されました。掲示板にすでに丁寧な返事をいただいていました。(申し訳ない)

AVRstudioの書き込みテストへ進みます。過去にちらほらと眺めたことがありましたが、このソフトはわからないことばかりの状態です。
まず立ち上げて、new project を選びます。
なれているAVRgccを選んで、
project name を test として次へ進みます。
avr simulator と mega48を選んで(私のテストボードは48です)finishとします。
エディタが現れますので、ソースファイルに次のテストプログラムを書きました。
#include <avr/io.h>
int main(void)
{
  DDRD=0xff;
  PORTD=0xaa;
  while(1){};
}
buildメニューでbuildします。予定通りエラーが無く(当たり前か)コンパイルが終了しました。デスクトップにフォルダとhexファイルができています。
ライタを設定するために、Conと書かれた黒いアイコン(下の行です)をクリックすると候補が出ますので AVRISP mkU を選びます(右にUSBと出ます)。
隣の黒いAVRアイコンをクリックすると(しなくても自動的に出てくる?)書き込み窓が現れます。deviceを選択して、hexファイルを正しく指定します。続けて、programボタンを押すと書き込めました。 Dポートに接続したLEDが一つおきに点灯したときは、やはり感激ですね。

と、今日はここまでです。

(2007.11.25追記)状況を示すLEDがある方がよいとのことから2個のLEDを追加しました。また、ターゲットの電圧測定機能を持っていることから、出力コネクタの2番ピンのターゲットVccを分圧してPC0に繋ぎました。この状態で実行しますとターゲットの電圧が3.6倍ほどの値で表示され、エラーと判断されるのか余分なメッセージが出るとともに先に進めなくなります。分圧抵抗を変えて程々の値が出るようにしますと異常なく動作します。適当な抵抗の組み合わせでおよその電圧が出るようにしました。私としてはターゲットの電圧は承知で使いますから機能の必要性は感じていません。
ターゲットの電源電圧は5Vか3.3Vなのですが、3.3Vのときはライタの電圧と同じですから問題はありません。5Vのときはライタの出力が3.3V弱で、ターゲットの必要入力電圧はVcc×0.6=3.0Vとなりますからかろうじてドライブできるのではないかと思います(端子に他の負荷がかかっているときは問題です)。また、MISO入力がVccより高い5Vとなりますので、保護ダイオードを経由して入力端子からVccに電流が流れると思いますが、470Ωが入っていますので保護ダイオードが3〜4mAに耐えてくれれば電圧降下で回避できるかと思います。(素人の考えで間違っているかもしれません)
現在は少ないサンプルですが5V、3.3Vともに書き込みができていますのでこのまま使ってみようかと思います。いつもアマチュア規格ですから大事なところには出せません。

(2007.12.04追記) どこが変わったのか不明ですが、ターゲット電圧が5Vのときにプログラム読み取りエラーが出るようになりました。ライタの電源が3.2Vくらいであることが不調和の原因かと思います。そこで、ライタの電源をターゲットから取ることにしました。
これでターゲット−ライタ間のVccと信号レベルは一致しますが、5VのときにD+,D-の電圧が高くなりすぎるのでリミターのツェナーダイオードを追加しました。本来は3.6Vなのですが手持ちの3Vで代用しています。調子が悪くなれば交換することにします。
同時にターゲットVcc測定回路を変更しました。オリジナルの電圧測定基準電圧はVccだったので、Vccが変わっても変化が見えません。senshuさんに教えていただいたとおりに app_cfg.h の20行目の "ADC_VREF_AVCC" を "ADC_VREF_BANDGAP" に書き換えます(もちろんコンパイルします)。これに関係してハードウエアはAREF端子を無接続(ノイズ対策のCを入れるのが本当でしょうが)として、分圧抵抗を10kと1.5kにしました。AVRstudioで 5.1V, 3.4V とやや高めに出ますが辛抱することにしました(VRで調整すると楽でしょうか)。

(2008.08.08追記) ライタを制作中の方からメールをいただきました。『mega8で作りたいが、現在アップされているファームはmega16用で、makefileを変更してもコンパイルできない。』と言うことです。私が作ったときはその変更だけでmega8が動きました。手元の保存ファイルを調べてみると、20071124 と 20071204、20071222 がありました。このうち、20071124版だけが上記の変更でmega8用として使えることがわかりました。2007年版はmcuがmega168ですから詳細に調べれば他のものも使えるのでしょうが、20071124版で使えていますからそれ以上は追求しないことにしました。自分用の保存版でも『app_cfg.h の20行目の "ADC_VREF_AVCC" を "ADC_VREF_BANDGAP" に書き換えてありました。
この前の追記から8ヶ月間、まったくと言っていいほど使っていませんのですべてを忘れ去っています。保存ファイルのどれが正しいのかさえ簡単にはわかりません。メールをいただいてから格闘していました。
後々のためにメモをしておきます。オリジナルの20071124版は手元にありませんが、解凍して『"ADC_VREF_BANDGAP" に書き換えたもの』で、makefileはmega168、16MHzのままのものを確認して保存することにしました。変更の上で(実際使用できる)hexファイルを付けたものを圧縮してAVRminiProg20071124.zip名で保存しています。私流に変更した回路でこのhexファイルを書き込むと動作します。
あらためてコンパイルするならば、解凍したAVRminiProg20071124フォルダのdefaultフォルダにDOSプロンプトのカレントを変更してmakeを実行すると多くのファイルとともにhexファイルが生成されます。
このライタは多くの使い方があるようですが、私には難解なとことが多く詳しい追求はできません。AVR Studio で使えることに意義を感じています。
AVR Studio を使わなければ他のライタをお薦めしたいところです。なお、20071124版はアップできませんが、必要がありましたらメールをください。

(2008.09.15追記) kawanaさんから現バージョンの AVRminiProg RC2 (2008-03-10) から mega88(8,168)使用のISP用プログラマについての研究報告をいただきました。
AVRminiProg( AVRISPmkU)の製作

特徴:  AVRISPmkUは、AVR Studio4 から読み書きできるProgrammerです。USB接続です。
出典:  SimonQian     http://www.simonqian.com/en/AVRminiProg/index.html
AVR:    ATmega168, Atmega88, Atmega8  (いずれでも制作できます)

ハードウエア:
回路図は、kuman さんのWEB参照してください。
           http://www.geocities.jp/kuman2600/n6programmer.html#12
Simonさんの回路で製作される方は、Kumanさんの回路図を参考にしてに書き直して使用ください。

回路図の主な変更点は、
         kumanさん回路図               Simonさん回路図
D−          PD4                            PB0
D+          PD2                            PB1 と PD2 の両方に
LED-R        PD1                            PC0               (USB status)
LED-G        PD3                            PC1               (target connection)
AD_TGD       PC0                            PC3               Target Vcc check
  ( VCCを10kと1.5kで分圧し、分圧電圧をPC0 or PC3のADCの入力電圧とする。)

ソフトウエア:  
SimonQian webから  ファームウエア  AVRminiProg RC2 (2008-03-10)をダウンロ−ドします。
ダウンロ−ドした  ファイルを解凍し、AVRminiprogデレクトリ毎  C:\ にコピーします。
ここで、コンパイルする前にソフトウエアの修正をします。
                     Kumanさん回路図を使うとき   Simonさん回路図を使うとき
App_cfg.hでは
277:   USB_CFG_IOPORTNAME         D                         D
281:   USB_CFG_DMINUS_BIT         4                         4
285:   USB_CFG_DPLUS_BIT          2                         2

App_cfg_USBasp.hでは
131:   USB_CFG_IOPORTNAME         D                          B
135:   USB_CFG_DMINUS_BIT         4                          0
139:   USB_CFG_DPLUS_BIT          2                          1

修正が終わったら次の手順でコンパイルします。
DOSプロンプトを起動します。
カレントディレクトリを 解凍したAVRminiProgの"default"に変更します。
makeを実行すると、"default"内に AVRminiProg.hex ができます。

**************************************************************************
      ATmega88を使用し、Simonさんの回路図で製作する場合のStep
ハ−ドウエア
1.Simonさんの回路図で製作します。

ソフトウエア
1.RC2 ファイルをダウンロ−ドし、解凍しますが、コンパイル制御のmakefileが
  ATmega16用になっていますので、これを、ATmega88に変更します。

	(makeファイルの内容)
	###############################################################################
	# Makefile for the project AVRminiProg
	###############################################################################

	## General Flags
	PROJECT = AVRminiProg
	MCU = atmega16 ---> MCU = atmega88

2.カレントデレクトリを"default"に移し、make  Enterキ− で、コンパイルします。
3.avrminiprog.hexが "default"デレクトリに出来ていますので、ライタ−を使用して、
  ATmega88に、avrminiprog.hexを書き込みます。

**** kawanaさんから追加連絡がありました。********************************************
kumanさん回路図で RC2 ソ−ス使用の時、
RST信号の接続先を PD7 → 14番 PB2 へ変更が必要です。


(2008.09.15追記) 上記のkawanaさんの報告とは別に原典をを読んでみました。
AVRminiProgは AVR studio で使えるので関心を持たれますが、現在のファーム AVRminiProg RC2 (2008-03-10) はmega16仕様です。
フルセットは仰々しいのですが、USBasp のハードウエアコンパチでISPができる方法が用意されています。そこでmega8を使ったUSBasp回路で AVRminiProg の追試をしました。
下記のとおりですが、mega8をmega88やmega168で置き換えるだけで88、168が使えると思います。

@makefileを変更します。
 MCUをatmega16からatmega8に変えます。
Aapp_cfg.hを変更します。
 7行目の #include "app_cfg_Full.h" をコメントアウトして、
 8行目の #include "app_cfg_USBasp.h"を有効にします。
Bコマンドプロンプトを起動して、
 "default"ディレクトリにカレントを移し、
 makeコマンドを実行しますと、
 "default"ディレクトリに AVRminiProg.hex が生成されます。





COMポート接続ISPライタ
自作派の極めて多くの人がこのライタでスタートしているのではないかと思うChanさんの有名なライタです。WinXPで使えるようになってからは長い間常用していました。 原典は「COMポート制御ISPアダプタの製作」です。
COMポートがあって、これからAVRを使ってみたいという人には最適のライタだと思います。
次に回路図を転載しておきます。制作されるならオリジナルをご覧ください。


掲示板で質問があったことと制作記事のリクエストがありましたので、別項に「ChaNさんのISPライタの作り方」を書きました。そちらを参照 してください。

写真の上は、「作り方」の作品でわかりやすく大きく作ってあります。写真の下は、私が愛用していたもので、トグルスイッチだけでなく、手作りの板バネスイッチを 追加して作業を楽にしています。

書き込みソフトはChanさんのavrsp.exeを使います。DOS窓にD&Dで使える上にデバイスが自動判別ですから申し分ありません。 大切な注意事項があります。Win2k/XPはCOMポート出力を制限しています。giveio.sysがないと動きません。giveio.sysを必ずインストールしてください。

次にいくつかあった質問から、注意点をまとめておきます。
 うまく働かないときのチェックポイント          050702 
@74HC126を使っていますか。HC126のときは13番ピンをVccにつなぎます。 125ならGNDにつなぎます。 126がお勧めです。
A74HC126のVcc(14番)とGND(7番)は電源と回路のGNDに接続していますか。 
B同じ事ですが、126(125)はターゲットから5Vをもらっています。コネクタをとおして5Vが供給されていることをテスタで確
 認します。
CD-SUB9ピンの半田付けは間違いありませんか。回路図の配置でなく、コネクタの刻印を確認してください。 (ルーペが必
 要?)
D「書き込み読み出し」と「テストラン」のモード切替にスイッチ操作が必要です(後発のUSBブリッジではOFFのままでよい
 のですが)。 126の時はONで書き込み、OFFでテストランです。125ではON,OFFが逆になります。
Eテスト用のターゲットはできるだけ簡単なもの(できれば動作確認済みのもの)を用意してください。
Fターゲットのクロックは確実に発振していますか。確認は困難ですが、古い90Sシリーズはクリスタル(セラロック)が無い
 と発振しません、mega、tinyシリーズは内蔵のRCで発振可能です。新旧ともに使うときは忘れていることがあります。
GMISOとMOSIの配線をもう一度確認してください。
HターゲットのRESET端子をVccに直結していませんか。15〜47kΩくらいでプルアップしてください。(または内部プルアップ
 に任せます=つながない)
Iavrsp.exeのデフォルトポートはCOM1です。もし、COM2につながっているなら -pc2 でポートを指定しなければなりません。

AVRに書き込める環境があれば、次の COMポートSPI Bridge ライタ が@切替えスイッチが不要、Agiveio.sysが要らない、ためずっと快適です。




COMポートSPI Bridge ライタ
 COMポートを使う人に最も勧めたいライタです。AVRライタはCOMポート制御ISPアダプタを使ってきましたが、書き込み時にスイッチを入れる(押す)必要があります。 その後発表された COMポートから制御するシリアル−SPIブリッジは書き込み信号が自動化されていますのでスイッチを操作する必要がありません。 USB-SPIブリッジをテストしたときに快適だったのでシリアル版を作りました。もちろんChanさんの作品です。 (汎用SPIブリッジの製作

回路図
RS232-TTLの変換は略式で74HC04インバータを使っています。マイナスの電圧はどうなるのだろうと思いますが、GNDから入力端子へ向かうダイオードと外付け100kΩで処理 できているのでしょうか。以前のライタにも付けていたので、PCに接続すると赤いLEDが、またターゲットからVccをもらうと緑のLEDが点灯して接続の確認ができるようにし ています。モード切替スイッチは付けていますが、通常の書き込みには必要ありません。うまく働かないので悩みましたが、掲示板でお願いしましたら教えていただけました。 ポートの指定を -pc1 でなく、-pb1 にする必要があったのです。マニュアルのavrx32.txtに明記されていました。 書き込みソフトはもちろん avrsp.exe です。小さく作りました(基板サイズ32×53)ので、これから常用する予定です。

9.216MHz版−−−動いたことに気をよくして、akibowさんが 9.216MHz のセラミックレゾネータで作って居られたのを思い出しました。これで動くのなら、入手しに くく価格の高い水晶(digi-keyで\79、高くないか でも運賃が)でなく秋月の9.22MHzセラロック\40が使えます。2つのコンデンサを抱かさなくてもいいのもうれしいこと です。上のものとほぼ同じ基板に組み立てました。
回路図は上のものと、水晶をセラロックに代えたこと、モードスイッチを省略したこと、LEDが抵抗付きの赤色に変わったこと以外はすべて同じです。ファームウエアは akibowさんの ser2spi.hex(9.216MHz用) を頂戴いたしました。(感謝)
結果は機嫌良く動いてくれています。
この分ではChaNさんが公開してくれている 4MHz、6MHz、8MHz、10MHz も同様に作動するのではないでしょうか。これでokなら一般的なセラミックレゾネータでライタが 作製できることになります。(05.12.21)

(06.01.05追記)4MHzの水晶とセラロック、8MHzのセラロックを実験してみましたが誤差0のボーレイトを選んでも成功しませんでした。(残念)

(06.05.03追記)ChanさんのBBSレポートを思い出して、8MHzと4MHzに再度挑戦してみました。ファームウエア ser2spi.asm のクロックを変えて、ボーレートを8MHzで 38400 にしてみました。このときの誤差は0.2%です。水晶がないのでセラロックで試したところ、デバイス情報の読みとりとプログラムの読み出しはできるようですが書き 込みではベリファイエラーになり、残念ながら使えませんでした。セラロックは手持ちの数個を試しましたが結果は同じでした。4MHzのセラロックでは、ボーレート 19200 に設定しましたが、こちらは正常に使えるようです。ただ、115200 に比べると速度が遅くなりますので無理してまで使うことはないと思います。3.6864の水晶や9.22のセラ ロックが手にはいるまでの間に合わせには使えるようです。
なお、オプション -pb1:19200 を付けて実行しています。

私事ですが、PCにはUSBが2口で、一つはプリンタに、もう一つはデジカメケーブルにつないでいることが多いのです。COMポートは他に使うことがありませんので、 ライタはCOMポートを常用しています。COMポート使用ではこのライタがもっとも快適です。お勧めライタです。

(2007.12.24) 高速書き込み/PIC24兼用に変更
 tiny2313と9.22MHzセラロックを使っていますからChaNさんの 2007.12変更を#173ライタと同様に変更できます。実際にはソースを9.22MHz、115200bpsに変更してアセンブルしたものを書き込むだけです。これでファームがR0.4になりますから、avrsp.exeのR0.43bを使えば高速、かつ、PIC24使用可(アダプタ必要)となります。



COMポートSPI Bridge ライタ2 swNakさんのライタ基板  2007.08.02
(2007.12.21 ChaNさんがオリジナルを改良されたので、素晴らしいライタになりました。下記の追加を見てください。)  senshuさんの発案を受けてws☆Nakさんが発売されたAVRライタ基板 #173 を組み立てました。これは、ChaNさんのCOMポートSPI Bridge ライタを作者の許可を得て、多くの人が配線等の間違いなく確実なライタを作ることを目的に、部分的な改良を加えて考案されてものです。 ユニバーサル基板の配線では、技術によって誤配線を含めて信頼性が低くなりますが、プリント基板を作ることで作成時間の短縮と信頼性の向上が図られています。

基板サイズは50*25mmと小さくまとめられています。プリント基板だけの製品ですから、その他の部品は別に用意します。tiny2313を使うように作られていますが、手持ちの関係で使用可能な90S2313としました。以下に制作メモを書きます(自分が忘れても良いように?)。


作るときに注意した点は、
@赤色LEDのA-Kが逆に印刷されているので反対向きに実装する
A74HC04はソケットを使用しない(ソケットが他の部品と干渉する)
BIC及びICソケットはあとでも半田付けできるが、RとCは狭いところで取り付けにくいので先に付けておく
Cすべての部品が納まるかどうか常に差し込んでチェックしながら進める
などです。
その上で自分流に、0.1μFは手持ちのチップタイプを、120Ωも同じくチップ抵抗を使うことにします。さらに、背を低くするためにピンヘッダはピンをばらして 直づけします(アマチュアの勝手w)。LEDはまぶしいのがいやなので上部をヤスリで削ったり、表面をヤスリで荒らしたりして散光型に近づけます。
ISPのピンヘッダは2列*3のAtmel型だけ実装しています。

ファームウエアはwsNakさんのところにはありません。senshuさんのページにソースがありますが、アセンブルは苦手なので(AVRstudioが使えないので)、探しているとS2313用のhexファイルがアップされていましたので利用させていただきました。
実験の途中で、2.7kで5Vにプルアップされたときに読めないことがあったために、「徒然」でドライブが弱いように書きましたが、再度の実験では読み取りができています。(2007.09.15 R12を1kから120Ωに変更しました。ドライブが強くなりました。)

一息入れて、tiny2313にも取り組みました。
1 senshuさんのページから firm173.zip をダウンロードします。WNS173のファームウェアはどこで入手できますか?の項目中の firm173.zipをダウンロードします。
2 解凍してsrcフォルダを適当な場所に置きます(デスクトップで可)。
3 AVRstudioを起動して、new projectを選び、
4 Atmel AVR Assembler を選び、
5 project nameは仮に173とします。
6 initial file には ser2spiを指定します。
7 フォルダは先に置いたsrcとします。
8 deviceにtiny2313を指定します。
9 finishボタンでAVRstudio画面となり、ソースファイルが展開されます。
10 buldのbuildを実行するとアセンブルされて、srcフォルダにhexファイルができます。
(追記)AVRstudioに含まれているavrasm32.exeを使うともっと簡単にアセンブルできます。
DOS窓に avrasm32.exe をD&Dして、xx.asm ファイルをD&Dして、intelhex指定の -fI オプションを書けば終わりです。
  #avrasm32.exe xx.asm -fI
これで.asmのあるフォルダに同名の.hexファイルができます。
このとき avrasm32.exe は単独で(他のファイルと関係なく)良いようです。自由な場所にコピーしたものが使えます。

他のライタを使って、このライタに書き込みます。書き込み時と実行時ではジャンパピンの位置が違うので注意します。(私はこれに慣れていないのでよく失敗します)
なお、私のライタはすべてターゲットから電源をもらうので、このライタに書き込むときはVccを別に供給する必要があります。そのために電源端子を仮付けしています。
fuseの設定が必要です。avrspを使うなら、avrsp -d40 -fL11011101 -fH11011101 で9.22セラロック対応に変更します。<忘れないように>
Tiny2313の場合も正常に動作しました。

この回路は、ISPピンをファーム書き込み時も使えるようにしている関係で、ChaNさんのオリジナルとは使用IOピンが違います。したがってオリジナルのファームとは 互換性がありません。
ファームの90SとTinyの切り替えはソースの一部を0か1かを書き換えてアセンブルすれば良いようです。同梱のREADME.TXTに詳しく書かれています。
アセンブラを使えない私には、両方のhexファイルを用意していただいた方が助かります。上のstudioの記述は試行錯誤でそうなった、というだけです。

半田付けが確実な、かつ、誤配線のない基板として、さらに\300で、コンパクトで、とお勧めだと思います。これで仲間が増えてくれると嬉しいのですが。


(2007.12.21 追記) 高速書き込み、PIC24兼用に変身
9月にChaNさんがUSB接続のSPIブリッジライタを制作されましたが、もともと汎用SPIですからAVRライタに限らず汎用の通信機能を持っていたようです。この機能を使われたのでしょうか12月にPIC24のライタとして使えるアダプタと書き込みソフトを開発されました。
その後、紆余曲折がありましたが、結果的に#173ライタが書き込み用のケーブルのmisoとmosiを入れ替えるだけでハードウエアの変更なく、ChaNさんのファームウエアとソフトウエアがほとんどそのまま使えることになり、高速かつPIC24兼用の素晴らしいライタに変身しました。このライタはsenshuさんがファームの書き換えを簡単にする工夫を有効に保ったまま使えるのでとても便利なライタになっています。

ここに高速化のプロセスをまとめてみます。

ハードウエアについて:
@ mcuにはtiny2313を使います。tiny2313の持つUSI通信機能を利用しますから、この機能を持たない90S2313は使えません。
A 書き込みケーブルのmiso線とmosi線を入れ替えます。これはsenshuさんがファーム書き込み時に同じケーブルを使えるように変更していたのですが、USIを使うために戻します。(ファーム書き換え時はピンコネクタがそのまま使えるsenshuさんの工夫は生かされています)

ファームウエアについて:
@ この時点で最新のものを使います。ChaNさんのページから「汎用SPIブリッジ Rev.4 資料」をダウンロードします。解凍するとser2spi_r4.hexがありますが、これは10MHz、かつ、 312500bps用ですから使うことができません。#173は9.22MHzです。
A 同梱の ser2spi_r4.asm を編集して再アセンブルします。
 ・まず、.equ SYSCLK = 10000000 の行を探し出して、10000000を9220000に変更します。
 ・次に、.equ BPS = 312500 の312500を115200に変更します。
 ・1msの長さが 10/9.22 倍になることについてはsenshuさんが「大きな影響はない」と判断されているところです。
 ・再アセンブルはAVRstudioに含まれるavrasm32.exeをコマンドプロンプトで使うのが簡単です。
 ・コマンドプロンプトを開き、avrasm32.exeと編集済みのser2spi_r4.asmをドラッグ&ドロップして、-fI を付けます。
 ・#avrasm32.exe ser2spi_r4.asm -fI
 ・-fIはインテルhexファイル出力指示です。asmファイルのあるフォルダにhexファイルができてきます。
 ・名前が同じですから10MHzのものと間違わないようにします。
 ・ファームを書き込みます(もちろん他のライタで)。

書き込みソフトについて:
 上記のページから、「Win32版ライタ制御ツール for Windows9X/Me/NT/2k/XP」 (2007.12.18 R0.43b 以降)をDLします。
 解凍して得られる avrsp.exe を使います。(avrsp.iniファイルに -pb1 を指定しておくと便利です。)

 (このままで、書き込みソフトをpic24sp.exeに変えるとpic24に書けます。)
 *以上はChaNさんとsenshuさんの文を繋いだだけですが、簡潔な文章を目指すためにこのような表現になりました。ご容赦ください。また、誤りがあればご連絡をお願いします。




USB-SPI Bridge ライタ
cp2102を入手しましたので、ChaNさんの USB-SPI bridge(AVRライタ制作集 汎用SPIブリッジの制作) を作りました。届いたICが想像以上に小さいので「できるかな?」と不安はあったのですがチャレンジしました。結果はgoodです。
後にavrspがR0.35a に更新され一層速くなりました。大きなプログラムは書いていませんが、ライタの時間待ちを感じることはありません。極めて快適です。COMポートの ないコンピュータには朗報でしょう。リクエストに応えられてハードウエアとF/W・avrsp.exeのソフトウエアを作られたChaNさんに感謝します。
いつもの事ですが、手持ちにない部品は省略したり、変更したりしますので、オリジナルの回路とは少し変わっています。回路図を引用するのは適切でないかもしれませんが 、変更点が多すぎますので参考までに実験に使った回路をここに置きます。制作されるときは必ずオリジナルを見てください。

写真は2台目のもので、水晶を9.216MHzのセラロックに代えてみたものです。書き込みスイッチも省略しています。cp 2102の電源はUSBバスから、Tiny2313の電源は ターゲットから取りますが、それぞれの接続がわかるように赤色チップ発光ダイオードを付けました。また、信号回路のダイオードは東芝の1SS319(ショットキダイ オード)に変わっています。

2313は別の実験でTinyでも置き換えることができることを確認しましたので、Tinyにしました。DIPではありませんから、F/W書き込み用のISPピンを用意しました。 CP2102をUSBにつなぐと(WinXPで)新しいデバイスのドライバをインストールする画面が出ますが、適当なドライバがなく、インストールに失敗した旨の表示となりました。 ドライバはどうなっているのかデータシートを見ると「キットに付属」の記述しか発見できず、トラ技2005年1月号の記事にも「キットにある」としか書かれていません。 途方に暮れて、何度かUSBに挿したり抜いたりしていると「使用できるようになりました」と変わりました。理由はわかりません。とにかく認識されました。
後で(06.05.17)わかったことですが 最新のwindows(XP)にドライバがあるようです。アップデートしてあれば素直にインストールするようです。下記のドライバが使われ ています。



あとはターゲットにつないで、avrsp.exe を実行するだけです。私の場合は、2313の電源はターゲットから取っています。 avrsp.exe で -pb4 のオプションでターゲット プログラムのread/writeができました。高速で、自作できて、USBで使えて、殆どのデバイスに対応している素晴らしいライタです。千数百円で制作できるでしょう。

常用するときは avrsp.ini ファイルに -pbn (nはポート番号)と書いて、pathが通っているところ、例えばC:\WINDOWS\system32フォルダに置くとよいでしょう。 私は、c:\にフォルダaを置き、この中に avrsp.exe, fuse.txt, avrsp.iniを置いて、aのショートカットをデスクトップに置いています。aのショートカットをクリックすると 画面端に小さくaフォルダのファイルが表示されるようにします。ここからavrspをDOS窓にD&Dしています。fuse.txtがあるのでfuseの詳細も見えます。avrsp.iniを読んで くれるのでデフォルトの変更ができます。また、ここにあるからiniファイルの変更も簡単です。ただし、system32と重複するとsystem32にあるiniが優先されます。

avrsp.iniファイルの設定:ファイルの設定については英文で書かれていますが、覚え書きを記しておきます。
@コマンドはファイルの第一行目先頭から書きます。-pb4 -d5 を指定するなら、1行目先頭から-pb4(改行) 2行目先頭から-d5(改行) 3行目(空白行)とします。
Aこのファイルに書いてあっても、コマンドラインに同じコマンドがあれば、コマンドラインに書いたものが優先されます。
Bコマンドは空白行またはEOFで終わります。コメントがあれば空白行の次の行から書き始めるとよいでしょう。

3.3Vの電源を作りましたので、テストしました。このライタに使ったTiny2313は10MHzまでならVcc2.7Vが保証されていますから当然ですが正常に書き込みができました。 90S2313-10 でも3.3Vで動くという報告がありますが4V規格ですから保証外動作と言うことになるのでしょう。

(2007.12.24) 高速書き込み/PIC24兼用に変更
 tiny2313と9.22MHzセラロックを使っていますからChaNさんの 2007.12変更を#173ライタと同様に変更できます。実際にはソースを9.22MHz、115200bpsに変更してアセンブルしたものを書き込むだけです。これでファームがR0.4になりますから、avrsp.exeのR0.43bを使えば高速、かつ、PIC24使用可(アダプタ必要)となります。



USBasp ライタ --mega8一つのライタ-- (最後の追記を読んでください)
USB専用のICを使わず、Atmega8一つでUSBのデコードとAVRの読み書きをする回路が公表されています。USBasp といいます。
特別な部品を使っていなくて、部品の数が少ないので作ってみることにしました。簡単に作ることができ、なかなか高速に書き込めます。
オリジナルはソフトウエアもすべて用意されていて1回のDLですべてokです。まずWebページへ行ってファイルusbasp. 2005-11-14.tar.gz (175 kB) をダウンロードします。圧縮ファイルですから、解凍して適当な場所に置きます。

オリジナルはavrdudeで書き込みをするのですが、kkkさんが2006年5月に素晴らしいプログラムを開発してくれました。
 Chanさんのavrspを拡張して、USBaspに対応できるようにしてくれたのです。Chanさんのライタが同時に使えるだけ
でなく、USBaspの細やかなコントロールがすべてソフトウエアでできるようにしてくれています。安価に制作できて、
性能がよい、申し分のないライタに変身しました。kkkさんに感謝!



回路図は原文がやや見にくいこととコネクタが10ピン(ここでは6ピン)なので、書き換えてあります。上の写真では2つのLEDはつけていません。
原文にあるように、このライタは5V専用です。これまでのライタでは書き込みをコントロールしているAVRの電源はターゲットから供給される形でしたが、USBでかつ AVRの入力がUSBそのものですからバスパワーで使う事にしています。したがってターゲットとVccはつながっていません。発振子は水晶を使うべきでしょう。 セラミックレゾネータでは安定が悪いと思います。以前にIgorUSBを作りましたがセラミックレゾネータでは殆ど通信できませんでした。2台目を作りましたので、ファーム ウエアを書き込むピンはリードを付けて書き込み時だけ半田付けしました。ファームの書き換えはあまりないと思いますので必要なときはまた半田付けします。
TQFPの半田付けはなかなかうまくなりませんが、CP2102の0.5mmピッチの後ではかなり楽な感じです。この頃はブリッジになることもずいぶん少なくなりました。 USBのB コネクタをつけずに100円コードを切って使うときは緑色がD+で、白色がD-です。

配線が終われば、目視点検をします。間違いがないと思えば、Vcc-GND間が短絡していないことをテスタで確認して、5V電源をつなぎすでにあるライタを使ってファーム ウエアを書き込みます。オリジナルよりも次のURLにあるkkkさんのファーム\avrspx_b9_3\usbaspx113 20060522\bin\usbaspx113_m8.hex を書き込みます。
kkkさんの素晴らしい業績は AVRWikiのSandBoxに avrspのUSBasp対応(beta-9_5) 2006-05-28 として公表されています。ダウンロードして解凍します。 (2008.07.14追記 最新版はkkkさんの作をsenshuさんが改良されています。avrspx-080120.zipを使います。
   (06.07.23) ファームウエアの書き込みが終わりましたら、12MHz水晶に合わせてヒューズを書き換えます。
   mega8では -fl11111111 -fh11001001、 mega48では -fl11100111 としています。が、
   avrspxのファームウエアのフォルダの「bin\usbaspx_fuse.txt」を参考にするとよいでしょう。

usbaspx113 20060522\win-driver\ フォルダの中にドライバがありますので、わかりやすいところにおきましょう。
オリジナルでは書き込み速度の変更をハードウエアのジャンパーでしますが、avrspxではジャンパー解放のままで、ソフトで変更できます。

ファームウエアを確認したら、USBにつなぎます。「新しいハードウエアが見つかりました」、「新しいハードウエアの検索ウィザードの開始」と 始まったでしょうか。もしそうならなかったら配線の不具合があります。心を静めて目視点検をしましょう。という私も翌日になって誤配線を発見することもあります。 「間違いがないと思っているところに間違いがある」つもりで頑張りましょう。さて、インストールウィザードが始まれば、ファイルの場所として解凍したファイルの ドライバフォルダを指定します。成功すれば、マイコンピュータのプロパティ→ハードウエア→デバイスマネージャを開けると(そして+をクリックすると)次の画面が出 るでしょう。


avrspx.exeには素晴らしい機能が含まれています。avrspx_b9.txt を読んで使いこなせるようになりましょう。

一部のノートパソコンで正常に使えないという報告もあります。kkkさんが現在調査を続けてくれていますが、もし、そのような事例に遭遇したら是非ご連絡をお願いし ます。
(06.06.02) 一部のノートパソコンで認識されないというトラブルについては、kkkさんと弘前大学小山先生の研究で解決したと連絡を受けました。USBの規格の3.3V でないと認識しないPCがあるようです。小山先生のホームページの報告をご覧ください。

なお、オリジナルではmega8専用でしたが、kkkさんがmega48、88、168にも対応できるようにファームを作ってくれています。
kkkさんのソフト情報については是非、AVR Wikiをご覧になってください。

※ハードウエアはその後少し変更して、Vccをバスパワーではなくターゲットから取るようにしました。これで、3.3Vでも使えると思うのですが、いかがでしょうか。書き込み 実験中にバスパワーラインをショートさせて、PCがリセットしたことがあります。バックアップしていなければデータがとびます。ターゲットから取る方が良いのではないかと 思います。

(07.06.17 追記)senshuさんとお話ししている内に、もう一度見直すことにしました。最後の記述から1年経っています。ついでに、両面の1mm厚の生基板を見つけ ましたので、カッターナイフとプラスティックカッターで表面の銅箔を削り取り、2次元ラグ板風にして表面実装で作ってみました。

水晶だけは、大きなものしかなかったので、裏面に付けています(以外に厚い)。それ以外は穴も開けていません。作る前のイメージではもう少しきれいなものだったのですが。 基板の大きさは25mm×40mmです。配線を0.32mmの太いものを使ってみたのですが失敗です。いつもの0.2mmの方が良かったみたいです。

回路はkkkさんのavrspxにあわせて最小限の仕様にしています。ファームウエア書き換え時ははんだごてが必要なほどです。

回路図が必要なければ、オリジナルのfischl.deさんのページへ行かなくても、 kkkさんのavrspx_b10_10.zipをダウンロードするとすべてが間に合います。この中に必要なデバイスドライバが2点含まれていますので、インストール時に これらのファイルを指定してください。ファームウエアも8,48,88,168のすべてが用意されていますから使用するものを選びます。
ここまで読んでいただいた方には、是非「avrsp のGUI 」で遊んでいただきたいと思います。よろしく!





USB-SPI Bridge ライタ2
FTDI232BMを使ったUSBライタです。
まえおき: Chanさんの書き込みソフト avrsp.exe はすばらしいプログラムです。特にこの1年の改良はすばらしく、Win2k/XPで使えるようになっただけではなく USBにも対応できるようになりました。多くの方の要望に応えられて、USB書き込みのソフトとハードを完成された氏には感謝の気持ちでいっぱいです。レガシーポートのない コンピュータが増える中で、最新のデバイスにも対応しているライタの制作例はなかったと思うのですが、これで安心してUSBを使えます。
オリジナルはCP2101を使われていますが、手持ちのFTDI232BMでもできないかと実験したところ成功しましたのでここに報告します。なお、 JUN猫さんがここよりも先に報告されてます


最初のものはUSB-シリアル変換に使っていた232BMの出力をChanさんのUSB-SPIブリッジの後半部につないだのですが、写真のものは作りかえて一つにまとめています。

FTDI232BMのデバイスドライバはhttp://www.ftdichip.com/Drivers/VCP.htmからダウンロードします。 もちろん、書き込みソフトavrspとファームウエアはChanさんのものです。『汎用SPIブリッジの製作』が本家 本元です。

デバイスドライバのプロパティで、Port Settings → Advanced Settings → latency timer をデフォルトの16msから1msに変更し、avrsp.exe を R0.35a に更新 すると極めて速くなりました。
最初に実験したときは、2313に4MHzのセラミックを使ったのですが、もちろん動きませんでした。ふぁじぃさんから、ボーレートの調整が必要なことを教わり、手持ちの水晶 で実験しましたがうまく働きませんでした。指示どおりの3.6864MHzの水晶を購入して、再度実験したところうまく動きました。このクロックではボーレイトの誤差が0%にな るので、それが原因なのでしょうか。他の水晶で2%以下の設定をしても成功しませんでした。(3.6864, 7.3728, 9.216ならokでしょう。)

おまけ:USBのコネクタにB型を使わず、コードを切って使っています。他の用途もあって、机上に延長コードを置いているのでA型の方が便利なのと、100円ストアで売って いるために手に入りやすいからです。

基板上に余裕がありましたので、4つのLEDを付けました。USBの電源、ターゲットからの電源、送信状態、受信状態を表示しています。送受信のLEDははじめて付けてみたの ですが、通信の時間が短いのであまり目立ちません。
UART用のコネクタもつけました。RTSとCTSは短絡して、TXDとRXDだけによる通信ができるようにしています。別項のTiny2313からPCのExcelにデータを送るときに使えました。  なお、2313のファームウエアは組み立て途中に臨時の半田付けをして書き込んでいます。変更が必要になればまた、半田します。

(06.06.03) 前半部と後半部を適当につなぎ合わせたら動きました−−といういいかげんなものですが、ターゲットのVccを3.3Vにしても読み書きができました。その後教えて いただいて、FT232BMのIO出力は 13番ピンのVccIOの電圧を5Vと3.3Vに切り換えることでIO電圧を5Vと3.3Vに変えられることを知りました。データシートにはそれぞれの 場合の回路図があげられています。ただ、それ以外の場所も考えなければならないようで、5、3.3の両用にするのはやや面倒な様です。
現在の回路図ではターゲットが3.3Vの時は、FT232BMのH出力はダイオードで止まり、2313の入力は47kのプルアップで与えられますから、3.3V電源の2313に無理はないと 思います。





AVR910 ライタ
atmelのアプリケーションノートAN910にあるライタです。ファームウエア書き込み済みのAVRが必要という「にわとりーたまご」のライタです。
統合開発環境AVRstudioから書き込みができるのですが、ターゲットデバイスはファームウエアに書かれていて、これが新しいデバイスに対応していないために作っても 最近のAVRには使えません。改良している報告がWebにはありますが、atmelは変更の意志がないようです。改良ファームが手に入らないと作らない方がいいと思います。
 ターゲットシステムで動作状態にある(電源が入っている)マイクロコンピュータに、Windowsなどの コンピュータからシリアル端子(RS232C)を使って書き込むものです。 Atmel社ではこれをISP (In-System Programming)といっています。デバグのときICを取り出さないで済むのがうれしいです。  次の回路は、Atmel社のWebページapplication-noteに示されているものです。 これをまねて作りました。

 C100 1.0μFはタンタル指定となっています。(アルミ電解でも動きました) Q100, Q101 はそれぞれ 2SA1015, 2SC1815 を、ダイオードは 1S1885 を使いました。  また、発振子は4MHzのセラミックレゾネータを使いました。  ターゲットシステムへの接続はピンソケット(ターゲットではピンヘッダ いずれも2×3の6ピン)を使います。 2列の長いものを買って、切って使うのが安くなるようです。糸鋸に金属用をつけて切っています。余談ですが、金属用の糸鋸は重宝します。  回路図にはありませんが、3つのインジケータLEDを付けると便利です。一つは、DSUB9ピンソケットの3番、すなわちD100とR105の接合点に、 10kΩでプルダウンした LEDを付けます。コンピュータのシリアル出力に繋がっていることがわかります。 二つ目は、Vccに1kΩで繋ぎます。この書き込み機は電源をターゲットから取り込むので、Vccが生きていることがわかります。 三つ目は、90S1200の16番ピン(reset出力)に、1kΩでプルアップしたLEDを繋ぎます。ターゲットに書き込むとき、この出力がLOWになるので書き込み中であることがわか ります。(この写真は古いものです。当時、書き込みコネクタに8ピンICソケットと使っていました。)
ライタには、書込用のファームウエアをAT90S1200に書き込んだものを使います。このプログラムは http://www.amelek.gda.pl/avr/uisp/at90isp23.asm です。AVRstudioでアセンブルして書き込めば使えますが、上記の理由とChanさんのプログラムが極めて便利に なったので最近(2006)は全く使っていません。




FTDI232BM+AVR910 ライタ
Windowsが2000やXPになって、プリンタポートが自由に使えなくなりました。また、D-sub9ピンのシリアル端子が付いていないコンピュータが多くなって、USBでなければ 使えない場合があります。USBのライタが作れないものかとWebページを検索していましたら、いい報告に出会いました。Nagnagさんhttp://www.nagnag.jp/main.htmlの電子 工作のページの 「簡単USBデバイスの作成」です。簡単な回路で、USBからシリアル(RS232C)と同じ信号が得られそうです。なお具合の良いことに信号の論理が反転してい る上に TTLレベルになっているので、マイコンAVR に直接繋ぐことができそうです。この種のICは入手しにくいようですが、共立電子にありました(900円) ので試作しま した。 Nagnagさんの回路をapplication note910の90S1200に接続しただけです。Nagnagさんの回路の-RTSと-CTSを 短絡し、TXD端子を90S1200の PD0(RXD)に、RXD端子を 90S1200のPD1(TXD)に接続します。信号線はクロスしています。

FTDIのFT8U232BMは約7mm正方形のチップの四方に8本ずつ32本の足がついたものです。端子のピッチは0.8mmです。半田付けには一時ギブ アップしそうになりました。いろ いろ試した末、0.26mmのポリウレタン線UEWをあらかじめ半田付けしたものを基板に結合しました。 虫眼鏡で一本ごとにチェックしました。5,6回やり直してやっと成功 した線もあります。作ってみたかったからチャレンジしましたが、 アダプターを買った方が良いかもしれません。(最近−2006−では慣れました)



デバイスドライバはFTDI(http://www.ftdichip.com/FTWinDriver.htm)のCurrent Version = 1.00.2148 を使いました。 ターゲットへの書き込みはapplication note910 と全く同じ方法でokです。ポートはcom4になりましたが、AVRstudioが自動で設定してくれます。配線がかなり複雑になりますので、チェックは十分行ってください。私も苦 労しました。
後日、ファームウエアを変更して90S2313を使っています。TEMPLEさんのソフトで多くのデバイスに対応しています。

(05.07.19) しばらく使っていなかったので解体しました。ChaNさんのライタが便利なのと、TEMPLEさんのソフトでさえ最近のデバイスに対応できていないためです。 また、AVRstudioを使わなくなったのも一つの理由です。1年余り前は、ChaNさんのソフトがWIN2k/XPに対応していなかったことと、使っていたのが90S2313だけだったの で、このライタをAVR910改(TEMPLEさんのソフト)とともに使っていました。




LPTポート制御 ISPアダプタ
私が最初に作ったライタです。Chanさんの作品ですが、2003年の当時、私のPCはWinXPでした。XPでAVRを扱いたかったのですが、Chanさんの作品はそのころDOS対応で、 Win98で動いていたのです。XPで使うにはatmelのAN910によるライタが便利だったのですが、これは書き込み済みのAVRが必要で、かつ、私の周りにはAVRを扱う人が まったくいなかったため、何もなくても作れるこのライタを作りました。原点は ELMAVRライタ製作集 のLPTポート制御 ISPアダプタの制作 です。
ライタの写真とChanさんの回路図を転載します。制作されるときはオリジナルを見てください。

リードは無理を承知で長く作ったのですが、やはり正常に動作しなくて、長さを詰めてゆく内にこの長さになりました。コンピュータをWin98とXPのデュアルブートに してDOSモードで使いました。今はChanさんのプログラムはwin32で走りますからこうした苦労もなくなっています。





avrspx.exe の使い方

 Chanさんのライティングソフト avrsp は素晴らしいものです。GUIが主流といわれますがコマンドプロンプトを使うこのソフトはAVRデバイスを自動判別するために 指定する必要がなく、オプションが簡単なタイピングでできる上に、ドラッグ&ドロップが使えますから極めて快適です。同じコマンドラインを使ってもavrdudeとは 雲泥の違いです。速度も申し分ありません。
 このソフトをUSBaspにも使えるようにkkkさんが拡張してくれたavrspxですから、これ一つで上記お勧めの4つのライタが同じ手順で使えます。

AVR Wiki のSandBoxから avrspのUSBasp対応(beta-9_5) 2006-05-28 をダウンロードします。(もし、リンクがうまくつながらないときは ここから探してください。)--秒進分歩で改訂されていますので版は変わります。(2008.07.14追記 最新版はkkkさんの作をsenshuさんが改良されています。avrspx-080120.zipを使います。

解凍すると、たくさんのファイルが出てきます。直接必要なファイルをあげますと、
avrspx.exe 書き込みソフトそのものです。
avrspx.ini 設定ファイル。オプションを前もって書いておきます。
fuse.txt ヒューズビットの説明ファイル。avrspxと同じフォルダに置くと、ヒューズ読み出し時に説明が表示されます。
\usbaspx113 20060522\win-driver フォルダの中に3つのファイルがあります。インストールに必要です。
\usbaspx113 20060522\bin\usbaspx113_m8.hex USBasp本体のファームウエア。ライタ制作時のみ必要です。

USBaspライタでの使い方の例を示します。私が便利だと思う方法です。他のライタの変更点は後で書きます。
@書き込みソフトなどの格納フォルダの準備: たとえば c:\ にフォルダaxを作り、この中に
 avrspx.exe avrspx.ini fuse.txt win-driverフォルダ(ファイル3種) を置きます。
Aaxとコマンドプロンプトのショートカットをデスクトップに作ります。
Baxのショートカットから、画面右下に最小限の大きさでaxフォルダが現れるようにします。
Cavrspx.ini はとりあえずこのままにしておきます。「;」行はコメントで、オプションは -pu USBaspライタ -d4 書き込み速度4 です。

準備が完了したらライタとターゲットボードをつなぎます。
1.DOSプロンプトを起動して、フォルダaxから avrspx.exe をD&D(ドラッグアンドドロップ)します。
2. カーソルがDOS窓にあることを確認してenterキーを押します。オプションの書式とライタの種類が表示されます。
3.-rオプションを使ってみます。avrspxをD&Dして(またはF3キーを押して)、スペースを一つ空けて -r とします。デバイス
 名とデータが読みとれるでしょう。
4.同様に、-rf -rp など試してみます。fuse.txtが用意されていると解説が表示されます。
5.ターゲットへのプログラムの書き込みは avrspx.exe スペース の後に.hexファイルをD&Dします。書き込み終了ととも
 に実行されます。
6.プログラムの読みとりは -rpオプションです。もちろん >出力ファイルパスリスト でリダイレクトできます。
7.ヒューズの設定は -fl -fh -fx オプションです。私は2進数を使います。例 -fl11100010  resetを無効にしないよ
 うに! 16進数も使えます。
8.ターゲットのクロックが速いときは、ディレーオプション -d の数値を減らして速くすることができます。反対に遅いとき
 は数値を大きくします。 avrspx.iniの値を大きくするか、または、コマンドラインに -d2 の様に書きます。コマンドライン
 が優先です。

他のライタを使うときは、コントロールポートオプションを変えるだけです。
COMポート接続ISPライタの時: -pc1 (1はCOMポート番号。PCによって変わることがあります。)
COMポートSPI Bridge ライタの時: -pb1 (1はCOMポート番号。PCによって変わることがあります。)
USB-SPI Bridge ライタの時: -pbn (nはCOMポート番号。マイコンピュータのプロパティ→ ハードウエア→デバイス
 マネージャ→ポートで調べます。)
USB-SPI Bridge ライタ2の時: -pbn (nはCOMポート番号。マイコンピュータのプロパティ→ ハードウエア→デバイス
 マネージャ→ポートで調べます。)

オリジナルはあくまでもChaNさんのソフトavrsp.exeです。オリジナルをダウンロードして、 関係のファイルをお読みください。




avrdude の使い方
 オリジナルUSBaspは同梱のavrdudeを使うことになっています。その使用法を調べましたので、もう使わないのですが、ここに残します。
AVRasp付属のAVRdeduの使い方を確認するために、Tiny2313のBポートにLEDを接続し(Hで点灯)、10MHzのセラミックレゾネータを付けたものを用意しました。
AVRdude.exeとavrdude.confの2つのファイルはC:\USBaspフォルダに置いてあります。この前提でお読み下さい。

@プログラマとデバイスを指定して認識を確認します。コマンドプロンプトの黒い窓を用意して、AVRdude.exeをDDした後、次のようにタイプします。空白に注意を。
 C:\WINDOWS\system32>C:\USBasp\AVRdude.exe -c usbasp -p t2313
ここで -c オプションはプログラマの指定です。usbaspを常に指定します。 -p オプションはデバイスの指定で、t2313はTiny2313の略号です。(-p以下を書かないで 実行すると使用可能なデバイスと略号の一覧が表示されます。)
実行すると次の結果が得られました。

読みとられてsignatureが返されています。

Aヒューズバイトを読みとります。 このときはインタラクティブモードにするのがよいようです。 -t オプションで入ります。

新しいプロンプトに ? を入力すると、使えるオプションが表示されます(略)。
そのうちの lfuse hfuse efuse 続けてをdumpします。

これでヒューズバイトが読みとれました。ChaNさんのavrspに比べて操作に手間がかかります。
インタラクティブモードは quit で終了します。

Bプログラムを書き込みます。上に書いたように -U オプションで、-U flash:w:"c:\data\led8.hex":a とします。flashはプログラムメモリ、wは書き込み、 最後のaは hexのファイルタイプを自動判別することを示します。書き込みファイルは、「:」が含まれているときはダブルクオートで囲む必要があるようです。hexファイルは フォルダ C:\dataに置いています。ダブルクオートで挟まれたファイルパスとファイル名はDDで持ってきます。

書き込みが終了してプログラムが走り出します。なお、このときはTiny2313はデフォルトのクロック0.5MHzですから、lowクロック用にハードウエアを設定しておきます。

Cヒューズを変更します。Tiny2313のクロックはデフォルトで0.5MHzです。このときのヒューズLは 0b01100010=0x62 です。これを 0xe2 にすれば内蔵RC4MHzに、 0x8fに変更すればセラミックレゾネータ(>8MHz)になります。 内蔵RC4MHzにするときは、
 # avrdudu.exe -c usbasp -p t2313 -u -U lfuse:w:0xe2:m
と書きます(プロンプトなどは省略しています)。 このとき、-u オプション(小文字の方)が重要です。-uでセーフモードを抜け出します。だからヒューズが 変えられることになるそうです。なお、ファイルタイプの「m」はimmediate mode だそうです。ファイルを用意せず直接書き込めるので便利です。
lfuseと同様にhfuse、efuseが変更できます。


Dhexファイルを読み出します。ファイルに書き出すときは -U flash:r:"パス・ファイル名":i を使います。 もちろん -c -p は必要です。読み出した.hexファイルは当然、書き込みに使えます。
見ればよいだけなら、インタラクティブモード(-t)にして、dump flash ・・・・なのですが、一部しか表示されません。
Usage: dump <memtype> <addr> <len> ですから、dump flash 0 1000 と書きますとはじめから1000バイトが表示されます。

Eその他EEPROMの書き込み読み出しがあります。使ったことがないのですが、「flash」のところを「eeprom」に置き換えるといいようです。

ヒューズの読み出しと変更、プログラムの書き込みと読み出し、これらができたらプログラマとして実用になります。

WinAVR20040720版にはC:\WinAVR\doc\avrdudeがありましたが、20050214版にはないようです。この説明がいいと思いますので、 ここに置きます。(これを見ようとすると、 インストールが必要で、いま使っているものが書き換えられてしまう。ちょっと取り出すわけにはいかない。)

AVRdudeの使い方について日本語で解説されて いるページを見つけられませんでしたので、自分のメモを兼ねて書いてみました。その他の情報がありましたら、ご連絡をお願いします。

付属のAVRdudeは次のデバイスに対応しているようです。
 90S1200   MEGA103   TINY12    90CAN128  
 90S2313 MEGA128 TINY13
 90S2333 MEGA16 TINY15
 90S2343 MEGA161 TINY26
 90S4414 MEGA162 TINY2313
 90S4433 MEGA163
 90S4434 MEGA169
 90S8515 MEGA32
 90S8535 MEGA64
 MEGA8
 MEGA8515
 MEGA8535
 MEGA48
 MEGA88





3.3Vターゲット
 特に記載のないライタは、Vccが5Vです。ISPでの書き込みはターゲットボードのVccで動いているAVRデバイスにライタのIOをつなぐわけですから、双方のIOレベルが あわないと不都合が起こることが考えられます。たとえば、ライタが5V電源で、ターゲットが3.3V電源の時はVccを超える入力になります。過大電流が入力ダイオードに 流れて破損する危険があります。
私のライタは出力段のVccをターゲットから取ることにして、3.3Vでも問題なく使えるようにしています。




にわとり−たまご ライタ
 USBaspライタを作るためのライタです。COMポートのないUSBオンリーのノートPCではUSBaspライタが作りやすく使いやすいライタです(kkkさんの avrspx.exeでそうなりました。)
ところが、これにはファームを書いたAVRが必要です。にわとりが先かたまごが先か....その解決法は...ついに出ました。kkkさんの作品です。
でんし研のTADさんが、石井朋和さんのフリーソフト EasySend V1.02 を使って信号線1本でAVRに書き込む RS-CR方式 のライタを開発しました。 信号線が1本だけなら、単純にUSB-シリアル変換ケーブルで書けるはず..ということでkkkさんがavrspx.exeにこの方式の書き込みソフトを組み込んでしまい ました。
USB-シリアルコンバータのTXD(SD)だけを使ってmega8(48,88,168)に簡単にファームを書くことができます。
連絡を受けて、私の環境(はじめはcp2102を使いました)でテストしたのですが、再現する事ができませんでした。手元にノートPCはありません。デスクトップは COMポートを持っていますが、これを使ってはおもしろくない。変換ケーブルは持っていない。他のライタの関係で FTDI232BM と SiLabのCP2102 を使った自作変換 器を作っていたのでそれを使うことにしました。
CP2102ではなかなか進まなかったのですが、kkkさんが次々に新しい内容を加えてくれて改良されていきました。CP2102では最後のデータがどうしても書けなかったよう です。変換を232BMに変えると簡単に書き込めました。そのご、kkkさんがダミーデータを追加する方法を組み込んでくれましたので、最終的にはCP2102も正常に動作 するようになりました。
前置きが長くなりましたが、私がテストした方法を元に、このライタの紹介をします。

このライタはシリアル変換ケーブル(RS232Cタイプ)を使うために、負論理となっていますが、変換ICの出力は正論理ですから、位相反転のため(cp2102は 3.3VIOのためレベル変換も兼ねて)トランジスタ2SC2458(2SC1815)1段を入れています。市販の変換ケーブルではA点に入力して10kΩで受けるのですが、 トランジスタを経由したときはSCKのLが十分下がらないようで、書き込みができませんでした。10kをスキップして直接SCK(A'点)につなぎました。


(クリックで大きくなります)

mega48でUSBaspを作るという想定で使い方を書きます。

まず、ソフトウエアavrspx_b10_5.zipAVR WikiのSandBoxのavrspのUSBasp対応から ダウンロードします。
中を開けると、eggというフォルダがありますが、この中にすべてが入っています。(以後、説明がくどくなりますがご辛抱ください)
このeggフォルダをc;\(ドライブCのルートディレクトリ)にコピーします。そしてC:\eggのショートカットをデスクトップに作ります。 (作らなくても、フォルダ内容が画面に出ていればよろしい)
eggの中に、egg.pdfがありますからオリジナルの回路図を見てください。(私のものはパスコンをさぼっています)

書き込みのハードウエアを用意します。DIPのmega48とブレッドボードが似合うと思います。書き込み終了時には水晶がないと使えませんので、12MHzの水晶とコンデンサ は前もって用意しておきます。

PCとのインターフェイス@COMポートケーブル(これは意味がない シリアルポートがあるのだから)、AUSB-シリアル変換ケーブル、BFTDI232BMなどのICを使った USB-シリアル変換器、のいずれかが必要です。(Bが安い?) Bの時はトランジスタ回路部品も用意してください。
新品のmega48は内蔵RC1MHz発振のクロックになっていますから、水晶がなくても書き込めます(最後の瞬間に発振はしなくなります)。
ハードの結線は慎重にチェックします。ライタの性質から、配線が間違っていても素直にデータを出したら終わります。チェック機能はありません。

書き込みの準備をします。
PCで使用するケーブルのポート番号を調べます。私のPCではUSBシリアル変換ではcom3,4になります。eggのegg48.batをメモ帳などで5行目の SET PORT=1 を変更します。
「鶏と卵.txt」をご覧ください。

書き込み段階です。
eggフォルダをデスクトップに小さく出しておきます。
コマンドプロンプトを立ち上げます。カレントディレクトリをeggに移します。cd スペース \egg と入力すると、プロンプトがC:\egg>になります。
egg48.bat を黒いDOS窓にドラッグアンドドロップ(DD)します。
リターンキーを押すと ....続行するには何かキーを押してください。 と出ますから、ここでmega48の電源スイッチを入れて、リセット解除スイッチを 1秒ほど押してから、リターンキーをたたきます。
1分ほど待ちますと書き込みが終了します。(私は、リセット解除キーを押したままリセットの抵抗1kΩを抜きます)
電源を切って完了ですが、無事書けたかどうかはUSBasp完成までわかりません。


今後の改良で.eepファイルはなくなるかもしれません。(必要がありません)

書き込みテストをつうじて、再現性、信頼性はかなり高いのではないかと思います。書き込みできないときも、不安定な状態でなく、プログラムとハードウエア が整合していなかったと思われる安定したものでした。
書き込み確認機能のない中で不安もあるかと思いますが、ハードのチェックに注意すれば成功するものと思います。
これでノートのUSBオンリーでもAVRライタ自作が楽になるでしょう。

ご質問・ご感想などは掲示板かメールでお願いします。実行されましたら是非結果をお寄せください。Wikiへでも結構です。















TOPページへもどる