トップ 新規 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

雑談2

雑談場所2

雑談をする場所も必要でしょー(それがメインになるのも考えすぎだが)
新規の話題を書き込めなくしました。

 BestTechnology社の bootloader と ATmega128 - ぽぽ (2006年11月10日 00時47分33秒)

お世話になります。
自作 ATmega128 基板に BestTechnology社の bootloader を
焼いて使いたいのですが、うまく行きません。
1. BTC068 Atmega128BoardC.pdf の回路図を元に
ADM3202 の
ROUT → 200Ω抵抗 → PE0 (RX)
TIN → PE1 (TX)
と接続する。
PG4 を GND へプルダウン (ライタモードにするため)
2. オプティマイズの avrezusb で stk500mon.hex を焼こうとするが
Hex format error. が発生
3. error の原因になっている行 (最後から2行目) を削除して再度 avrezusb で
焼くと Verifying...Failed at F800:FF-0C とベリファイで一部失敗するが
作業自体は終了する
4. 以下の3通りの方法で hex ファイルの転送を試みるが、うまく行かない
・AVR Studio 4 のプログラマ (STK500 or AVRISP) → connect failed.
・AVR Studio 4 のプログラマ (AVR Prog) → No supported board found!
・avrdude-gui.exe だと以下のエラー
  avrdude.exe: stk500_getsync(): not in sync: resp=0x00
--
BestTechnology社の bootloader をうまく使えた方は居ますでしょうか?
ヒューズビットは以下のようにし、発振は 16MHz が手元にないので 10MHz の
セラロックを使っています。
Low:  11001111
High: 00-00011
Ext:  00
--
ちなみに AVR バタフライではうまく bootloader が使えているので
シリアルケーブルや COM ポート設定は問題無いはずです。
  • 最後から2行目のエラーはスタートアドレスの指定です。オプティマイズ社のavrezusbがavrspの古いバージョンを元にしているため未サポートでエラーとなります。この行は削除しても差し支えありません。問題は16MHzではなくて10MHzの発振に変更したのなら通信のボーレートに影響が出ますのでstk500mon.cをコンパイルし直す必要があります。 - kkk (2006年11月10日 08時53分13秒)
  • ヒューズの設定も違うようです。BestTechnology社のBTC-068の場合は Low:10111111,High:11-11100,Ext:------11 となっています。 - kkk (2006年11月10日 09時03分57秒)
  • kkkさん、いろいろとアドバイスして頂いてありがとうございます。 ヒューズビットの修正、AVR Studio で 10MHz にしてからコンパイルし直し(ソースはkkkさんの過去ログの stk500mon.c を使いました) 試してみたのですが、状況に変化がありません。 過去ログに従い .text の開始アドレスを 0xFC00 にしてからコンパイルをしたのですが、この部分は .bootloader ではマズいのでしょうか? .bootloader を 0xFC00 としても、やっぱりうまく行きませんでした。 - ぽぽ (2006年11月11日 01時44分53秒)
  • .bootloaderのセクションを使用することは構いませんがそのためにはstk500mon.cのすべてのファンクションを.bootloaderセクションに置く指定が必要です。デフォルトの.textセクションでよいと思います。またアドレスの指定がややこしいのですがAVRStudioで設定する場合は0xfc00で指定しますが、Makefile/BATファイル等でgccに直接指定する場合は --section-start=.text=0x1F800 とします。 - kkk (2006年11月11日 04時06分10秒)
  • 先の3.のVerifyエラーの件も気なっているのですが、エラーは出なくなってますでしょうか? - kkk (2006年11月11日 04時38分32秒)
  • オリジナルのstk500mon.cのボーレート計算ルーチンの誤差により10MHzでは通信エラーが起こるようです。10MHzでもちゃんと計算できるようにソースを修正してみました。ファイルが存在しません。 また10MHzでコンパイルし直したものも添付します。ファイルが存在しません。 (I/O関連をオリジナルから変更してあれば使えませんが)。注:動作確認は16MHz版ではしましたが10MHzでは行っていません。 - kkk (2006年11月11日 05時36分24秒)
  • kkkさん、いろいろと教えて頂いてありがとうございます。 10MHz用に書き換えて頂いたソースと hex ファイルですが、結論から言えば使えませんでした。ファイル転送がやはりできません。Verifyエラーに関しては、ソフトウェアの不具合ではなく本当に IC のフラッシュエリアの破損も考えられますので、ATmega128 と 16MHz セラロックの手配を進めている所です。手元に部品が届いてまた何か判明しましたら、こちらに書かせて頂きます。 - ぽぽ (2006年11月13日 02時30分34秒)
  • 原因が分かりました。オプティマイズ社のavrezusbがオリジナルから変更を加える段階で64kバイト以上のアドレスが無効となってしまっています。ATmega128はサポートされていますが下位64kバイトしか読み書きできません。0x10000以上のアドレスは0x00000からに書き込まれます(ブートローダは0x1F800なので×)。そのためVerifyエラーも起こっています。残念ながら私はavrezusbを持ち合わせていませんのでソフトを変更してチェックすることが出来ません(PC側とEZ-USB側ともに変更が必要です)。現時点ではavrezusbを利用してATmega128を使用する場合は64k以内のコードとなるようにしてください(ブートローダは使用できません)。EZ-USBのユーザの方はオプティマイズ社に更新の要求をしてみても良いかも知れません。ブートローダはとりあえず他のライタを用意して書き込んでみてください。 - kkk (2006年11月14日 03時39分01秒)
  • kkkさん、本当に感謝しております。avrezusbと64kバイトの件、時間ができたらオプティマイズに連絡を取って見るつもりです。 他のライターが必要との事で、COMポート制御ISPアダプタを作成しavrspを使ってbootloaderをATmega128に書く事ができたのですが、なぜかうまく動作しません。秋月から16MHzセラロックが届いたので16MHzセラロック+16MHz版bootloaderでも試してみたのですが動きませんでした。時間が取れなくてちゃんと検証できていないのですが、近いうちにまたいろいろと試してみて、報告する予定です。 - ぽぽ (2006年11月16日 01時59分11秒)

 usbdrvのバージョンアップ - dacha (2006年10月15日 22時03分04秒)

HIDKeysでD-の接続をPORTD0からPORTD4に変えたいと思いましたが、HIDKeys3月14日バージョンではusbdrvのバージョンが古く、変えることができませんでした。そこで、PowerSwichからusbdrvを持ってきて置き換えたところ(usbconfig.hのUSB_CFG_IOPORTNAMEへの変更はした)、

main.c:110: error:conflicting types for 'usbDescriptorHidReport'
usbdrv/usbdrv.h:414: error: previous declaration of 'usbDescriptorHidReport'

というエラーが出ます。usbdrvのバージョンアップについてアドバイスをください。

  • そのエラーは「usbdrv.hとmain.cで'usbDescriptorHidReport'の定義が違うよ」ということですのでmain.cの const char usbHidReportDescriptor[35] PROGMEM を char usbHidReportDescriptor[35] PROGMEM (constを削除)に変えてみればよいと思います。 - kkk (2006年10月15日 22時51分38秒)
  • ありがとうございます。コンパイル通りました。 - dacha (2006年10月15日 23時13分35秒)

 AVR Studioのdebuggerのバグ? - 名無しさん (2006年10月08日 18時09分32秒)

staticを付けたグローバル変数を、複数のソースに同一名で宣言した時、debuggerでそれらをwatchしようとすると、どちらとも同じ領域を見にいってしまうようで、同じ値が見えます。それぞれの変数の値を確認することはできないんでしょうか?

マップファイルを見ると、一応、別の領域が割り当てられているようですし、プログラムの動作としては、意図している通りであるようなのですが。

 USBasp -> AVR_Doper STK500V2_usb_programmer (2006年10月08日 11時18分53秒)

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=674937&bbs_page_no=1&bbs_id=1000

armok01130915.rar

  • 愛用しています。Studioから使えるのは、やっぱり便利ですね^^ - あしざー (2006年12月21日 17時31分08秒)

 USBasp -> avr910_usb_programmer.files.ver.1.01.rar (2006年10月07日 20時04分49秒)

http://pinokio3000.narod.ru/my_designs/AVR910_USB_Programmer.htm

  • ものすごく興味湧くんですけど、どうやって読めば… - 通りすがり (2006年10月15日 02時56分22秒)

 秋月電子にATtiny2313-20が登場 - senshu (2006年10月05日 22時49分53秒)

本日、秋月電子にATTiny2313-20が登場です。価格は何と!@120円です。20PinのICの価格とは思えない価格設定です。

18個以上なら@110円とのことですから、非常に安い印象です。こんなに安くなるなら、S2313をまとめ買いするんじゃなかった、と悔やんでいます。

でも、これでAVRの普及に勢いがでることを期待します。

  • 発売記念にCOM制御&AVR-ISPライターを作ってみました。ところで、マルツで買ったTiny2313はヒューズの設定が4MHz&8分周だったのですが、秋月のはデフォルトの8MHz&8分周なのか知りたいです。 - TAD (2006年10月12日 01時08分19秒)
  • 価格に釣られて秋月電子より10個程購入してみました。確認したのはその内の1個のみですが、8MHz&1/8周期になってました。 - Morosan (2006年11月12日 00時09分48秒)
  • ヒューズ情報ありがとうございます。 - TAD (2006年11月12日 23時07分36秒)

 OSXでavrspx - 瓶詰堂 (2006年09月23日 04時36分07秒)

何かと周りにMacOSが多い環境にいるので,avrspxをMacOS上でコンパイルしてみました.ただし,USBaspしか使えません…….FreeBSDとかでも問題なく使えてます.

身内用のサイトですが,置いておくのでよろしければどうぞ.

http://www.binzume.net/w/library/robo/avr01

libusbが必用です.Macは良く分からなかったので,自分でmakeした方がいいかも…

  • 情報有難うございます。次回の更新時に参考にさせてていただきたく思います。 - kkk (2006年09月24日 07時41分51秒)

 ヒューズの設定について - AVRマニア (2006年09月20日 23時24分13秒)

attiny26のヒュズで?divide clock by8internallyつまりクロック÷8と言う意味ですが、このヒューズはどのような時に使用するものですか?また、PLL設定はどんな時に設定すれば良いヒューズか、知っている方がいればお願いします。

  • 遅くなりました。tiny26に「?divide clock by8internally」というヒューズってあります?同様にPLLを内蔵しているtiny45には「CKDIV8」というヒューズがあってクロックを8分周出来ますがtiny26の場合は「校正付内蔵RC発振器」で選択するようです。このように動作周波数を下げることはCPUの消費電力を下げるのに有効です(電池駆動など)。tiny45の場合はさらにCLKPRレジスタをソフト的に設定することで動的に分周値を1/1〜1/256まで可変できます。また逆にPLLを利用すると内蔵発振器でも16MHzの高速動作が出来ます。このPLLはタイマ/カウンタ1の入力にも使用できるので高速なPWMの発生に用いられます。 - kkk (2006年09月25日 13時32分21秒)
  • kkkさんありがとうございました。何でも知っているんですね。すごい・・・・・ - AVRマニア (2006年09月26日 18時06分27秒)

 メッセ−ジをメモリに格納しておき表示したい - 初心者 (2006年09月19日 14時00分13秒)

AVRに興味をもち、勉強している初心者ですが、WinAVRで、配列、ポインターの記述が分かりません。どなたか、教えてください。

  • 普通のC言語だから、普通に勉強したら? 確かにAVR用のCはところどころパソコン用とは違うけど、配列とかポインタは全く同じ。 - 通りすがり (2006年10月15日 02時55分35秒)

 インストールができない? - 初心者 (2006年09月17日 23時00分32秒)

AVRStudio4.12とSP3を一度インストールしましたが、削除できなくなりましたので、ドライブにあるフォルダごと削除しました。その後に、もう一度Studio4.12をインストールしようとしましたができなくなりました。どのようにしたらよいのでしょうか?宜しくお願い致します。(attiny85を使用したいため・・・・・)※古いバージョンはインストールできました。

  • もう一度SP3の方のセットアッププログラム(aStudio412SP3b490.exe)を起動出来ないでしょうか?起動できたらそちらの「Remove」で一旦SP3をアンインストールすればAVRStudio4.12(aStudio4b460.exe)がインストールできるようになると思います。 - kkk (2006年09月18日 04時07分51秒)
  • 途中まで起動しますが、インストール済みです。みたいな、英語が出て、アンインストールも、インストールもできません。 - 初心者 (2006年09月20日 06時46分58秒)
  • SP3がインストールされている時にaStudio4b460.exe(SPなし)を起動すると↓

ファイルが存在しません。

  • そこでaStudio412SP3b490.exeの方を起動すると↓

ファイルが存在しません。

  • この「Remove」でSP3のアンインストールが出来ます。 - kkk (2006年09月20日 12時15分29秒)
  • やはり、できません。以前はkkkさんの画面のとおりなりましたが、今は途中で終了してしまいます。画面のような選択画面までいきません。 - 初心者 (2006年09月20日 23時59分33秒)
  • その時のエラー画面を貼り付けるかアップしていただけないでしょうか? - kkk (2006年09月21日 00時03分16秒)

 外部クリスタル - チャレンジャー (2006年09月14日 06時15分11秒)

tinyシリーズで、クリスタル等で外部からクロックを取る場合、プログラムの中ではそのpinを、outputに設定すれば良いのですか?それともinputに設定したらいいのですか?

  • 外部クロックに設定するとI/O機能とは切り離されるようですから入力・出力どちらでも構わないと思いますが、あえて出力に設定する必要もないのではないでしょうか。 - kkk (2006年09月14日 06時41分01秒)
  • kkkさんありがとうございました。 - チャレンジャー (2006年09月17日 22時48分58秒)

 外部からの信号を読まない。 - 初心者 (2006年09月13日 18時09分00秒)

チップは、tiny13、tiny45です。入力(1つ)のボタンを押すと、出力がでるものです。入力がいらないプログラムは稼働しますが、入力には反応してないようです。VCCには5Vを加え、あとはGNDに接続してあるだけです。port.0がスイッチで、Port.1が出力です。リセットには何もつけていません。ポートの定義はport0を入力としてあとは全て出力に設定しました。それから、高電圧シリアルプログラミングで、周波数を内蔵8MHZ、9.6MHZに設定を変えました。わかる方がいれば宜しくお願い致します。

  • すいません。Portbです。 - 初心者 (2006年09月13日 18時10分20秒)
  • 入力するときはPINBを使います。PORTBだと出力状態の読み込みになります。別の原因だったらゴメンなさい。 - TAD (2006年09月13日 18時51分55秒)

 Timer1 PWM動作おかしい - T (2006年09月12日 18時48分44秒)

バグレポートにもありましたが・・・ちょっと症状が違うようなので教えて下さい。(ATMEL32L)Timer1を使用したPWM動作おかしくないでしょうか?私が実験したところ【現象】高速PWM, 位相PWM, 位相周波数PWMにおいて、出力ピンを片方のピン(例えばOC1A)に限定する設定にすると非周期の波形出力になってしまう時がある(他の割り込みは全てOFF)

【原因】TCCR1Aレジスタ設定において片方の出力ピン(例えばOC1B)をOFFにしたり、OCR1Bレジスタに0x00を設定するとそうなるようです。

これがソフトのバグ(設定ミス)によるものなのか・・・・製品欠陥による所なのか?どうなのでしょうか???

 ピンヘッダかピンソケットか - 名無しさん (2006年09月10日 14時49分29秒)

AVRには直接関係ありませんが、例えばディスプレイをメインの基板と繋げるときに、ディスプレ側はピンヘッダにするのか、ピンソケットにするのか、どちらが一般的なのでしょうか?

ISPはメイン基板側がピンヘッダですね。

  • 私の意見は電源・出力の短絡事故がありえるメイン側がメスです。ケーブル側がメスになっているコネクタが多いので線を延ばすとき迷いますが。 - TAD (2006年09月10日 23時58分54秒)

 ATTINY26のクロック書換について(1MHZから8MHZ) - 初心者 (2006年09月05日 17時33分30秒)

現在、ライタはSTK500、ソフトはBASCOMーAVRを使用していますが、高電圧書き込み(パラレル設定)のやりかたがわかりません。STK500には標準でRS232C(パソコン出力)で接続するコードがついてきましたが、高電圧書き込み(パラレル)する場合、別のインターフェース(プリンタポート用)を買ってきて、STK500と接続しなければいけないのでしょうか?attiny26のパラレル設定(特殊な・・・)はSTK500ではしてあります。宜しくお願い致します。

STK500におけるパラレル高電圧プログラミングは、パラレル接続で書き込むことを指し、プリンタのパラレルポートとは無関係です。したがって、RS232Cのポートが接続され、適切なコネクション(これがtiny26の場合には難しい、、)さえされていれば、書き込めるはずです。BASCOM-AVRはSTK500を完全にサポートしているかは不明です。AVRstudioをインストールし、この環境からBASCOMが生成したHEXファイルを書き込めばよいと思います。- senshu (2006年09月05日 20時56分21秒)

  • senshuさん、全く適切なご教授ありがとうございます。しかし、私は、BASCOMしか使用したことがありませんので、studio4.12の詳しい使用方法がわかりません。そこで、お願いですが、生成したhex以降どのような操作をすれば、ロックfヒューズを書き換えられるか、よいサイトがありましたら教えていただきたいのですが・・・とりあえず、tiny26が1MHzから、8MHzにできれば良いと考えています。 - 初心者 (2006年09月05日 22時04分41秒)
  • AVRstudioに付属するHELP、あるいはSTK500に付属するマニュアルに書いてあります。日本語の解説が必要なら、HEROサイトで日本語訳されたものが入手できます。 - senshu
  • senshu さん回答ありがとうございます。実はHEROさんのサイトでダウンロードしたのですが、呼んでみてもよくわかりませんでした。 - 初心者 (2006年09月05日 23時45分16秒)
  • 「>ロックヒューズを書き換えられるか」というのはロックをしたいということでしょうか?解除したいのならチップイレースをするしかありません。TINY26でのロックビットのセットや解除はパラレルでなくてもシリアルISPモードでも変更できます。 - kkk (2006年09月06日 06時27分14秒)
  • シリアルISPモードで正常に書き込むにはヒューズのクロック設定が適切に行われていることが必要です。パラレル方式はハード的に壊れていなければヒューズ設定が間違っていても変更可能です。 - kkk (2006年09月06日 06時51分24秒)
  • kkkさん、いつも親切な回答ありがとうございます。私が変更したいのは、tiny26のクロック周波数で、工場出荷時では1MHzに設定されています。それを8MHzヒューズを設定したいのです。hexを作成してstudioで書き込むとき設定したら?と言うアドバイスがありましたので、ためしてみたところ、ヒューズの設定の所で、それらしい画面が出てきました、ただし、同じ内蔵RC発振でも0msとか48ms?とか4種類くらいでてきたのでまいってしまいました。どうすればよいでしょうか?お願い致します。 - 初心者 (2006年09月09日 08時09分27秒)
  • クロック周波数の設定はシリアルISPでも可能です。パラレル方式では当然問題ありません。0ms/4ms/64msは使用している電源の特性に合わせて設定します(発振器の安定待ち)。電源をONにしてCPUのVCCが規定の電圧になるまでの時間が比較的長いときは64msに設定します。比較的早く立ち上がる電源の場合は4msにしても構いません。内蔵の低電圧検出リセット(BOD)を使用する設定をヒューズで指定しているなら0msに設定します。一般的にはBODを有効として起動の遅延は0msで良いと思います。Tiny26の場合はBODは4.0V(VCC 5V用)か2.7V(VCC3V用)の2種類から選択します。AVR Studioではヒューズで[Brown-out detection level]と[Brown-out detection enabled]を設定します。 - kkk (2006年09月09日 17時01分47秒)
  • 補足) AVRでは内蔵EEPROMの書込みを行うようなソフトではBODを有効としないと電源OFF時に誤書込みが起きる可能性が高いのでBOD機能は必須です。(EEPROMを使用してないか読込しかしない場合は大丈夫です)。しかし不安定な電源を使用しているときやパワー系の電源(モータ等)を同じ電源からとっている場合等BODがかかって正常に動作しない場合もあります。(本来はBOD有効でも問題ないようなハードとすべきですが) - kkk (2006年09月09日 17時22分36秒)
  • kkkさん、いつも親切にありがとうございます。 - 初心者 (2006年09月09日 22時36分40秒)

 USBaspを認識しない場合の対処方法 - ずんや (2006年08月28日 17時12分57秒)

全ての環境に当てはまるかは不明ですが、当方のノートPC(VAIO VGN-SZ)において直接接続で認識できなかったものがハブを介して接続することによって認識するようになりましたのでご報告。やはり本来の電圧(3.3V)でないのが原因なのでしょうかね。一応1.5kではなく2本の抵抗で分圧して3.3Vプルアップとしていますが。既出でしたらすみません。

  • 私のノート(ThinkPadX31)でも5Vのままでは認識しませんでした(ハブは介さず直接続)。ツェナーダイオードで降下させたら認識してくれました(http://www.objectclub.jp/download/files/event/2005christmas/talks-ashizawa.pdf)。抵抗は試してないです。 - あしざー (2006年08月28日 21時42分47秒)
  • いろいろな環境の動作報告はこれから作成する人にきっと役にたつと思います。同じAVR-USBのAVR-DoperはUSBの通信ラインに3.6VのツェナーをいれてCPUは5Vで動作させています。 - kkk (2006年08月28日 23時50分33秒)
  • あれから試行錯誤さらにしてみたのですがハブ無しではダメでした。ダイオードで降下(ツェナーと普通の小信号ダイオードで実験してみます。後者はAVR USBのサンプルにありました)はまだ試していないのでこれから試してみようと思います。 - ずんや (2006年08月30日 03時02分35秒)
  • 是非、結果を教えてください。回路を複雑にすれば何とでもなるのですがusbaspは簡潔であってこそと思っています。 - kkk (2006年08月30日 03時45分10秒)
    • AVR-USBの新作 ファイルが存在しません。 あたりが無難かなあ?
  • kkkさんが仰る通り、回路がシンプルで再現性が高いところがUSBaspのポイントなのですよね。安定性とシンプルさはトレードオフといったところですかね、妥協点をどこにするか…。ダイオードで降下の実験が時間の関係で手を付けられなかったのですが、明日(今日)やるつもりなので結果はもうしばらくお待ちくださいね。 - ずんや (2006年09月01日 01時27分08秒)
  • できました!使用中のノートPCでもそれ以外でも身の回りにある確認できるPC全てで動作することを確認しました。これでハブなしでも使用できるようになりました。あしざーさん、kkkさん、ありがとうございました! - ずんや (2006年09月02日 00時01分06秒)
    • 一応回路図を載せておきます ファイルが存在しません。
  • 有難うございます。参考になります。そんな感じで落ち着きそうですね。 - kkk (2006年09月02日 06時22分36秒)

 PICマイコンで作るAVRISP互換ライタ - senshu (2006年08月28日 14時18分05秒)

AVRライタをAVRを使って作る記事は結構見かけますが、以下のURLでは PIC16F648Aを使って、非常にシンプルにAVRISP互換のライタを作るものです。PICライタはかなり普及しているので、書込み済みのPICマイコンを手に入れることは容易な方も多いことでしょう。私はユニバーサル基板を使い、約1時間ほどで AVRISP ver 2.0.7相当のライタを完成させることができました。部品代も数百円程度だと思います。

http://morosansoft.cocolog-nifty.com/blog/2006/08/avrpic_ad25.html

AVRISPとほぼ同様の使い方が可能ですから、かなり魅力的なライタです。ぜひお試しください。

  • 素晴らしいアイディア!早速試してみます - あしざー (2006年08月28日 21時58分15秒)
  • C言語で書いとけばSH2以外のH8やM16Cにも移植しやすいと思っていましたがPICのアセンブラには驚きです。senshuさん、楽しいblogの紹介ありがとうございます。 - TAD (2006年08月29日 00時10分03秒)
  • ファームウェアの改定版が公開されています。より多くのAVRで動作が確認されました。 - senshu (2006年09月04日 11時56分13秒)
  • PICライターを持ってなかったのでWriter509を作りました。内容はでんし研をご覧ください。 - TAD (2006年09月08日 00時05分29秒)
  • TADさん、AVRで作るWriter509も面白いですね。ただ、既にPIC用のライタをお持ちなら、wisp628にも注目してください。Witer509以上にシンプルで高性能なICSP方式のライタをシンプルに実現できます。Googleでwisp628 CoolHardwareで検索すれば情報が見つかります。- senshu (2006年09月08日 07時18分12秒)
  • 書き忘れました。AVR版のwriter509の公開も期待しています。 - senshu (2006年09月08日 07時23分56秒)
  • AVRISP 互換ライタのファームウェアが更新され、avrdude に対応しました。私の環境(RS232C 直結、USB 変換ケーブル経由)では問題なく使えていますが、うまくいかない例もあるようです。このライタを利用している方は、ぜひ試してみてください。 - senshu (2006年09月19日 11時51分16秒)
  • オレンジ電子さんより許可がありましたのでAVRで作るWriter509のソースファイルを公開しました。後、デュアルライターTiny45でavrdudeに対応しました。その他のも順次対応していきます。 - TAD (2006年10月25日 00時14分07秒)

 USBaspでS2313の書き込みエラー - TAD (2006年08月26日 14時07分25秒)

やっとUSBaspを作りました。avrspx -d1でMega8に8kバイトの書き込みが2.9秒。トリプルライターより速いです。ところがAT90S2313に書くとアプリケーションエラーになります。avrspx -rpでフラッシュは読めるんですが、ベリファイするとエラーになります。(ファイル名を指定するとダメみたいです)同じHEXファイルでもTiny2313には書き込めます。私の製作ミスなのか判断がつきません。USBaspでAT90Sに書けている人みえますでしょうか。

  • 1件だけですがテストしました。同じ結果です。-rpは正常です。書込みはエラーストップしますが、エラーのコメントを終了すると書込みはできているようです。 - kuman (2006年08月26日 15時07分32秒)
  • kumanさん、確認ありがとうございます。書き込み後のベリファイでこけるみたいです。-rでエラーを消して、一応は使えてます。 - TAD (2006年08月26日 16時09分09秒)
  • 申し訳ありませんでした。バグがありました。とり急ぎ修復したものをSandBoxにアップしました。 - kkk (2006年08月26日 17時48分47秒)
    • Verifyではなくて書込み後の次の書込みページ検索で不具合がありました。(AT90S2313等のページ書込みでないAVRで不具合がでます)
    • USBaspのファームの変更は必要ありません。avrspx.exeを差し替えてください。
    • 時間がとれなくて細かなチェックを行っていません。不具合を見つけた方は教えてください。
  • kkkさん、早速の修正ありがとうございます。S2313に書き込めるようになりました。速度測定と写真をトリプルのページに追加しました。 - TAD (2006年08月26日 20時34分40秒)
  • TADさんリポート有難うございます。ページ式でないAT90Sタイプが他のに負けてますね^^;)。時間が出来た時にでも最適化をして見ます。 - kkk (2006年08月27日 00時38分28秒)

 書き込みテスト

どうですか。

  • コメントを書き込めるかテスト - どうでしょう (2007年08月01日 19時20分17秒)
  • 投稿後「Permission denied at lib/Util.pm line 566.」って出ますが、一応書き込めるんですね。 - どうでしょう (2007年08月01日 19時21分39秒)
  • テスト

 書き込みに関する質問 - 名無しさん (2006年08月23日 06時44分13秒)

ATmega64のようなDIPタイプでないマイコンにデータを書き込むとき、ライタはどのようにすればいいのでしょうか?

  • 前もって書き込むには http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2926 のようなアダプタを使用します。一般的はターゲットボード上に実装したまま書込みを行うISPかJTAGを利用します。 - kkk (2006年08月23日 15時09分08秒)
  • ISPアダプタのMISO,VCC,SCK,MOSI,RESET#,GNDを、マイコンの対応するピンに接触(挟むもので固定)させその他のピンを浮かせた状態にし、ライタとしてデータを書き込むことは可能ですか? - 名無しさん (2006年08月23日 21時30分19秒)
  • mega64の経験はありませんがmega8,48ではよく行ないます(パスコンは付けています)。mega64はシリアルプログラミングのピンが違うようで、注意が必要です。日本語マニュアルのp195に書かれているようで、お調べください。また、Avccの電源もいるようですが、よくわかりません。 - kuman (2006年08月24日 00時02分23秒)
  • 回路によっては抵抗を追加するなどの対処が必要になります。HEROさんところの日本語ドキュメントが参考になります。 - kkk (2006年08月24日 00時37分20秒)
    • http://reef.path.ne.jp/~hero/hero.htm
    • AVRWrter.ZIPの中のAVR910.PDFの3ページ目「ハードウェア設計での考慮」
    • AVRhw.ZIPの中のAVR042.PDF3ページ目「4. ISP線接続」
  • 資料読めばなんとなく解ってきました、あとhttp://siva.cc.hirosaki-u.ac.jp/usr/koyama/lecture/text/avr/なるサイトを発見しました。それにしてもAVRはPICよりも魅力的に感じます。 - 名無しさん (2006年08月24日 07時26分11秒)
  • Mega128で実験してみました。http://homepage2.nifty.com/denshiken 。AVccは無くてもISPできましたが配線した方が安心です。書き込みだけならVCCやGNDは1ヶ所だけで大丈夫だと思います。 - TAD (2006年08月24日 22時19分36秒)

 avrsp-GUIの卵 - kuman (2006年08月21日 17時25分08秒)

前途多難ですが、GUI化の卵ができました。問題点が解決すれば先へ進めるのですが... http://www.geocities.jp/kuman2600/#renraku

  • kumanさん こんにちは、「徒然なるままに」でDelphiのことがかかれてたので「おや?」と思ってましたが・・・。私もDelphiはメインの開発に使用しています。残念ながら現在本業が超多忙で色々やりたいことが手付かずです。 - kkk (2006年08月21日 19時31分10秒)
  • kkkさん こんにちは。見ていただいてありがとうございます。 卵がひよこになりました。ごみやらチェックルーチンやらでごたごたですがソースも付けておきました。重くて遅いけれど、Delphiの勉強でした。http://www.geocities.jp/kuman2600/#renraku - kuman (2006年08月23日 14時36分27秒)
  • 使わせていただいたルーチンの作者の方から改良ルーチンを送っていただきました。速くなりました。sp03の名になっています。 - kuman (2006年08月23日 23時51分51秒)
  • ちょっとだけ動かしてみました。自分で考えていたよりはるかに簡便ですね。これは入門者の敷居が低くなりそうです。今後ひよこが成長していくのが楽しみです。 - kkk (2006年08月24日 00時45分36秒)
  • 少し成長しました。http://www.geocities.jp/kuman2600/n8sp03.html - kuman (2006年09月03日 16時28分16秒)

 USB Two programming interfaces Tools: AVR910_ISP + JTAG ICE IsoJtagISP AVR Programmer (2006年08月17日 04時11分00秒)

http://www.floppyspongeonline.com/automation/isojtagisp/isojtagisp.php

AVR910 Programmer AVR_Prog\avrdude\AvrOspII + JTAG ICE interfaces with AVR Studio

 USB接口<5合一>超微型AVR Tools (Mega16 + Mega8 + USB_CP2102)

1.JTAG ICE(ATMEL Studio)

2.ISP AVRISP(STK500V2_Studio)Programmer

3.ISP AVRprog\SLISP\AvrOspII Programmer

4.AVRprog 具有JTAG仿真器固件修&#22797

5.AVRprog\AvrOspII 可将JTAG仿真器的Mega16作为应用

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=566261&bbs_page_no=1&sub_kind_id=1175&bbs_id=1000

 avrisp - usbasp http://www.zhifengsoft.com (2006年08月16日 22時40分24秒)

PROGISP WINDOWS USBASP最新特性(Ver1.6 Beta)

http://www.zhifengsoft.com/progisp16.rar

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=604825&bbs_page_no=1&bbs_id=1000

armok01120948.rar

  • usbasp対応のGUIの書き込み用ソフトですね。良く出来ています。でもメッセージが文字化けします。 - kkk (2006年08月17日 02時19分47秒)

DIY USBasp ライタ --mega8一つのライタ--http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=456655&bbs_page_no=1&sub_kind_id=1210&bbs_id=1000

http://www.geocities.jp/kuman2600/n6programmer.html#06

 AVR JTAGICE mkI環境について - DDD&S loves AVR/JTAG (2006年08月13日 12時24分55秒)

いつもAVR-Wikiにはお世話になっています。http://www.olimex.com/dev/avr-jtag.htmlで遊んでいるうちに誤ってファームを壊してしまいいろいろ調べているとhttp://www.siwawi.arubi.uni-kl.de/avr_projects/evertool/index.htmlなページを見つけました。今バラックに組んで実験中なのですが(認識するけどまだステップ実行とかできない)うまく動けばGCC+JTAGでナイスな環境が構築できるのではないかとほくそえんでいます(うれしがってカキコしてみました....既出だったらごめんなさい)

 プルアップ抵抗の使い方 - RuI (2006年07月19日 07時54分29秒)

いつもAVR-Wikiにはお世話になっています。AVRのピン1本で2ビットのD・Aをやっているページを見つけました。http://www.binzume.net/w/library/avr_fakeda内部プルアップ抵抗にこんな使い方があるとは思いませんでしたが、抵抗値の個体差ってどれくらいあるんでしょうか?

 STK-500を使ったTiny26Lへ高電圧パラレル書込みができない件 - かもめ (2006年06月23日 16時01分35秒)

STK-500を使ったTiny26Lへの書込みができなくなりました。元々専用ケーブル(PROG CTRLとPORBをつなぐ物)を製作し何の問題もなくこの2〜3年動作していました、(このケーブルを初代ケーブルと云います。 )先日久々にSTK-500を使うとファームのUPが走り出し、その後Tiny26のみ使えなくなった最新版STK-500.PDFをダウンロードしてみると、何と専用ケーブルの結線図がコロッと変っている。半信半疑で専用ケーブルを製作(2代目ケーブル)し使ったがエラーでアウト、 エラーメッセージはSTK-500を電源OFFで書込む時と同じもの。AVRスタジオ4最新版をダウンロードしても同じ他の石(Mega32.Mega8)は問題なく使えている、Tiny26のみISPもパラレルもダメ。迷路に入ってしまった。

使用環境 OS Windows-XP プロ     スタジオ4+SP2 最新版     接続 COMポート

Tiny26データシートの「メモリプログラミング」のピン配置とSTK-500の配線部から追いかけ照合したら、WR\.OE.XA0.XA1.などの結線がムチャクチャ。例えばSTK-500のPROG_CTRLヘッダ3番ピン(/OE)はTiny26のPB0につながり、Tiny26のデータシートでは/WRになっている。

いったいどうなっているの?といいたいが、どなたか解りませんでしょうか。目的はTiny26Lに高電圧パラレルプログラミングする事です。

--senshuです。私もSTK500を使っています。

Tiny26に書き込むには、特別な結線をする必要があり、いつも時間を要するので専用のアダプタを準備している人が多いと思います。

私は、以下のようなケーブルを準備しています。

PORTA === PROG DATA

PORTE+PORTB(ユニバーサル基板に10ピンメスコネクタを2個実装し結合、更に中間に10ピンのオスコネクタを実装) === PROG CTRL

として高電圧プログラミングを行っています。

とりあえず、結線に頭を悩ます必要もなく、ミス無くTiny26に書込みが可能になっています。(STK500ユーザガイド 3-18ページを参照)

他の皆さんは、どういう工夫をされているのでしょうか。

 ソフトウェア開発環境について - samsara (2006年06月22日 09時19分58秒)

AVR Studio4.12 SP2とWinAVRをダウンロードして、プログラムを作成/シミュレータで動作確認することろまではできました。

今後、実機にてデバッグを行う場合には、ボードの他にはJTAGICE-mkII/ISP-mkIIを用意すれば宜しいでしょうか?その他に準備するものはありますか?

(チップはATmega128、C言語でプログラム作成しております。)

  • JTAGICEmkIIを用意するのであればAVRISPmkIIはなくても大丈夫ですよ。AVRStudio4.12SP2ではJTAGICEmkIIを使用してISPもできるようになっていますから(コネクタの変換は必要です)。でも手軽さで言えばAVRISPですかね(AVRISPmkIIではレガシーデバイスは対応していませんが)。 - kkk (2006年06月23日 01時13分21秒)
  • AVR Studio4.12SP2+WinAVR+JTAGICEmkIIで実機デバッグ可能なのですね。ありがとうございます。 - samsara (2006年06月23日 11時36分31秒)
  • 注意点としてこのページ(雑談2)にも出てますが(「謎な動作」参照)最初にmega103互換動作をはずすの忘れるとハマル場合があります。 - kkk (2006年06月23日 17時38分49秒)

mega103互換動作にするか否かというのは、どのように設定するものなのでしょうか?フラッシュの特定のアドレスの特定のビットに対して書き込む必要があるのでしょうか?これは何か特別なツールを利用可能なのでしょうか?宜しくお願い致します。 - samsara (2006年08月21日 16時08分55秒)

  • 拡張ヒューズのBit1(M103C)を1にして下さい。通常のライタで書き込めます。 - kkk (2006年08月21日 16時18分29秒)
  • 補足)Mega128動作とMega103互換動作ではメモリマップが異なります(当然スタックの位置も変える必要がある) 。又、一部のI/Oの機能も異なります。- kkk (2006年08月21日 16時22分42秒)

ボード/JTAGICE-mk2/ISP-mk2の準備ができたので、さっそくISP-mk2でヒューズビットを読み書きしようと思いましたが、うまくいきません。AVRStudio4のTOOLメニューからProgramAVR、ConnectでAVRISPmk2とUSBを選択しConnectボタンを押すと、ヒューズビット等の読み書きを行う為のWindowが出るのですが、「ISPプログラミング周波数をデバイスのクロック周波数の1/4以下に下げてください。CKDIVヒューズもしくはCLKPRレジスタが・・・・・」とメッセージが出ます。どのようにすれば、ISP接続ができるのでしょうか?BOARDの"ISP Freq”をいろいろと変えましたがうまくいきません。宜しくお願い致します。

  • ターゲットがうまく認識出来ないようですね。一応確認しておきますがMega128のISPの接続ピンはMISO/MOISIがPE1/PE0と通常と異なっていますが大丈夫でしょうか?また新品のMega128は内蔵1MHzの状態で出荷されますので"ISP Freq"は250kHz以下を指定してください(ISP Freq.の右側の[Write]ボタンで変更を設定します)。 - kkk (2006年09月30日 06時52分47秒)
  • ご指摘どおり、MISO、MOSIの信号でした。ありがとうございます。 - samsara (2006年10月02日 18時37分50秒)

 avrspx_b10_1 でんし研TADさんのRS-CR方式について - kuman (2006年06月06日 11時56分00秒)

残念ですが書けませんでした。変換ケーブルを持っていないので、cp2102でTxdを取り出し、c2458で位相とレベルを変えて33k+10nF積分器でmega48に書きました。3回の試行でいずれも220行目まで正常に書けたのですが、そのあとが書き込めませんでした。原因はわかりません。なお、fuseは書いていません(こわい)。

  • 報告有難うございます。当方ではPC内蔵のダイレクト、USBはI/OデータのUSB-RSAQ2(チップはProlific社)、Arvel SRC06USB(チップはFTDI社)の3種類にて確認しましたがヒューズまで含めてすべてOKでした。c2458で変換している部分がマッチしていない可能性があるかも?。ダイレクトCOMで確認できないでしょうか?(fuseは確認が取れてからの方がいいですよね) - kkk (2006年06月06日 16時13分11秒)
  • すいません。220行目ってどういう意味でしょう? - kkk (2006年06月06日 16時35分24秒)
  • usbaspx113_m48.hexをエディタで見ますと225行ありますがそのうちの220行は正しく書けています。ベリファイではアドレス0DC0の値1A以後が書き込めません。それ以前は一致しています。 - kuman (2006年06月06日 17時09分53秒)
  • 一番最後の少しだけですね?こちらではヒューズも含めて焼いていたので同じ様にusbaspx113_m48.hexだけを焼いてみました。正常に焼けちゃいました。どこに原因があるのだろう・・・? - kkk (2006年06月06日 17時25分47秒)
  • 一番最後の部分ということで最後の通信クローズの前にバッファ強制書込みを追加してみました。他にも人柱になっていただける方の情報を募集します。よろしくお願いします。 - kkk (2006年06月06日 18時04分08秒)
  • b10_2で書いてみたのですが同じ結果でした。 - kuman (2006年06月06日 18時21分17秒)
  • お手数をおかけします。ちなみにご利用のWindowsOSの種類は何でしょう? - kkk (2006年06月06日 18時23分04秒)
  • ダミーのeepromデータを用意しました。usbaspx113_m48.hexと一緒にusbaspx113_m48.eep(151)を指定して書いていただけませんか?Flashの後にEepromの書込みが入るのでFlashが書けるかも? - kkk (2006年06月06日 18時28分35秒)
  • OSはXPです。書けました。バッチファイルのコマンドラインに.eepを追加して実行したところ成功しました。ベリファイokでした。 - kuman (2006年06月06日 19時32分13秒)
  • ということはやはり最後が書けないうちに終了しているということですね。対策を考えて見ます。有難うございました。 - kkk (2006年06月06日 19時51分27秒)
  • 0x1A って ^Z(EOF)のように扱われている? - senshu (2006年06月06日 22時59分37秒)
  • また困ったこと。プログラムが書けたので、ヒューズも加えたのですが、ヒューズは書き込めませんでした。 - kuman (2006年06月07日 00時18分57秒)
  • >senshuさん。有難うございます。0x1Aは内部ではそのままの形では表現されていませんし送信でもそのまま0x1Aという形にはなっていません(ビット展開されています)ので大丈夫かと思っています。 - kkk (2006年06月07日 10時22分20秒)
  • >kumanさん遅くまで有難うございます。ヒューズの書込みは一番最後に行いますのでやはり最後の部分が正常に伝わっていないようですね。最後以外がかけているとなるとライタハードとは関係なさそうですね。PCによって何か違うのでしょう。この辺がヒントですよね?また何かありましたら情報をお願いします。 - kkk (2006年06月07日 10時37分09秒)
  • 変換チップを変えたら書けました。FTDI232BMに変えたところ、.eepを書かなくとも、デフォルトのバッチファイルでヒューズともに正常に書けました。どう違うのでしょう。 - kuman (2006年06月07日 10時42分53秒)
  • 情報有難うございます。当方ではProlific/FTDIでのチェックでSiLabのCP210xを持ち合わせていません。Windows用のCP210xのドライバの問題かも知れませんね。先程アップしたバージョンはデータの最後尾にダミーデータを付加するようにしてみました。 - kkk (2006年06月07日 11時09分03秒)
  • okです。b10_3では、FTDI232BM、cp2102ともにデフォルトのバッチファイルで正常に書き込めました。eepファイルは必要なのですか? 一連の書き込み実験から再現性は十分だと思います。安定しています。 - kuman (2006年06月07日 13時31分41秒)
  • 有難うございます。やっと肩の荷がおりた感じです。eepファイルは内部のシリアル番号の設定に使用していますがなくても初期値'0000'で動作するようにしてありますので無理して書き込む必要はありません。紛らわしいので次回からの添付ではeepはなしにしましょうか? - kkk (2006年06月07日 14時20分30秒)
  • eepなくても良ければ無しにしましょう。他の方のレポートがほしいですね。待ちましょう。 - kuman (2006年06月07日 14時45分24秒)
  • ホームページhttp://www.geocities.jp/kuman2600/index.htmlに紹介を書いてみました。 - kuman (2006年06月07日 20時51分18秒)
  • avrspxにRS-CR変換を組み込まれるとはkkkさん,さすがです。kumanさんも動作確認お疲れ様でした。後、同じサイト名は無さそうなので"でんし研"だけでも私は構いません。 - TAD (2006年06月08日 01時17分20秒)
  • >kumanさん。有難うございました。回路図もkumanさんの方が見やすいですね。 - kkk (2006年06月08日 02時09分59秒)
  • >TADさん。TADさんのアイデアがあってこそです。有難うございました。 - kkk (2006年06月08日 02時11分19秒)

 avrspx - akibow (2006年05月27日 18時58分17秒)

kkkさんのavrspxですが、これ、Cコンパイラは何をお使いなのでしょうか?ChaNさんのavrspは多少の手直しでBCCでコンパイルできましたが、avrspxは津波のようなエラーメッセージで{@_@}〜

  • 津波警報有難うございます・・・^^;)。現在コンパイルはmingw版gccを使用しています(Dev-Cppを使用)。LibUsb-Win32はBCCのライブラリも用意されていますので変更は可能と思います。本業ではBCCも使用していますので時間を見て対応したいと思います。対応しました。 - kkk (2006年05月28日 02時14分14秒)
  • BCCってC99準拠ではないんですね・・・。C++では特に問題なかったので気づきませんでした。BCC5.5/BCB6でもコンパイルできるようにソースを修正してアップしておきました。 - kkk (2006年05月28日 07時09分25秒)
  • あ、GCCでしたか。すみません、対応してくれと言うことじゃなくてもしgccならこっちでも淹れようかと思っていたのですが・・・ありがとうございます。 - akibow (2006年05月28日 08時30分52秒)
  • コンパイル可能になりました。ありがとうございました。#2313化計画、どうにかなりそうです。速度が問題ですが・・・ - akibow (2006年05月28日 11時50分49秒)
  • 2313化計画期待しています。今回BCC対応したのに加えて最近Freeで手に入るようになったVisual C++ Express Edtionでもコンパイル出来るようにしました。VCを使用する場合はMicrosoftのページから「Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う」を参考にWin32が使用できるように環境を構築する必要があります(defaultは.NETのみなので)。 - kkk (2006年05月28日 12時30分16秒)

 謎な動作 - けぃ (2006年05月20日 23時34分07秒)

初めてMEGA64を使うため、テストをしているのですが、謎な動作をするので理由がわかれば教えていただけませんか?

PORTBの0にLEDを接続してあります。

以下ソース

#include <avr/io.h>
#include <avr/interrupt.h>
#define BV(bit) (1<<(bit))
#define addr&=~_BV(bit)
#define addr|=_BV(bit)
#define LED_SET() sbi(PORTB,PB0) // LED点灯
#define LED_CLR() cbi(PORTB,PB0) // LED消灯
/* プロトタイプ宣言 */
void init_port(void);
/* メインループ */
int main(void)
{
    // ポート初期設定
	init_port();
	for(;;);
}
/* ポート初期設定 */
void init_port(void)
{
	// [PORTB]全ピンプルアップ
    PORTB = 0xFF;
	// [PORTB]全ピン出力
    DDRB = 0xFF;
    // LED消灯
    LED_CLR();
}

上記のようにすると、LEDは消えたままですですが、以下のように変更すると、LEDがついたままになってしまいます。

/* メインループ */
int main(void)
{
    // ポート初期設定
  init_port();
  // LED消灯
    LED_CLR();
  for(;;);
}
/* ポート初期設定 */
void init_port(void)
{
  // [PORTB]全ピンプルアップ
    PORTB = 0xFF;
  // [PORTB]全ピン出力
    DDRB = 0xFF;
}

これっていったいなんでなんでしょうか・・・orz

  • 上記ソースが見づらかったので勝手に修正しました。間違ってたら修正をお願いします>けぃさん - kkk (2006年05月20日 23時58分56秒)
  • しかし何故でしょうね。出力されたリストファイルを見れば分かるかも? - kkk (2006年05月21日 00時00分40秒)
  • リストファイルを見ても分からないですね・・・ - akibow (2006年05月21日 08時52分54秒)
  • 手間をおかけしてすみません>kkk様 - けぃ (2006年05月21日 10時33分55秒)
  • 上記の件、解決しましたので報告します。 MEGA64には下位のMEGA103互換動作モードが実装されていて、初期設定は互換動作ONになっていました。なのでそれをOFFにし、Makeして書き込んで見たところ正常に動作しました。 又、効果を実証するためにMEGA103互換動作をONにし、MakeファイルをMEGA103用に書き換えてMakeし書き込んで見たところ、正常に動作しました。 板汚してすみませんでした。。。orz - けぃ (2006年05月21日 10時38分40秒)
  • なるほど内蔵SRAMのメモリマップが異なるわけですね。 - kkk (2006年05月21日 13時25分11秒)

 AVRマイコンのアドレス空間について - samsara (2006年05月17日 15時42分31秒)

通常、16bitのビット幅では64kByte以上のアドレスを取る事ができないので、そのような場合には、メモリをバンク切り替えする仕組みを用いると思います。

ATmega128については、内蔵Flashが128kByte、内蔵RAMが4kByteとなっております。しかし、ATmega128の日本語マニュアルを見ましたが、バンクという概念が記述されておりません。

マニュアルには、以下のように記述されており、アドレスが重複しています。プログラムメモリ配置・・・・・0000番地〜FFFF番地データ空間とSRAMの配置・・・・0000番地〜FFFF番地

AVRはどのようにして、64kByte以上のアドレスを使用するのでしょうか?また、C言語でのポインタは、16bit幅ではなく32bit幅なのでしょうか?

  • まず、命令コードに関しては、AVRは16bitで1ワードとなっています。各命令は1ワード(2バイト)または2ワード(4バイト)で、ワードに対してアドレスが振られているので、16bitアドレスで65536ワード=128kBytesをアドレスできます。1命令実行毎に必ず2バイトの倍数を読み込みますのでこれでOKです。 - akibow (2006年05月17日 18時21分59秒)
  • FLASH上に置いたデータについては、1バイト単位で読み込むLPM命令が用意されています。Zレジスタに入ったアドレスの内上位15bitがワードアドレス、最下位がワードのうち上位下位どちらをとるかを選択するフラグとなっており、結果としてバイトアクセスで64kBytesを参照できるようになっています。それでは全部を参照できないので、mega128ではELPMというコマンドが別途用意されています。これはZレジスタの他、RAMページ選択レジスタRAMPZの値を上位につけアクセスすることで64kBytes範囲外のデータを参照できるようにされています。書き込みについてはSPM命令1つで対応しています(RAMPZ=0なら下位64kBytesを参照する) - akibow (2006年05月17日 18時21分59秒)
  • SRAMやレジスタとFLASHメモリに関しては、バンクではなくもともと別の空間にあるメモリとして扱われています。アクセスするためのハードウェアや命令を別々に持っていますので、両方を同時にアクセスする(命令実行=FLASH読み込みとデータ読み書きが同時にできる)ことができるので、高速化しやすいと言われています。「ハーバードアーキテクチャ」でググってみてください。 - akibow
  • というわけで、C言語のアドレスも16bitです。故にこのアドレスがどちらのメモリを対象にしているかを意識して使わないと変なことになってしまうので注意が必要です。FLASH,レジスタ/SRAMに加え、EEPROMも重なったアドレスにあります。
  • ただしgccのリンカはそれでは困るのか、FLASH上のアドレスについては$800000をオフセットしてアドレスで区別できるようにしているようです(詳しい人補足宜しく)
  • すばやく、かつ 詳細な回答をありがとうございます。たいへんに参考になりました。 - samsara (2006年05月17日 19時15分54秒)

 USBaspの -dオプション - akibow (2006年05月17日 12時13分55秒)

長くなったのでここに。USBaspの-d optionですが、

d クロック幅 ターゲット
許容周波数
(avrsp)
0 0.2 18MHz 5MHz
1 0.3 6MHz 1.25MHz
2 0.7 3MHz 0.77MHz
3 1.3 1.5MHz 0.56MHz*
4 2.7 750kHz* 435kHz
5 5.3 375kHz 357kHz
6 10 200kHz 303kHz
7 20 100kHz 263kHz
10 50 40kHz 189kHz
20 150 13kHz# 97kHz
100 950 2kHz 20kHz#

  • ※=内蔵1MHz発振対応 #=32768Hz水晶対応

ハードウェアSPIのクロック設定の性質上avrspと互換にはできないのですけど、デフォルトの-d3が1.5MHzまでとなり、AVRのデフォルト出荷状態1MHz内蔵発振に対応するのに-dをつけなければなりません。どうせavrsp互換ではないのですから、-d4あたりをデフォルトにした方がいいのでは。この速度でもavrspの-d3より速いですし。d6以降が10usec刻みなのは実用的だと思います。

  • USBaspのオリジナルの高速モード(ジャンパなし)をデフォルトにあわせました。avrspはiniファイルに初期値の設定が出来るのでこのままでどうでしょう? - kkk (2006年05月17日 12時36分04秒)
  • akibowさんにお願い,SPIブリッジで-d0では例のAtmega8はどうなるでしょう?(すいませんSPIブリッジを作っていないので) - kkk (2006年05月17日 12時39分12秒)
  • spiブリッジの-d0で同じmega8は読み書きOKです。ただし、他の処理が律速になるせいか、読み出しでも-d3と実行時間はあまりかわりません。 - akibow (2006年05月17日 12時47分02秒)
  • もとい、書き込み-veryfyで差があります。USBaspのファーム書き込みで、-d3で4秒、-d0で3秒。USBaspでうまくいったときの書き込み時間も同様です(-d4で4秒、-d1で3秒) - akibow (2006年05月17日 12時54分47秒)
  • ファーム側でRESETの正パルスの後にwaitを入れてみると-d3でも安定、-d1でも9割方OKになります。avrspx側で100ms waitは入れているようなんですけど・・?? - akibow (2006年05月17日 13時38分38秒)
  • 情報有難うございます。最初にUSBaspのソースを見たときにRESET後のWaitがないなとは気づいていたのですがPC側でWait出来るかなということでそのままにしていました。とりあえずファーム側でもRESETの後にWaitを追加してみました。 - kkk (2006年05月18日 07時45分51秒)
  • avrspx側で変な最適化でもあるのでしょうか?usbasp_transmit()の結果retはreturn retでしか使われないからと、先にdelay_ms()と並行して行うコードにされる・・・ってことはありえるのかな?spibridgeが行っているような汎用waitコマンドを用意してもいいかもしれません。 - akibow (2006年05月18日 08時40分01秒)
  • 最適化とは関係ない様ですですね。USBaspのソースを追ってみるとUSBASP_FUNC_CONNECTは値を返す仕様にはなっていないですね。ということはavrspx側でUSBASP_FUNC_CONNECTを発行しても同期待ちが発生せず(読み取り動作にいかないため)Windowsのキャッシュに入ってすぐリターンとなっているのではないでしょうか? - kkk (2006年05月18日 17時15分05秒)
  • Usbaspx側のUSBASP_FUNC_CONNECTの処理で 'replyBuffer[0] = 0; len = 1;'を追加したら読み取り待ちが発生するようになるため大丈夫でしょうか?こちらで読み書き不良が再現できないため効果が確認できないのですがakibowさん時間がとれれば確認していただけたらありがたいです。 - kkk (2006年05月18日 17時24分09秒)
  • あ、なるほど、USBで値を返していないからWindows側で待たずに次に進むのですね。USB関数使ったことがなくて悩んでいました。時間がかかりそうですが試してみます。 - akibow (2006年05月18日 17時34分02秒)
  • でも現在usbaspxVer1.11でRESET後に入れたWaitだけでも大丈夫かも? - kkk (2006年05月18日 17時52分43秒)
  • spibridgeをUSBaspに移植?したらtiny2313に収まらないかとトライ・・・・どんなに絞っても2100Bytes程度で、あと一息で玉砕・・・・・・・ - akibow (2006年05月18日 18時14分02秒)
  • 面白そうなことやってますね。こちらもUSBaspxでUSBASP_FUNC_CONNECTで処理を追加してみました。avrspx側も変更が必要になりました。 - kkk (2006年05月18日 18時39分44秒)
  • avr-usb driverで、1.8kBytes程度の電源スイッチとLEDをコントロールするサンプルがあったんですよ。ついつい色気出して・・・usbdrvが1.5kBytes、spibridgeが558bytes・・・やっぱ無理ですね(^^;) - akibow (2006年05月18日 19時14分31秒)
  • 対応してるのかどうか知りませんが、atmeega48/88/168の初期設定は500kHzで、1MHzじゃないです。デフォルト-d5 希望。 - かみき (2006年05月18日 20時09分18秒)
  • 現在手元にある先日入手したばかりのATmega168のFUSEを読んでみました。FUSE_Lは0x62となっていて内蔵8MHzの8分周となっています。1MHzなのでは?ちなみにATTiny2313は以前は内蔵4MHzの1/8で500KHzで出荷されていて現在は内蔵8MHzの1/8で1MHzとなっているのを確認しています。 - kkk (2006年05月18日 20時40分51秒)
  • avrspxにて確認してみました-d3ではエラー-d4では正常でした。なのでやはり出荷時は1MHzだと思われます。 - kkk (2006年05月18日 21時26分15秒)
  • megax8の内蔵発振にはそもそも500kHzになる組み合わせがないです(4MHzモードがない)。 - akibow (2006年05月18日 22時21分48秒)
  • FUSEで直接500KHzの設定は出来ませんがハード的にはCLKPRレジスタをいじれば500KHzは可能です。Atmelのミスでここが1/16に間違っている可能性も0ではないなと思ったものですからチェックしてみました。(結果は1MHzのようでした) - kkk (2006年05月18日 22時45分48秒)
  • mega48登場期にfreaksにも出たネタだと思ったけど確かにひいても出てこない... ごめん。なんかと勘違いしたかも。 - かみき (2006年05月18日 23時40分05秒)
  • あ、1/32分周なんてのもできるんですね>CLKPR ほんとに多機能なMCUだこと。 - akibow (2006年05月19日 08時44分05秒)

 新割り込み名定義 - akibow (2006年05月11日 10時14分10秒)

WinAVRでの新しい割り込み名定義ですが、どういうわけかデバイス毎に名称が変わっているものが多いようです。たとえばEEPROM書き込み完了割り込みでは

  • mega8 :#define EEPROM_READY_vect _VECTOR(17)
  • megaX8 :#define EE_READY_vect _VECTOR(22)
  • tiny2313:#define SIG_EEPROM_READY _VECTOR(15)

という状態です。これは何を意図してこのような仕様にされているのでしょうか?誰かわかる方いますか?

EECRレジスタ構造の違い?でも割り込み名変えて便利になるとは思えないんですが。

  • ちょっと違っています。avr-libc-1.4.3/1.4.4では以下のように定義されています
    • iom8.h : #define EE_RDY_vect _VECTOR(15)
    • iomx8.h : #define EE_READY_vect _VECTOR(22)
    • iotn2313.h : #define EEPROM_READY_vect _VECTOR(17)
  • 以前にavr-libc-1.4.x情報ページにも書きましたが、以前の[SIG_xxx]はMCU間でかなり互換性がなくなっていました(複数のメンテナによる不統一が原因)。[XXX_vect]はAtmel純正開発ツールとの互換性を持たせようとAVRStudio4のPartdescriptionfilesの中のxmlファイルの定義から名称を拝借するように変更になりました。ところが原本のAtmel純正のxmlファイルそのものが統一されていないため上記のような結果になっています。ヘッダファイルの[XXX_vect]の部分自体は変換ミスがなくなるように専用ツール(スクリプト)によって変換されています。avr-libcのヘッダだけを修正すると原本との相違が発生し混乱が予想されるのでAVRStudio側が修正されない限りそのままなのではないかと思っています。また現在は他のI/O定義の部分についても変換ツールによってxmlファイルから変換するような試みがなされています。 (余談ですがAVR Asm用の.incファイルもAVRStudio付属のxlmconvert.exeにより自動作成されるようになっています)。- kkk (2006年05月11日 12時01分12秒)
  • 追伸)Atmelお勧めのIAR社のコンパイラ(KickStart版)のヘッダも見てみました。上記3種類はすべて 'EE_RDY_vect' で統一されていました(さすがに商用ツールだけのことはある)。あわせるならIARが参考になるのでしょうか? - kkk (2006年05月11日 12時40分16秒)

 avrspのUSBasp対応について - kuman (2006年05月07日 10時44分25秒)

avrspの使い勝手は素晴らしいものです。早速試してみましたが、1kバイトの読み出しで35秒かかりました。avrdudeで8秒、avrspのCOMで4秒、usbで4秒でした。(私の環境で)速くなると簡単なライタが便利に使えてうれしいのですが。

  • kkkさん、立派なものを作っていただいたのに注文を付けてごめんなさい。 - kuman (2006年05月07日 11時06分28秒)
  • レポート有難うございます。beta-3をアップしました。改善されていると思います。 - kkk (2006年05月07日 16時35分59秒)
  • 追試しました。ほとんど違いません... - kuman (2006年05月07日 20時32分10秒)
  • cp2102のSPIブリッジと比較しました。ターゲットはmega8です。1006バイトのプログラムを使っています。 - kuman (2006年05月07日 20時34分08秒)
  • 書き込みは、cp202が1.6秒、aspが10秒、avrdudeが10秒でした。読み出しは、4.9秒、36秒、36秒でした。ただ、avrdudeインタラクティブモードの読み出しは8.5秒でした。速度では、avrdudeと同じと考えて良いと思います。切れ切れでごめんなさい。改行の方法はないでしょうか。 - kuman (2006年05月07日 20時41分18秒)
  • 至急訂正します。ロークロック用のジャンパーを入れたままでした。クロックを8MHzにしてハイクロック設定にしたところ、極端に速くなりました。cp2102ブリッジより速いです。読み出しが2.3秒でした。長く使わなかったので忘れていました。kkkさん重ねてごめんなさい。 - kuman (2006年05月07日 21時38分52秒)
  • 速い、簡単、-dはうれしい。 満足。謝 - kuman (2006年05月08日 23時12分51秒)
  • kumanさんのサイト、kkkさんからのavrspx_b6_1見て、手持ちのmega48で早速USBaspを作製してみました。 avrspx.iniの1行目に-pu1を入れるのを忘れていて1日悩みましたが、-pu1を追記したところ見事動作いたしました。kkkさん素晴らしいものを有難うございます。 - kay393 (2006年05月12日 21時56分15秒)
  • kay393さん、USBaspを利用される方が増えると私もうれしいです。avrspx_b6_2にアップしまた。 - kkk (2006年05月14日 00時30分14秒)
  • avrspx_b6_2を入れる前にavrspx_b7をリリースされてしまいました。avrspx_b7を入れさせていただきました。問題なく動作しております。 USBで使用できるので非常に扱い易いです。 kkkさん、有難うございます。 - kay393 (2006年05月15日 23時06分38秒)
  • kay393さん動作報告有難うございます。まだしばらくは時々バージョンアップ(bug.fix)があるかも知れません。今回はchanさんがアップデートされたので予定を早めてb7をリリースしてしまいました。 - kkk (2006年05月16日 05時29分40秒)
  • こちらもトラブルあったものの無事動作しました。b7で動かしています。しかし、mega8-8MHz内蔵RC発振のターゲットに書き込みを行ったところ、-dをつけないデフォルト(-d3?)で10%くらいISPに入る時にこける模様です。そこを乗り越えたら途中でこけることはありません。-d5だと100%問題ないですが遅くなります。ISPに入るところでタイミングが変なところがあるかもしれません。spiブリッジでは-d1で安定して読み書きできます - akibow (2006年05月17日 01時58分03秒)
  • akibowさん動作報告有難うございます。こちらでもターゲットをAtmega8の内蔵の8MHzに設定して書込みを行ってみましたが不具合は再現できませんでした。-d0ではダメですが-d1で問題なく読み書きできています(これは仕様通りです)。エラーとなる時のメッセージはどのようなものでしょうか?申し訳ありませんがその時のヒューズの設定を教えていただけませんか。 - kkk (2006年05月17日 05時26分12秒)
  • spiブリッジの動作クロックが不明ですが仮にakibowさんのサイトに書かれてある9.216MHzだと仮定するとavrspで-d1を指定するとiodlyは約2.28usとなり1SCKクロック約4.56usとなります。この時ターゲットCPUは877KHz以上が使用可能です。このディレイに相当するusbaspxの指定値は-d4(ターゲット750KHz)となります。ちなみに-d3ではターゲットは1.5MHz以上です。このことから想像すると8MHzではなくて1MHzのクロックなら上記動作で説明がつきます。(usbaspxでは-d6未満の値ではハードウェアSPIによる高クロックモードとなる様にしています) - kkk (2006年05月17日 07時18分19秒)
  • 再現できませんでしたか。うーむ。ターゲットはmega8で、ヒューズビットを書き換えて(CKSEL=0100)内蔵RC8MHzとしたものです。最初1MHzデフォルトのままでは-d6でゆっくりしか書けなかったので(あたりまえ)、ターゲットクロックが高ければどうかと思いヒューズを書き換えて試したものです。
D:\USB\USBasp\avrspx_b7\usbaspx110 20060515\bin110>avrspx -pu -rf
found 2 busses
Detected device is ATmega8.
Low: 11100100
     ||||++++-- CKSEL[3:0] クロック選択
     ||++-- SUT[1:0] 起動時間
     |+-- BODEN (1:BOD無効, 0:BOD有効)
     +-- BODLEVEL (1:2.7V, 0:4.0V)
High:11-11001
(省略)
D:\USB\USBasp\avrspx_b7\usbaspx110 20060515\bin110>avrspx -pu -rf
found 2 busses
Locked device or Synchronization failed.←20%くらいこうなる
D:\USB\USBasp\avrspx_b7\usbaspx110 20060515\bin110>avrspx -pu -rf -d6
だと、100%問題なしです。

- akibow (2006年05月17日 09時03分44秒)

  • ispSetSCKOptionEx()を見て分かりました。-d指定値6未満では指定値1の違いはwait2倍の違いなんですね。一方spibridgeのiodlyは指定値比例、9.216MHzなら9クロックのループ、約1usec単位ウェイト.両者は比較できるものではなさそうです。 - akibow (2006年05月17日 09時31分41秒)
  • CPUの個体差があるのでしょうか?こちらの手持ちはAtmega8は数が少ないし(同じロットだろうし)再現できないです。'Locked device or Synchronization failed.'はSignatureが読めなかったときに表示されます。時間を見てソースを再度検討してみます。有難うございました。 - kkk (2006年05月17日 11時54分46秒)
  • またAtmega8の内蔵1MHzの時は-d4で問題なく書き込めます。 - kkk (2006年05月17日 12時01分30秒)