Senshu LAB
サイト内検索: AND検索 OR検索  


Counter: 1982, today: 1, yesterday: 12
Table of Contents

教材作成に有用な情報や組込み技術の情報が共有できればと考えています.
※ 本サイトの掲載内容を利用して発生した損害,障害の責は負いませんので悪しからず.


AVRdude(およびArduino IDE)関係の「掲示板-3」

FT232RLのBitBang ライタの補足説明(引用)

senshu (2010-07-09 (金) 17:43:41)

説明書を書いている時間がないので、最低限必要な結線方法などを解説している
すzさんの書かれた説明書を引用します。

avrdude-serjtag の使いかた

インストール(Windows):

    最初に FTDI ドライバのインストールをします。

    ダウンロード先 : 
       http://www.ftdichip.com/Drivers/D2XX.htm 

    次に、bin/avrdude.exe , bin/avrdude.conf をインストール先に
    コピーします。

    avrdude.exe を avrdude-xx.exe にリネームすると、avrdude-xx.conf を先に
    サーチします。avrdude-xx.conf にリネームすることで、複数の環境を持てます。

    avrdude.exe のバージョンは、5.8 です。libusb-0.1.12 対応なので、usbasp など
    も動作します。その場合 libusb や usbasp の inf ファイルは別途入手してください。
      
注意など

  Linux , Mac OS X は バイナリを梱包していないので、ビルドしてください。
  詳しくは BUILD-linmac.txt を参照

  Windows も MinGW で ビルドすることができます。
  詳しくは BUILD-mingw.txt を参照

  Mac OS Xでは、使用前に シリアルドライバ を取り外し、使用後に再組み込みします。

    取り外し
      sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext
    組み込み
      sudo kextload   /System/Library/Extensions/FTDIUSBSerialDriver.kext

  Linux では、シリアルドライバ の取り外しは自動で行われますが、
  組み込みについては、USB を再接続するか、手動での組み込みが必要になります。


説明: 

ft245r : FT232R/FT245R Bitbang Writer

  usage: avrdude -c ライタ名 -P ポート名 [ -E reset] ...

    -c  option : ライタの指定

      ft245r : sample configration for FT232R/FT245R 
      ft232r0 : FT232R channel 0
        miso  : D1/RXD
	sck   : D2/RTS
	mosi  : D0/TXD
	reset : D4/DTR

      diecimila : Arduino Diecimila or clone 
      ft232r1 : FT232R channel 1
        miso  : D3/CTS
	sck   : D5/DSR
	mosi  : D6/DCD
	reset : D7/RI

      breakout : sparkfun FTDI Basic Breakout
        miso  : RXI (2)
        sck   : CTS (5)
        mosi  : TXO (3)
        reset : DTR (1)

      定義は avrdude.conf にあるので カスタマイズすることが出来ます。

      avrdude.conf で、

      	ldyled = PIN番号 ; 
      	pgmled = PIN番号 ; 

      の定義を追加できます。LED は、CBUS 0-3 を 8-11 で指定できます。
      (ただし未確認: だめかも) 
      
      はサンプルです。使っている人は serjtag-0.3 から変更しているので
      注意してください。

    -P : ポート名の指定

      ft0 - ft9 : FT232/FT245 のデバイス番号。デバイスが 1 つしかなければ
                  ft0 を指定。

      プロダクト名 / シリアル番号:
                  USB の プロダクト名 か シリアル番号 のどちらかを指定することも
		 できます。
		 プロダクト名 や シリアル番号 は、MProg ユーティリティで
		 自由に設定できます。ただし、空白を使うと指定できないので注意。
    -E option : 終了時の動作の指定
 
      reset : 終了時 ターゲットをリセットします。(HI-Z)
      noreset : 終了時 ターゲットをリセットしません。(L : デフォルト )

      (*) 終了時 は常に miso と sck を HI-Z ( 入力 ) にするようにしました。
       ( 出力は、reset のみ )

 配線の注意点:
     ft245r は、ポートの初期状態がすべて入力なので、出力がぶつかる問題は
     ありませんが、ft232r は、 TXD, RTS, DTR の初期状態が出力です。
     これらのピンを割り当てる場合、出力がぶつからないように注意してください。

       - ft232r1 (= diecimila )では、初期状態がすべて入力のピンを
         割り当てているので、問題ありません。、
       - ft232r0 と breakout では、mosi = TXD  (, sck = RTS ) なので、
         AVR 側の使い方によって問題が起きる可能性があります。
         特に mega 系で SPI マスター使う場合 要注意です。
         .. とはいえ、ft232r0 は、ソフトシリアルで PC と通信する場合に
         便利です。 

     なお、ISP の状態にする際、reset を L - H - L と切り替えます。
     最初の L と sck/mosi を出力にするのは同時です。
     
     H の期間は、(1.25 ミリ秒)で、通常その間に AVR が起動してくること
     はありませんので、sck と mosi が出力になる問題はありません。
  
     それでも安全のために、初期状態が入力の場合でも sck と mosi は、
     AVR との間に 150 Ω 程度の抵抗を入れた方が良いです。
   終了時は、reset 以外のピンを 入力に切り替えます。
     ... が、シリアルを PC で open すると 初期状態になりますので注意。

     終了時 reset ピンの状態は デフォルト L です。AVR をスタートさせたい
     ときは、-E reset オプションを付けてください。 

serjtag : Serial JTAG Cable 

    オリジナル プロトコルです。詳しくは、README-serjtag-j.txt を参照

  usage: avrdude -c serjtag -P serial-port [ -b serial-port's baud ]
  
   -b option 
      support 3000000 bps 


usbasp : USBasp Writer 

   以下の改造をしています。オリジナルと動作が違うので、注意。


   終了時の動作

    -E option : 終了時の動作の指定
 
      reset : 終了時 ターゲットをリセットします。
      noreset : 終了時 ターゲットをリセットしません。( デフォルト )

    -P : ポート名の指定 (デバッグ用)

     通常は、未指定で Vendor=16c0 ProdID=05dc  , 
            Product=USBasp , Manufacturer="www.fischl.de"

     のデバイスを選択します。

     ポート名を [Manufacture]:[Product] で指定することができます。
     ( : が重要) 
     Manufacture,Product のどちらかは省略可。省略した場合 オリジナルの
     名前 ↑ を使います。

推奨する結線方法

  • senshu 2010-07-09 (金) 17:48:28
    以下の接続をお薦めします。
    diecimila : Arduino Diecimila or clone 
         ft232r1 : FT232R channel 1
           miso  : D3/CTS
    	sck   : D5/DSR
    	mosi  : D6/DCD
    	reset : D7/RI
    この接続によりCDCデバイスとの共存が可能です。しかもDTRやRTSも利用していないで、
    Arduino的な結線で動作させることができます。

BitBangライタ、動作せず

  • ヒロ? 2010-07-09 (金) 23:28:28
     私は下記のサイトの指示にしたがってFT232RLを用いてATmega168Pに書き込もうとしました。

    http://www.geocities.jp/arduino_diecimila/avr-writer/index.html#top

     しかし、kumanさんと同じ様に書き込みができず、上記サイトの7のエラー表示がでます。
    配線の誤り、ソフトウェアのチェック、特にVCPの設定をしていないかを調べましたが、自分
    では原因が分からず。
     何か、対応策、設定の誤りがありそうな箇所がございましたら、教えて頂きたく書き込み
    しました。

詳細な利用環境情報を教えてください

  • senshu 2010-07-09 (金) 23:37:13
    そうですか、残念です。私の場合は問題なしですが、
    1. 利用しているOS環境(32/64bitの別)
    2. ドライバのバージョン(libusb-win32, FTDIドライバ共に必要)
    3. エラー発生時のメッセージの詳細
    4. libusb-win32は動作しますか?(usbtool list で確認可能)
    5. AVRマイコンの読み出しはできるのか
    6. 仮想COMポートは正常に機能しますか?
    などを教えてください。私が公開しているavrdude-GUIはログ窓に詳細な経過が表示でき
    ます。その経過を教えてください。
  • ヒロ? 2010-07-10 (土) 01:18:58
     お返事、ありがとうございます。

     さて、私が見ているサイトの仕様とは異なるようですね。(同じなのかも知れませんが?)
     該当サイトでは、libusb-win32などは使われていません。
     すz氏制作のFTDI BitBang AVRライタソフトavrdude-serjtとFT232RLのドライバ、
    ラッパーで動作するようですが、私には無理でした。

状況が変化しています

  • senshu 2010-07-10 (土) 01:36:11
    FT232RLだけを利用するならFT232RL用のドライバだけで動作するかもしれません。

    しかし私は、広範に動作するものを提供したいと考えています。USBaspやAVRISP-mkII
    などを利用するためには、libsub-win32のインストールは必須です。
    現在のlibusb-win32は動作環境によって、数種類のDLLやSYSファイルが用意されており、
    手動でのインストールはかなり面倒です。

    また、昨年までのlibusb-win32のフィルタドライバは、Vista/7 へのインストールは
    不可能でした。こうした状況が説明の違いになっています。

お名前:

Arduino IDEのエラーチェックを強化する

senshu (2010-07-09 (金) 11:30:41)

Arduino IDEの改良を行っています。

現状のArduino IDEの仕様では、利用しないボードのテストは困難です。ブートローダを
書き込む時にしかエラーを確認できません。そうしたことから、目視で確認を行っていま
すが、細かなミスはすり抜けてしまいます。

本日は、boards.txtのミスタイプをチェック機構を追加しました。この機能により、自分が
利用しないボード設定も漏れなくチェックできるようになりました。

Arduino IDEでは、ボード毎の設定はjava言語のコレクション(ハッシュ)を利用しています。
その使い方を理解する必要がありますが、ハッシュの中に更にハッシュがある構造であり、
java言語に不慣れな私にとっては、予想以上に面倒でした。最終的には以下のコードを追加
しただけですが、わずかこれだけの行を書くのに数時間を要しました。
言語習得の難しさを実感します。

Set ent = boardPreferences.entrySet();
Iterator ir = ent.iterator();
String p1, p2, fname = "", board_name = "";
final int ITEM_COUNTS = 12;
int check;

check = 0;
while (ir.hasNext())
{
    Map.Entry entry = (Map.Entry)ir.next();
    String key = (String)entry.getKey();
    String board = key.substring(0, key.indexOf('.'));

    if (board.equals(board_name) == false) {
      if (false) {  // for DEBUG
        Base.showMessage("Warrning " + board, boardsFile.getAbsolutePath());
      }
      if (check > 0) {
        Base.showMessage("Warrning " + board_name, 
                          boardsFile.getAbsolutePath()+ " " + check);
      }
      board_name = board;
      check = ITEM_COUNTS;
    }

    // Minimum check items
    p2 = key.substring(key.indexOf('.') + 1);
    if (p2.equals("name"))                          { check--; }
    else if (p2.equals("upload.protocol"))          { check--; }
    else if (p2.equals("upload.maximum_size"))      { check--; }
    else if (p2.equals("upload.speed"))             { check--; }
    else if (p2.equals("bootloader.low_fuses"))     { check--; }
    else if (p2.equals("bootloader.high_fuses"))    { check--; }
    else if (p2.equals("bootloader.extended_fuses")){ check--; }
    else if (p2.equals("bootloader.lock_bits"))     { check--; }
    else if (p2.equals("bootloader.unlock_bits"))   { check--; }
    else if (p2.equals("build.f_cpu"))              { check--; }
    else if (p2.equals("build.mcu"))                { check--; }
    else if (p2.equals("build.core"))               { check--; }
    else if (p2.equals("bootloader.path")) {
      fname = boardsFile.getParent() + File.separator
          + "bootloaders" + File.separator
          + (String)entry.getValue() + File.separator;
    }
    else if (p2.equals("bootloader.file")) {
      fname += (String)entry.getValue();
      File f1 = new File(fname);
      if (f1.exists() == false) {
        Base.showMessage("Warrning " + board, "\"" + fname + "\" not exists");
      }
    } else {
      // othe setting
    }

    if (false) {  // for DEBUG
      System.out.println( board + "." + p2 + " = " + entry.getValue());
    }
}
// Check last item
if (check > 0) {
  Base.showMessage("Warrning " + board_name, boardsFile.getAbsolutePath()+ " " + check);
}


上記のコードは、最低限必要と考える項目の漏れが無いかを確認するものです。起動時に
必ずチェックを実行するので、潜在するミスを洗い出すことができます。実際、公開中の
dude-wrapngの設定ミスを検出できました。苦労して?追加した甲斐があります。

今後も、自分で追加修正したboards.txtの正しさを検証できるわけです。

以下は、テストのために意図的にミスを混入し、機能検証を行いました。最後の1は一項目の漏れが
あることを意味します。
boards-error.jpg


  • senshu 2010-07-10 (土) 00:04:37
    エラーチェックの強化とFTDI BitBangライタ用のオプション指定を可能にしました。
    -B ビットレート指定が遅めの設定になる関係で、BootLoader書込みではHIDaspxほど
    の速度はでません。理由が明らかなので改良は可能ですが、大幅な書き換えは次期の版へ
    の移行の妨げになる可能性があります。

    またチェックが不十分であり、CMD指定のスマート化が実装できておりません。
    悩ましい問題です。
  • senshu 2010-07-10 (土) 07:52:14
    Arduino IDEのコードは、正直な印象は「読みにくい」です。もっと美しく書ける
    はずですが、作者らの苦労が偲ばれるコードになっています。

    その理由は、少しずつ機能追加してきたからだと思います。はじめにこうした機能が
    あれば、というのではなく、必要に応じて機能を追加してきたようです。

    そのために、美しさに欠ける部分があります。特に、proc55ingやwiringをベースにして
    いますが、Arduino独自の機能を実装部分に試行錯誤の箇所が多いと思います。

    そして、その箇所に多くの改良が必要なのです。

    現在の0018版では改良をほぼ完了しましたが、0019になった段階でもモチベーションを
    維持できるかは不明です。


お名前:

これも同時性?、FTDI BitBang programmerの紹介

senshu (2010-07-06 (火) 23:03:19)

FT232RLを利用するAVRライタの紹介です。

zoom

http://lopez.sourceforge.net/

私的な感想ですが、驚くほどyuki-lab版の画面構成に類似しています。
おそらくソースを参考にしているのだと推測しますが、ソースは未公開?です。

これはちょっと心配ですね。公開されて間もないのですが、ぜひソースコード
の公開も期待したいです。


  • senshu 2010-07-06 (火) 23:21:13
    実際に試してみましたが、ここで公開中のavrdude-GUIの方が格段に高機能です。
    インストールされたファイルを確認したところ、すzさん作のavrdude.exe(5.3.1版)が
    含まれていました。
    2010/06/21  10:23           114,963 help.chm
    2010/06/20  14:01           410,516 avrdude.conf
    2007/06/30  11:53             1,349 LOPEZ AVR USB Programmer.exe.config
    2007/06/20  23:10           296,526 avrdude.exe
    2010/07/06  19:00         1,118,208 LOPEZ AVR USB Programmer.exe
    2010/06/27  11:53            67,646 Bomb.ico
    この内容なら、全てを開示すべきだと思います。

    lopez programmerから学ぶことができそうなのはシリアルターミナルですが、
    ソースが公開されたら参考にしたいと思います。(一見、公開されているようにも
    見えるのですが、実体がありません)


お名前:

Arduino IDEの設定に柔軟性を追加する(意見求む)

senshu 2010-07-05 (月) 18:27:22

アップロードのスマートな実装を考えます。現状のArduinoでは、コード中にavrdude用
の設定パラメータを埋め込んでいるので、avrdude以外のコマンドへの対応は困難です。
そこで、avrdude自体にhidspxの呼び出し機能を追加しましたが、これもバージョンアッ
プの対応を考えると、頭の痛い話です。そのため、dude-wrapngではかなり面倒な機能拡
張を行っています。しかし、この方式で継続して多数のコマンドに対応するのは無理があ
り、もっと柔軟な指定方法を採用すべきです。

Arduino forumを探したところ、類似の提案が見つかりました。

−−Arduino ForumBetter avrdude management より引用−−
以下のようなオプションを希望する。

MyBoard.avrdudeparams=-c usbasp -p $DEVICE -u -U flash:w:$FILE:i


$COMPORTといった変数が利用できれば便利。また一部のノートPCでの利用を考慮し、COMPORT
指定を必要としないプログラマにも配慮が欲しい。
−− 引用おわり −−

こうしたアイディアを参考に、私の考えを書いてみます。$は正規表現と相性が良くない
ので、makeが採用している{}を採用したいと思います。
[1] boards.txtに設定した値を参照可能にする

MyBoard.upload.protocol=stk500         --> {PROTOCOL}
MyBoard.upload.maximum_size=30720      --> {MAXSIZE}
MyBoard.upload.speed=57600             --> {SPEED}

MyBoard.bootloader.low_fuses=0xFF      --> {LOW}
MyBoard.bootloader.high_fuses=0xDA     --> {HIGH}
MyBoard.bootloader.extended_fuses=0x05 --> {EXTEND}
MyBoard.bootloader.path=atmega         --> {PATH}
MyBoard.bootloader.file=ATmegaBOOT_168_***.hex --> {FILE}
MyBoard.bootloader.unlock_bits=0x3F    --> {UNLOCK}
MyBoard.bootloader.lock_bits=0x0F      --> {LOCK}

MyBoard.build.mcu=atmega328p           --> {MCU}
MyBoard.build.f_cpu=16000000L          --> {F_CPU}
MyBoard.build.core=arduino             --> {CORE}


[2] programmers.txtに設定した値を参照可能にする

avrisp.name=AVR ISP
avrisp.communication=serial         --> {P_TYPE}
avrisp.protocol=stk500v1            --> {P_PROTOCOL}

avrispmkii.name=AVRISP mkII
avrispmkii.communication=usb
avrispmkii.protocol=stk500v2

usbtinyisp.name=USBtinyISP
usbtinyisp.protocol=usbtiny

parallel.name=Parallel Programmer
parallel.protocol=dapa
parallel.force=true
# parallel.delay=200

arduinoisp.name=Arduino as ISP
arduinoisp.communication=serial
arduinoisp.protocol=stk500v1
arduinoisp.speed=19200

※ このファイルはbootloader書き込み時に参照される。borads.txtに記述したものと
 区別が難しい。特に、Uploadにライタを利用する場合には混乱が予想される。

[3] Arduino IDE変数の一部を参照可能にする

割り当てたCOMポート名              --> {PORT}
Flash用HEXファイル名               --> {HEX}
EEPROM用HEXファイル名              --> {EEP}
ビルドDirectory名                  --> {BUILD}


[4] コマンド行定義の拡張
変数参照可能なコマンド定義機能を追加すれば、以下のような利用が可能です。
・hidspxの場合

MyBoard.upload.cmd_line=hidspx -d1 {HEX}

・bootloadHIDの場合

MyBoard.upload.cmd_line=bootloadHID {HEX}

・FTDI BitBang Writerの場合

MyBoard.upload.cmd_line=avrdude -cdiecimila -p{MCU} -Pft0 -B4800 -u -Uflash:w:{HEX}:i

・↑の指定は面倒なので、avrdude用の追加オプション指定を検討中

MyBoard.upload.options=-Pft0 -B4800


[5] まとめ
これにより、hidspxやbootloadHIDコマンドも無理なく利用できます。さらに、
以下のような使い方もできます。

***.upload.cmd_line=start avrdude-GUI {HEX}

BATファイルも起動できるので、大いに利用者側で処理を追加可能です。

これらの機能を追加により、一層 Arduinoの利便性が増すと考えられますが、
この程度の機能追加は、ごく僅かなコード追加で実現できるのです。


  • senshu 2010-07-05 (月) 22:26:36
    既存の設定に影響を与えず、利用を希望する方だけに追加機能を利用可能にする
    仕組みをどう実現するかです。

    もっとも簡単なのは、「protocol が特定の値の時に、拡張機能を適用」という
    ものです。現時点では、protocol=extend の時に、この仕組みが機能する、とい
    う方法を検討しています。

  • senshu 2010-07-07 (水) 18:48:25
    時間がとれず進展はありませんが、一点だけ改良すべき点が明らかになりました。

    現在の実装では、ブートローダ用のファイル名が誤っていても、実際に書き込み時に
    エラーが発生するだけです。この仕様では、長らく不具合が残る可能性があります。

    そこで、実際にファイルの存在を確認後にIDEを起動するように修正することにしました。
    この改良により、ミススペルをチェック可能になると考えます。

  • senshu 2010-07-10 (土) 00:15:37
    boards.txtのミスタイプへの対応は完了しました。

    avrdudeへのオプション群の指定も実装しましたが、メタ文字列の代替処理は
    未実装です。スマートに実装するのは一工夫が必要と感じます。特に今までの
    機能を活かしながら改良を行うのは意外に面倒です。


お名前:

Arduinoを8/16MHz以外で使う場合の注意点

senshu (2010-07-02 (金) 14:26:37)

すんさんの掲示板で、自作のArduinoボードを12MHzで動作させた場合の問題点が報告され
ています。

突き詰めると、delayMicroseconds関数が8M/16Mのどちらかにしか対応していないのが問題
とわかりました。シリアル通信などは12MHz動作でも問題はないので、この関数の実装が
不十分なわけです。そこで私は、以下のように12MHz動作にも対応できるように修正を
行ってみました。動作確認は行っていませんが、ある程度の改善は期待できます。

--- wiring_orig.c	Fri Jan 29 15:16:30 2010
+++ wiring.c	Tue Jun 29 10:50:26 2010
@@ -125,6 +125,21 @@
 
 	// account for the time taken in the preceeding commands.
 	us -= 2;
+#elif F_CPU >= 12000000L
+	// for the 12 MHz clock on most Arduino boards
+
+	// for a one-microsecond delay, simply return.  the overhead
+	// of the function call yields a delay of approximately 1 1/8 us.
+	if (--us == 0)
+		return;
+
+	// the following loop takes a quarter of a microsecond (3 cycles)
+	// per iteration, so execute it four times for each microsecond of
+	// delay requested.
+	us = (us << 1) + us;
+
+	// account for the time taken in the preceeding commands.
+	us--;
 #else
 	// for the 8 MHz internal clock on the ATmega168
 

Arduinoにはコメント付きのソースが付属しています。問題さえ明らかになれば、解決は
可能だと思います。


  • shuji009? 2010-07-02 (金) 14:44:54
    お疲れ様です。
    ちょっと心配なのが、例えば、14.576Mだとかの場合、us3倍だと
    マージンが少し減る・・・とか問題あると思います。
    元々のコードが16M>=だから20Mの場合は、大丈夫なのか?
    と思いますけど。
  • senshu 2010-07-02 (金) 21:39:09
    shuji009さん、こんばんは。すんさんのサイトには書き込みできない場合があるので
    ここに書きました。待ち時間の精度を上げるにはきめ細かく書くべきですが、この例
    では8, 12, 16MHz限定の実装です。これはアイディアに過ぎません。

    こうした議論ができるのは、オープンソースならではです。商用ソフトウェアでは、
    逆アセンブルさえ禁じている場合があるのです。


お名前:

いよいよ、最終仕上げです

senshu (2010-07-02 (金) 00:17:39)

avrdude, avrdude-GUIの機能強化が最終段階です。6月始めに目指した機能は
実装でき、arduino-0018の不具合修正、そして機能の強化をまとめる段階に
なりました。

自分の考えを整理するため、現時点での改良すべき点を列挙します。
■ arduino IDE
・Uploaderコマンドでは、コマンドやオプションの柔軟な指定を実現する
・BootLoader書き込みコマンドでは、〃
・設定ファイルにミスタイプ時にも不具合を生じない実装(今はそうなっていない)

■ 拡張されたavrdude, avrdude-GUI
・FT232RLモジュールがあれば、AVRライタとして利用できる
・hidspx(HIDaspx以外のハードもサポート)も利用可能
・ファームウェアの書き込み時の注意点を解説する

■ 各種の名称を定義する
・hidspx(!=HIDaspx)
⇒AVRマイコン用ライタの制御ソフト(COM-SPI bridge、USBasp, HIDaspxなど
 をサポート)

・HIDaspx
⇒AVRマイコン(ATtiny2313のみで実現したAVRマイコン用のライタ、USB I/O
 としても利用できる)

・dude-wrapng
⇒Arduino IDEの不具合を改善するため、内部のコードを修正を行ったもの。
 国際化(日本語環境で利用するとメニューを日本語表示)も行っている。
 アップローダには、avrdudeの他にhidspxやHIDbootloadも利用可能である。

思いつくだけでも際限がありません。どこから書けばよいのか、、、。


  • senshu 2010-07-02 (金) 01:53:05
    以下のページにはavrdudeの説明があります。Web翻訳機能が利用できるので便利です。

    http://www.nongnu.org/avrdude/user-manual/avrdude.html

  • senshu 2010-07-03 (土) 00:40:04
    7/2は時間切れです。多忙につき、一連の改良作業は何もできませんでした。

    各種のツールの効果的な利用方法を紹介する必要があると考えますが、一個人が
    できる範囲は限られます。ツールを利用している方のノウハウを紹介してください。

    逆説的ですが、不便な点を書き込んでもらうのも一案です。もしかすると、使い方
    が設計者の目指したものと違っているのかもしれません。

Arduino IDEには柔軟性が必要

  • senshu 2010-07-03 (土) 16:45:34
    dude-wrapngに、「ターゲットボードのRESETスイッチ押下を促すダイアログ表示」を
    追加しようと思っています。これがあれば、スイッチ押下のタイミングを逃すことは
    なくなると思います。

    また、avrdude-GUIのようなソフトを併用できるように、呼び出し形式を再定義できる
    仕組みを追加するかどうか迷っています。

    何れにせよ、Arduino IDEには、もう少し柔軟性が必要と考えます。

RESETスイッチ押下ダイアログの追加

  • senshu 2010-07-05 (月) 10:06:39
    ArduinoのUploadでは、ブートローダ協調動作が必要です。特に、Arduino IDEでは、コン
    パイル後にUploadが開始されます。そのため、コンパイル完了までの時間が操作環境により
    異なり、RESETスイッチ操作のタイミングは一定ではありません。またブートローダを待ち
    の状態にしておけば確実にロードできますが、自動起動が困難になります。

    そこで、RESETスイッチ操作を促すダイアログを表示できるようにしました。このダイア
    ログはboards.txtにて有効/無効を指定できます。

    AUTO RESET機能がないArduino互換ボードでは、このダイアログが表示させ、手動でブート
    モードに移行することで、遅滞なく、かつミスなくアップロードが可能になります。

    reset_dialog1.jpg

お名前:

細かな修正は際限無し(avrdude-GUI)

senshu (2010-06-30 (水) 19:07:39)

avrdude-GUIを使っていると、微妙な点が気になります。

特にエラー処理と感じます。例えば、使っているプログラマを変更し、
チップの自動認識を指定します。ISPケーブルの接続が漏れたりすれば
エラーになります。

この時のAVRマイコンの表示は、今まで表示されていたものは正しくない
のですが、昨日までの版ではそのままになっていました。

本日の版では、そうしたエラー処理を修正しました。

また、CommandLineオプションが長めになることを考慮し、マウスカーソルを
しばらく置いておけば、その内容を表示するように工夫しました。

見かけは変わりませんが、初期の版と比較すれば、確実に完成度は向上して
います。

見かけはほとんど変わりませんので、実際に使い込んでもらわないと工夫は
理解してもらえないのが残念な点です。


  • senshu 2010-06-30 (水) 19:28:24
    ここ2ヶ月の間、一連のプログラムを修正の過程で一万行を超えるコードを読みました。

    この分量のプログラムを書くことは不可能ですが大よその処理を読み、修正を行うこと
    は可能なようです。

    FTDI BitBang ライタの制約も、何とか解決できました。

    そこで感じたポイントを書きます。

    1. 入り口と出口は一箇所がよい。(裏口を設けると、チェックが不完全になり易い)
    2. 必要に応じて、適切なコメントをつける
    3. 使い勝手に優れたエディタを常備する
    4. インデントに配慮し、コーディングする(C#では入力時にこれが行われます)

    常識的なことばかりですが、ある程度の経験がモノをいう世界だと感じました。



  • senshu 2010-06-30 (水) 21:12:44
    まだ、エラー処理が不完全なことを確認しました。
    > avrdude -p auto -q  -c diecimila -P ft0 -B 76800 
    # avrdude: ft0 open failed 
    # Auto Detect (OK).
    ライタが接続されていない場合も「OK」を表示しています。avrdudeのエラー捕捉は
    結構面倒なのです。毎度のことですが、どうしてこんな仕様なのでしょうか。
    (暇をみて、直します)

  • senshu 2010-07-01 (木) 09:57:59
    発想を転換しました。エラーメッセージを捕捉して、その内容からエラーを
    判断していましたが、今回、必要なデータが得られなかった場合をエラー扱い
    することにしました。

    この方式は、エラーの検出漏れを防ぐことが出来るようです。


お名前:

avrdude-20100701.zipに差換え

senshu (2010-07-01 (木) 10:51:31)

avrdude-20100624は新掲示板で公開していますが、OGURAMさんから評価をいただいた
のみです。そこでもっと多くの方にテストを協力していただきたいと考えています。

avrdudeの最新ソースに、すzのAVR研究で公開されているavrdude-serjtag04e.zipを
追加し、最新libusb-win32をリンクした avrdude.exeを作成しました。
各種の差分の多くはオリジナルのまま適用しましたが、一部、私の気づいた問題点を独自に
修正しています。このavrdude.exeに対応するavrdude-GUIも修正し、設定パラメータも
見直しました。

こうした改良により、avrdude-2010-0630以降の版はテストに値する機能を有します。

avrdude-GUI6.jpg
・プログラマを指定し [Read]ボタンを押下するだけで認識可能
・入力欄が限られるものは、ヒント表示を行う
・ログ表示窓は、コメント書き込みや選択した領域をDELキーでクリア可能

fileavrdude-20100701.zip

avrdude, avrdude-GUIをセットにしました。FT232RLやhidspxで利用できるライタを
お持ちの方は、テストにご協力ください。

このアーカイブの目玉は、FTDI BitBang対応と、libusb-win32 ver 1.1.14.3をダイナ
ミックリンクしている点です。このバージョンは「Windows Vista/7 へのインストール
可能」です。

多少の勇気?が必要ですが、動作対象なので障害が起きることないと思います。

http://akizukidenshi.com/img/goods/L/K-01977.jpg

FT232RLモジュールの入手先 → http://akizukidenshi.com/catalog/g/gK-01977

私は、このプログラム一式をWindows 2000/XP環境で動作テストを行ないました。

機能すれば、Vista/7の環境でavrdudeを使ってUSBaspやAVRISP-mkIIなどを利用できます。

↓avrdudeの概要とlibusb-win32導入の注意点(avrdude-GUIの本家)
http://yuki-lab.jp/hw/avrdude-GUI/

特にVista/7をお使いの方のご協力をお願いします。(libusb-win32の不具合は解決している
と思われます)

ぜひ、試用結果をお知らせください。

libusb-win32の件
本家には、以下の記述があります。
ver 1.1.14以降なら、Vista/7でもOKということになります。

# Please use the latest release version.
# Versions up until 0.1.12.2 have serious bugs related to the filter drivers 
  under Vista and Windows 7 and some XP installations. 
  Please use later versions (1.1.14.0 or newer).
# As of version 0.1.7.10 the filters driver is installed by a user friendly 
  GUI installer which makes the install and uninstall process easier 
  and more secure.
# Log in as a user with administrator privileges. 

なお、Windows Vista/7の利用者は、絶対に、0.1.12.*版を入れてはいけません。

usbusb-win32は、最近、バージョンが1.1に変更されています。過去との決別でしょうか。

ver 1.1.14.3 2010-06-12
ver 1.1.14.0 2010-06-01
ver 0.1.12.2 2009-07-07


利用上の注意点
・複数のFT232RLモジュールを利用時のポート指定方法
複数のFT232RLモジュールを利用時はlibusb付属のTESTツールを使って、シリアル番号を
調べます。

>usbtool -v 0x0403 list <Enter> あるいは
>usbtool -V FTDI list <Enter> 
VID=0x0403 PID=0x6001 vendor="FTDI" product="FT232R USB UART" serial="A6008ixg"
VID=0x0403 PID=0x6001 vendor="FTDI" product="FT232R USB UART" serial="A1000vJn"

モジュールを特定し、ISPに利用するモジュールのシリアル番号を-P A1000vJnのよう
に指定します。

 -P シリアル番号


・libusb0.dllのインストール方法
libusb-win32は、OS毎に同じ名前の異なるDLLが提供されています。インストーラを利用す
れば適切な場所にDLLをインストールできます。そのため、libusb0.dllの添付は中止しま
した。libusb-win32をインストールしてお使いください。

├─bin
│  ├─amd64
│  ├─ia64
│  ├─w2k
│  └─x86
├─examples
├─include
└─lib
    ├─bcc
    ├─dynamic
    ├─gcc
    ├─msvc
    ├─msvc_i64
    └─msvc_x64

なおWindows環境でhidspxを利用しHIDaspxのみを使う場合には、libsubを呼び出さ
ない為、libusb-win32のインストールは必須ではありません。


FTDI BitBnagライタのソースコードを改良

  • senshu 2010-06-29 (火) 11:19:00
    私の気づいた問題点
    FT232でISP後、ISPに利用したFT232RLモジュールの仮想COMポートに接続します。
    接続自体は可能ですが、TX-RXの折り返しでテストでは何を送信しても''w''になります。
    つまり、一度ISPを利用するとシリアル通信機能は使えなくなるのです。しかし、FT232モ
    ジュールのUSBケーブルを抜差し後に再接続すると回復します。

    これは、FT232RLでは、BitBangモードに移行すると仮想シリアル機能の一部が無効になる
    ためです。そこで、ISPを完了時、FT232のBitBangモードのRESETし、通常に戻す処理を追加
    しました。この修正により、ISP完了後も正常にCOM PORTを利用でるようになりました。

    副作用を考慮する必要がありますが、動作テストに協力していただける方々のご意見を
    伺いたいと思います。

    ft245r.c 修正個所
    static void ft245r_close(PROGRAMMER * pgm)
    {
      FT_STATUS r;
    
      ft245r_ddr &=  ~ft245r_sck;
      ft245r_ddr &=  ~ft245r_mosi;
      if (pgm->exit_reset == EXIT_RESET_ENABLED) { // -E reset
         ft245r_ddr &=  ~ft245r_reset;
    
         ft245r_ddr &=  ~ft245r_rdyled;
         ft245r_ddr &=  ~ft245r_pgmled;
         ft245r_ddr_cbus &=  ~ft245r_rdyled_cbus;
         ft245r_ddr_cbus &=  ~ft245r_pgmled_cbus;
      }
      set_led(pgm);
    // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    #if !defined(USE_LIBFTDI)	// @@@ 2010/06/30 8:35:26, add by senshu
      r = FT_SetBitMode(handle, 0, 0x0); 	// reset
    #else
      r = ftdi_set_bitmode(handle, 0, BITMODE_RESET);
    #endif
      if (verbose>=1) {
    	if (r == FT_OK) {
    	  fprintf(stderr, "%s: FT_SetBitMode Reset OK\n",  progname);
    	} else {
    	  fprintf(stderr, "%s: FT_SetBitMode Reset NG\n",  progname);
    	}
      }
    // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    #if !defined(USE_LIBFTDI)
      FT_Close(handle);
    #else
      ftdi_usb_close(handle);
      ftdi_free(handle);
      handle = NULL;
    #endif
    }
    修正前の仕様では、ISPとUSBシリアル通信を交互に行うことは出来ないので、作者の
    すzさんに問い合わせ中です。
    http://suz-avr.sblo.jp/article/33907127.html?reload=2010-06-29T11:29:22

はんだ付け無しで作成できるAVRライタ

  • senshu 2010-06-30 (水) 12:09:34
    今回の修正により、FT232RLモジュールがあれば、
    ・USBシリアル通信
    ・USB I/O
    ・AVRマイコン用ISPライタ
    ・PICマイコン用ライタ(picburnを利用)
    が実現できることが確認できました。安価に完成品で購入できるモジュールが
    これほどの多用途に利用出来るのは非常に素晴らしいことです。

    FT232RL-writer1.jpg
    ◇ FT232RLモジュールとブレッドボードで作成したAVRライタの例 ◇

    なおチップ単体は@350円で入手できますが、実装が難しいので、完成品の入手を
    お薦めします。
    FT232RL.jpg

usbtoolによるUSBデバイスのシリアル番号調査方法

  • senshu 2010-06-30 (水) 18:54:43
    USBデバイスのシリアル番号を調査できるツールを追加しました。以下のコマンド
    プロンプトの入力で必要なデータ一式が得られます。以下は、三個のFTDIチップが
    接続されている場合の表示例です。

    >usbtool -V FTDI list <Enter>
    VID=0x0403 PID=0x6001 vendor="FTDI" product="FT232R USB UART" serial="A6008ixg"
    VID=0x0403 PID=0x6001 vendor="FTDI" product="FT232R USB UART" serial="A1000vJn"
    VID=0x0403 PID=0x6001 vendor="FTDI" product="FT232R USB UART" serial="A6008jnL"

  • senshu 2010-06-30 (水) 20:51:02
    avrdude-2010-0630a版から、急にサイズが大きくなりましたが、これはソース一式を
    含めたためです。内容を確認するためにも利用できますので、ご活用ください。

    追記:(7/1 10:55)
    0701以降では、avrdude-GUIのソースも添付しています。

usbtool listで何も表示されない

  • senshu 2010-07-03 (土) 11:37:00
    便利に使えるusbtoolコマンドですが、USB機器がない場合には何も表示されません。
    usbtool list
    自宅のPCで何も表示されず悩みました(修正が必要かもしれません)。

    また、hidspxコマンドでドライバのバージョンチェックには表示されます。
    ■ USB接続機器がある場合
    >hidspx -pu?
    libusb-win32 :
      DLL(libusb0.dll)    version: 1.1.14.3
      Driver(libusb0.sys) version: 1.1.14.3
    :
    ■ USB接続機器がない場合
    >hidspx -pu?
    libusb-win32 :
      DLL(libusb0.dll)    version: 1.1.14.3
      Driver(libusb0.sys) version: -1.-1.-1.-1
    Driverが有効になっていない場合には、-1の表示になります。USB機器が繋がれて
    いない場合にはご注意ください。


お名前:

YCIT版のavrdude-GUIの修正点

senshu (2010-06-28 (月) 13:04:10)

yukiさん作成のavrdude-GUIに対する、私の行った変更点です。

v1.3.0(v1.0.5版以降の変更点)

使い勝手の向上
	1. 内部動作の様子を表示する窓を新設
	2. avrdude-GUI.exeにアイコンを付与
	3. 終了時の窓の位置を記憶する
	4. Erase無しWriteボタンを廃止し、代わりにCMD Promptボタンを追加
	5. avrdude.exeファイルをドロップできる(実行ファイル名にセット)
	6. コマンド行にHEXファイルを指定できる
	6' ファイル指定なしで起動時は、最後に使ったファイル名をセットする
	7. AVRマイコンの自動認識機能
	8. プログラマ指定ボックスでは、常用するものを先頭に列挙し操作性を向上
	9. FuseCalc連携機能(完成度を向上)
	10. 起動直後は、Deviceコンボボックスをフォーカスする
	11. arduino利用時はFuseビット操作を禁止
	12. レイアウトを変更し、小さな画面でも操作可能にした

バグ修正
	1. Windows 2000環境でのDisplay Windowの不具合を修正
	2. FUSEが1個のみのAVRにも対応(AT90S4433で動作確認)
	3. フォントサイズ 120dpi時にも表示できるようにレイアウトを修正
	4. AVRISP v2利用時の不安定さを改善(待ち時間を追加)

機能追加
	1. WebブラウザによるFuse Calcサイト参照機能を追加
	2. Helpボタン追加
	3. コマンド起動の引数として、HEXファイル名(.hex, .eepなど)を指定できる
	4. HEXファイル(.hex, .eepなど)をドロップできる
	5. hidspx, FT232RL, avrispv2利用時、ポートやオプション設定を連動

機能の改善
	1. エラーチェックを強化し、重複する機能を共通化


お名前:

dude-wrapngの紹介

senshu (2010-06-27 (日) 10:32:16)

dude-wrapngとは、私が作成した「avrdudeの使い勝手を改善するツール」です。
2009年9月にdude-wrapとして公開し、avrdudeには手を加えず、Wapper方式で機能改善を
行うものでした。(当初は、avrdudeというラッパからhidspxやオリジナルのavrdudeを呼
び出す機能のみ)

dude-wrapを使ってArduino IDEを利用してみると、Arduino IDE自体にいくつかの改良すべ
き点が明らかとなり、Arduino IDE自体を改変(dude-wrapng)しました。そのため、今では
Arduino IDEを使うだけなら avrdudeをwrapする必要なありません。

しかし、AVRマイコン開発ツールの多くがavrdudeを利用していることから、avrdude自体を
改良する意味はあると判断しました。現在は、avrdudeのソースを修正し、-c hidspx
プション指定時にはhidspxを呼び出す機能を実装しました。これにより多くの開発ツールで
hidspxを利用できます。現在、評価テストを行っています(協力者を募集中です)。

avrdudeは、誕生時点ではAVRPROGという名称でしたが、Atmel社のツールとの重複を避けるた
め、AVR Downloader/UploaDErからavrdudeと命名されました。この省略には無理が
あり、作者はdudeという名前にしたかったのだと思います。dudeには色々な意味があり、私
は「都会的な」あるいは「洒落た」という意味と考えます。したがって、dude-wrapngは
「洒落た包装」の意味です(対外的にはNext Generationとしています)。

私は最近までavrdudeには魅力を感じていませんでしたが、Arduino IDEやすzさんのFTDI社
チップをサポートなどの利点を認識し、以下の内容でavrdudeの改良を行っています。

現時点でのavrdude-5.10svn YCIT版の改良点

■ 機能追加
- 5.10svnをベース(最新、かつ機能も豊富)
- すzさんの手になるFT232/245拡張を追加
- -c hidspx でhidspxを使って、R/W可能
- 付属説明書の誤記を修正
- AVRマイコンの認識結果を表示可能にした
- avrdude-GUIを用意(操作の簡便さやチップ認識機能を実現)
- サポートするAVRマイコンを追加(m168p, m88p等)
- メッセージ表示を整理
- PICkit2用のドライバを追加(ただし、まだ不完全)

もっとあったと思いますが、思い出したら追加します。


  • senshu 2010-06-27 (日) 15:31:51
    以下は、AVR-Project-IDEから、hidspxを利用する場合の設定です。avrdude自体に
    hidspxを融合させた結果、AVR-Project-IDEを全く修正することなく利用可能です。

    zoom



お名前:

AVR8_Burn-O-Matという名のavrdude用ラッパ

senshu (2009-06-26 (金) 19:35:18)

WindowsやLinuxでも使える、Javaで書かれたGUIラッパを使ってみました。

http://www.brischalle.de/avr8_burn-o-mat_avrdude_gui/avr8_burn_o_mat_avrdude_gui_en.html

これも完成度が高いです。FUSEの設定メニューも良くできています。

http://www.brischalle.de/avr8_burn-o-mat_avrdude_gui/avr8_burn_o_mat_screenshot_fuses.png
よく調べてみると、avrdudeの関連ツールは思ったよりも層が厚い気がします。

それに比べて、HIDaspxは選択の余地がない状況でしたが、徐々に充実して
きているといったところでしょうか。

でも、GUIが不要な使い勝手を実現しているのも大きな利点です。
GUIの有無に関係なく、多くのOSで容易に使える点を評価していただき
たいと思います。



お名前:

「Khazama AVR Programmer 」に感心しました

senshu (2009-05-07 (木) 23:43:20)

優れたプログラム能力のある方は違いますね。わずか2日間?で作成された
USBasp用のGUIソフトが以下から入手できます。

http://www.khazama.com/project/programmer/

avrdude-GUIと同じ目的のソフトですが、更にシンプルでコンパクトな
ものに仕上げられています。

GUIツールはこうでないと、という出来です。大変刺激になりますが、
ブラックボックスであり、私の目指すものとは大きな違いを感じます。


ver 1.6.0にバージョンアップ

  • senshu 2009-06-24 (水) 22:39:16
    2009/6/19に、Khazama AVR Programmer が ver 1.6.0にバージョンアップしています。

    avrdudeをラップするツールを手がけていますが、スマートなGUIを実現するには、多くの
    経験が必要だと感じます。その意味では、Khazama AVR Programmer は非常に上手くでき
    ています。

    avrdudeの利用者は、ぜひ一度、お試しください。

  • senshu 2009-09-11 (金) 22:05:52
    2009年7月の末には、ver 1.6.2にバージョンアップされていました。

    このGUIは、FUSE設定が丁寧に作りこんでいるので、FUSE設定値の確認にも便利です。



お名前:

avrdude-GUI(YCIT版) 2009-0626版を公開

senshu (2009-06-26 (金) 17:40:45)

avrsip-mkIIの「SCKクロックが高速設定されていた時に自動検出失敗」に対処する[Set SCK]
ボタンを右下に追加しました。認識に失敗時はこのボタンをクリックしてください。
(この認識エラーはavrisp-mkIIでのみ発生するので、他のライタでは何の処理も行いません)

■ 通常モード
avr-GUI-0501.jpg

■ modeをチェックすると小型化できます。
avr-GUI-0501-simple.jpg

ver 1.2.4 (図は1.2.3と変わりません) ⇒ fileavrdude-5.6-2009-0626.zip
↑avrdude.exe. avrdide.conf, avrdude-GUI.exeなどをセットにしました。

1. Simpleモードでも、EEPROMをサポートしました。通常の利用では、このレイ
  アウトで十分な操作が可能です。ファイル名のヒント表示(マウスカーソルで
  確認可能)も追加しました。

2. AVRISP-mkII互換のAVRminiprogではAUTO SCK機能を持っていますが、これが
   機能せず、認識に失敗した時もSet SCKのボタンで簡単に再設定できます。
   (AUTO SCK機能が上手く機能しない場合もあるようです)

3. 縮小してもある程度の操作が可能なレイアウトに変更し、窓サイズや表示位置を
   記憶する仕組みも実現しました。

4. デュアルモニタのPCで意図しない位置に表示されることがある、という報告を
   受けて、私なりにコードを書いてみました。異常な値が保存されていても、窓の
   どこかには表示されるはずです。

5. avrdude.exeでエラーが起きた時の検出を強化しました。まだ不完全な部分も
   あるとは思います。



  • Akira? 2009-06-07 (日) 10:02:00
     こんにちは。
    avrdude-GUI [YCIT ver1.2.3]と修正版avrdude.exeを使わせて頂いております。

     ライター(プログラマー)はyuki-Labさんの「USBaspの小型基板製作」でユウピット電子
    より通販にてキット購入しました。
    動作環境はWinXP sp3で、DELLのInspiron5150というA4ノートPCで開発しております。
    (開発環境はAVRStudio4.16sp1とWinAVR-20090313です)

    ターゲットは主にATMega168を使っていますが、ストロベリーリナックスさんのATMEGA
    マイコンボードキット(液晶付き)を利用しています。

     yukiさんのUSBaspは3.3V系のターゲットに対応できるということで使わせて頂いて
    おりますが、千秋さんのYCIT版avrdude-GUIの完成度は素晴らしいと思いました。
    ライターのアプリケーションはCUIのものが主流かと思いますが、開発中はクリック
    一発で書き換えができるGUIのものを探していました。

    一時期は共立電子のAVRWRT2というプログラマー(tiny2313+FT232構成)を使用しており
    まして、こちらのライター・アプリケーションも分かり易くて使いやすいものでした。
    avrdude-GUIはFuseビットがビット単位で確認できず、関数電卓を叩きながら確かめて
    いましたが、YCIT版ではFuseCalcが使え、確認が容易くなりました。

     ところで初歩的な事柄で恐縮ですが、
    Flashの"Write"とは、yuki-Lab版の"Erase-Write-Verify"と同等
    と考えて宜しいのでしょうか?

    ウィンドウに表示されるコマンドでは-eオプションがあるので、Eraseをしているように
    見えますが(ワンクリックでVerifyまで完了して欲しいのです)。

    #他にも、"verbose"チェックと"TMode"ボタンの使用用途は、どのような場合でしょうか?
    差し支えなければお教え頂けたら幸いです。

    #今回のプログラマー環境は、初めてAVRマイコン開発を習得しようと、部署内の人間を
    #集めて取りかかっていました。(不景気で休業日が多いものですから、自主的に) 
    #GUIになるだけでも見た目の敷居が下がって有り難く思います。C言語を初めて触る人間
    #も多く、道のりは長そうです。
  • senshu 2009-06-07 (日) 14:12:27
    Akiraさん、はじめまして。

    > ところで、初歩的な事柄で恐縮ですが、Flashの"Write"とは、yuki-Lab版の
    >"Erase-Write-Verify"と同等に考えて宜しいのでしょうか?

    働きは「Erase-Write-Verify」ですが、Eraseという文字が誤解を生むとの指摘
    があったことや、画面を小さくしたいということから、ボタンの表記をWriteに変更
    しました。機能は全く変りません。

    AVR studio との連携は、senshu版の方がスムーズです。また、D&Dでファイルを指定でき、
    ファイル名の窓が小さくともファイル名が確認できるなど、多くの改良を行っています。

    なによりも、AVRマイコンを自動認識し、内部動作が詳細にわかるのがよいと思っています。

    >"verbose"チェックと"TMode"ボタンの使用用途は、どのような場合でしょうか?

    avrdudeコマンドは、メッセージが多数表示される賑やかコマンドです。そのため、
    私は静かなモードで動作させています。賑やかなメッセージを見たい場合に
    verboseをチェックします。(エラーなどの発生時)

    Tmodeは、avrdudeを使って、対話処理を行う場合に利用します。avrdude -t と入力
    するのと同様です。詳細は、avrdudeのマニュアルをご覧ください。

avrdude-GUIの窓が表示されない場合がある

  • Akira? 2009-06-21 (日) 20:51:12
    こんばんは。
    上記の3番に次のような内容が書かれていますが
    「3. 縮小してもある程度の操作が可能なレイアウトに変更し、窓サイズや表示位置を
       記憶する仕組みも実現しました。」
    これらの情報は何処に保存されているのでしょうか。
    当方、2つのディスプレイで作業していまして、「avrdude-5.6-2009-0501.zip」のGUIを起動しても
    画面内から居なくなってしまう現象に遭遇しています。
    他のアプリケーションでも、ウィンドウの座標が"x=-32768, y=-32768"という風に飛んだ位置に
    記憶されてしまうものがあります。この場合はiniファイルを編集すれば戻るので修正は簡単なの
    ですが・・・
  • senshu 2009-06-21 (日) 21:14:46
    現在の版では、APP用のレジストリに記憶します。表示可能エリアかどうかをチェックして
    利用する仕様にしていますが、「他のアプリケーションで負の座標位置が保存される」のは
    不思議です。

    私の環境では2画面で動作させた時の動作チェックは不可能なので、Akiraさんにお願いが
    あります。以下のURLにはhidspx-GUIのソース一式を公開しています。

    http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2FHIDaspx_news02#o2ec2e47

    Akiraさんはソフト開発をされているとのことですから、このソースをご覧いただき、
    アドバイスを戴ければ幸いです。

    なお、このソースではウィンドウの位置は保存していませんが保存機構は同じです。
    座標位置は、どの値を保存のが良いのかをアドバイスいただければ、その値を保存する
    ように修正したいと思います。

    よろしくお願いいたします。
  • senshu 2009-06-23 (火) 10:02:03
    ちょっと混乱した書き込みになっていました。

    Akiraさんは、avrdude-GUIの利用者でしたね。hidspx-GUIは、avrdude-GUIを参考に
    作成したツールであり、avrdude用には使えません。なお、基本的なコードはほぼ同様
    なのでレジストリの操作などを、上記のコードで確認していただければ幸いです。

  • Akira? 2009-06-23 (火) 22:51:36
    こんばんは。

     ソースにて自分で確認してから報告した方が良いとは考えておりますが、
    まずはVisualStudio2008Expressをインストールしなければなりません。
    (isoはすでに入手済みなのですが・・・)

    そこで、Regeditにて該当の箇所を検索してみましたが、見つかりませんでした。
    avrやavrdudeなどのキーで検索してみたのですが。。
    やはり仰るとおり、ソースで確認した方が良いと思いました。

    現在はyukiさんのavrdude-GUIでプログラムの書込をしています。
  • senshu 2009-06-23 (火) 23:34:19
    Akiraさん、こんばんは。

    ロジックの確認ですから、エディタがあれば十分です。記憶機能を無効にするのは簡単ですが、
    私はこの機能はメリットがあると考えていますので、デュアルモニタに対応させるコードの書き
    方をアドバイスしていただければと思います。


複数モニタ対応のコードを書くには?

  • senshu 2009-06-25 (木) 08:37:02
    例によって、このサイトの情報が役に立ちそうです。

    http://dobon.net/vb/dotnet/system/displaysize.html

    今では複数のモニタがあることを想定してコードを書く必要がありますね。
    しかし、私が書いた部分を確認してみると、ということで、既に対応済でした。
    // ユーザ設定復元
      if ((Properties.Settings.Default.Left < Screen.GetWorkingArea(this).Width)
       && (Properties.Settings.Default.Top < Screen.GetWorkingArea(this).Height)) {
              this.Left = Properties.Settings.Default.Left;
              this.Top = Properties.Settings.Default.Top;
      } else {
              this.Left = 100;
              this.Top = 100;
      }
    得られた保存値が収まることを確認後にその値を反映する仕様になっていますが、これで不具合が
    起きるようなら、どう書けば良いのでしょうか。

    追記
    座標位置が負の値になることがある、という報告を参考に、負の値の時には、100という正の
    値に置き換えるように変更してみました。これで、テストを行っていただければ幸いです。
    デュアルモニタを利用している方にしかお願いできませんので、ご協力をお願いいたします。

  • Akira? 2009-06-27 (土) 14:08:14
    こんにちは。
    遅くなりましたが、早速VS2008ExpressのC#をインストールしました。

    hidspx-GUIのソース一式より、上記のウィンドウ座標を復元するコードを探してみましたが、
    見つかりません。(ソリューション全体やプロジェクトの範囲で検索を掛けているのですが)
     hidspxGUIのMainFormのコード内にも「ユーザー設定復元」はありますが、ウィンドウ座標に
    関する部分は見つけられません。

    MainForm_FormClosed内の設定保存内容は"デフォルトプログラマ","コマンドラインオプション",
    "Flashファイルパス","EEPROMファイルパス",そして"Simpleモードフラグ"と読めます。
    #もしかしたら見当違いなソースファイルを閲覧しているかもしれません。

     ところで、AVRに書込できないと困りますので、以下(別)のアプローチで回復しました。
    ウィンドウが画面外へ出てしまった場合は・・・
      1. タスクバーから画面外へ出てしまったアプリケーションをアクティブにする
      2. Alt + Space でウィンドウのメニューを出す
      3. 移動 (M) で移動を選択する(カーソルキーで選択)
      4. カーソルキーのどれかを1回押す
      5. マウスを動かす
    こうすると、マウスカーソルの座標にタイトルバーの中心座標が戻ってきます。マウスカーソル
    はディスプレイの有効範囲から外に出ることはできないようなので、ウィンドウが画面内へ強制
    的に戻ってきました。

    ちなみに、上記手順の2と3番の"ウィンドウメニュー -> 移動"はマウスでも操作できますが、こう
    するとマウスカーソルがディスプレイの左上に移動し、カーソルアイコンが移動モードに変わります。
    しかしウィンドウ自体がディスプレイ外に居るので、マウスカーソルはその場所に到達できず、
    結果タイトルバーをドラッグできない、という現象でした。

    ディスプレイはプライマリ(1024x768)がノートPCのモニタで、セカンダリ(1440x900)は外付け
    液晶モニタです。セカンダリディスプレイは拡張デスクトップとして使っていて、位置は
    プライマリの左側、恐らく座標はマイナスになるのだと思います。
    プライマリの原点を(0,0)とすると、セカンダリを左側に配置すると(-1440,0)となり、
    右側に配置すると(1024,0)となります。y座標も、整列の仕方に依っては正負どちらも
    とります。
    さらに厄介なのは、起動時のプラグアンドプレイのモニタ認識順番で配置が変化する点です。
    セカンダリディスプレイを左側に配置していても、外付けモニタの電源をPC起動後に投入する
    と右側に戻ったりします。

    このあたりの挙動が原因のような気もしますが、個人的なPC環境に依存しますので、完全な
    対応は難しいのかなとも思いました。
  • senshu 2009-06-27 (土) 14:17:21
    hidspx-GUIのソースですから、avrdude-GUIとは異なります。保存処理は、上記の様に書いています。
    ただし、処理の大半は共通ですので、動作の概要を理解するための参照してください。

    なお、マイナスの座標位置に対処したavrdude-5.6-2009-0626.zip を公開していますので、これを
    お試しください。

avrdude-GUIの窓表示位置の問題が解決

  • Akira? 2009-06-27 (土) 14:54:54
    こんにちは。勘違いしていたようです。失礼しました。

    なお、このソースではウィンドウの位置は保存していませんが保存機構は同じです。
    と書かれていますから、hidspx-GUIのソースにはウィンドウ位置は記憶しませんですね。

    avrdude-5.6-2009-0626で試してみたところ、プライマリディスプレイの範囲外座標でウィンドウ
    位置が保存された場合、次回起動時は座標(100, 100)に移動することを確認しました。座標がゼロ
    以下の値、もしくはプライマリディスプレイの右下より外側の座標でも(100, 100)に初期化されます。

    これでウィンドウを見失うことが無くなりました。どうもお手数をおかけしました。

    P.S)やはり、avrdude-GUIの使用しているレジストリキーを見つけることができませんでしたので、
    保存されている座標を確認できていません。
  • senshu 2009-06-27 (土) 15:18:13
    保存している値がプライマリディスプレーに収まらない場合には、ウインドウ位置が100, 100に固定
    されるので今ひとつかもしれませんが、通常の環境では希望とおりに機能します。もっと優れた解決策
    があるのかもしれません。デュアルモニタをお使いの方に改良案を提示していただければ幸いです。

    なお、現在配布中のhidspx-GUI.exeはウインドウの終了時の座標位置を記憶しません。
    hidspxGでは終了時のウインドウ位置を記憶しますが、今回の結果を考えると、avrdude-GUIと同様
    の改良が必要になると考えます。

    P.S)やはり、avrdude-GUIの使用しているレジストリキーを見つけることができませ
    んでしたので、保存されている座標を確認できていません。

    avrdudeやavrの文字が含まれるとは限りませんので、↓のソースを元に判断ください。
    // ユーザ設定復元(負の値に対応)
      if (Properties.Settings.Default.Left < 0)
        this.Left = 100;
      else if (Properties.Settings.Default.Left < Screen.GetWorkingArea(this).Width)
        this.Left = Properties.Settings.Default.Left;
      else
        this.Left = 100;
    
      if (Properties.Settings.Default.Top < 0)
        this.Top = 100;
      else if (Properties.Settings.Default.Top < Screen.GetWorkingArea(this).Height)
         this.Top = Properties.Settings.Default.Top;
      else
         this.Top = 100;


お名前: