|
プログラム利用の手順……慣れない人のために (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をドラッグアンドドロップして行います。 |
| 書き込みとベリファイ | 読み出しのみ | |
| ハブなし: | 3.2秒 | 1.6秒 | ハブあり: | 2.1秒 | 1.1秒 |
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.
|
|
(序)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 ホスト機器に悪影響がなく、ライタとして正常に使えれば自分専用の道具として十分だとする意見は説得力があると思います。理論的な議論は必要でしょうが、その結論を待っていたのでは今使うことができません。 (工事中です) |
#include <avr/io.h>
int main(void)
{
DDRD=0xff;
PORTD=0xaa;
while(1){};
}
buildメニューでbuildします。予定通りエラーが無く(当たり前か)コンパイルが終了しました。デスクトップにフォルダとhexファイルができています。
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 へ変更が必要です。
|
うまく働かないときのチェックポイント 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 でポートを指定しなければなりません。 |
|
(追記)AVRstudioに含まれているavrasm32.exeを使うともっと簡単にアセンブルできます。 DOS窓に avrasm32.exe をD&Dして、xx.asm ファイルをD&Dして、intelhex指定の -fI オプションを書けば終わりです。 #avrasm32.exe xx.asm -fI これで.asmのあるフォルダに同名の.hexファイルができます。 このとき avrasm32.exe は単独で(他のファイルと関係なく)良いようです。自由な場所にコピーしたものが使えます。 |
|
Chanさんのavrspを拡張して、USBaspに対応できるようにしてくれたのです。Chanさんのライタが同時に使えるだけ でなく、USBaspの細やかなコントロールがすべてソフトウエアでできるようにしてくれています。安価に制作できて、 性能がよい、申し分のないライタに変身しました。kkkさんに感謝! |
| 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 |