FT232RLモジュールの実験 2007.10.07(日)〜![]()
2009.08.24(月) PIC16F887を追加しました。 ConfigのR/Wを2ワードに拡張。 バルク消去前の0xFFの書込みをスキップするように変更。 2009.06.05(金) AVR専用基板を製作しました。 書き込み、読出しの制御信号とターゲットへの電源供給電圧を、ジャンパーピンを差 し替る事で3.3V又は5Vに切換えられるようにしました。 AVR専用回路図です。 3.3Vはロードロップアウト3端子レギュレータを使ってUSBの5Vから生成します。2008.11.11(火) AVR/PIC兼用 ROMライターにATmega88,ATmega644,ATmega164のR/Wを追加しました。 これまでに対応したデバイス ATMEL ATtiny26L ATtiny2313 ATmega8 ATmega88 ATmega64 ATmega644 ATmega128 ATmega164 AT90S2313 AT90S8515 AT90S8535 Microchip PIC12F675 PIC16F84A PIC16F873 PIC16F874 PIC16F876 PIC16F877 2008.01.10(木) AVR/PIC兼用 ROMライター基板で、PIC12F675とPIC16F84Aの書込みと読出し動作を確認 しました。 ROMライター回路図 2008.01.08(火)
AVR/PIC兼用 ROMライター基板を製作しました。切削基板です。 FT232RL ICは、半田面のUSBコネクターの斜め上にあります。 ATtiny2323への書込みと読出しが出来ました。 2007.11.12(月)
OUTPUT機能を追加しました。 操作: 1) テキストボックスに1バイトの16進数を入力。 2) [OUTPUT]をクリックする毎に、入力したデータをターゲットマイコンへ 送信します。 マウス左ボタンオンでラベルの文字が赤色に変化、オフで黒に戻ります。 OUTPUTデータの利用例: ターゲットマイコンに、受信したデータを利用するプログラムを実装します。 ターゲット用テストプログラム仕様 1) 受信データをPORTBに出力 2) PORTBの出力値をループバック ;============================================================= main10: in tx_buf,PORTB ; PORTBの出力データをループバック rcall tr_data_out ; 受信データ処理 rjmp main10 ; ループ ;============================================================= ; OUTPUTデータの処理 ;============================================================= tr_data_out: sbrs tr_flg,TR_OUTP_DATA_SET ; OUTPUTデータ有り? ret ; No。終了 // ----------------------------- // ここに受信したデータの処理を記述 // ----------------------------- out PORTB,rx_buf ; 受信データをPORTBに出力 // ----------------------------- // ここまで // ----------------------------- // OUTPUTデータ有りフラグをリセットして終了 cbr tr_flg,(1<<TR_OUTP_DATA_SET) ; フラグリセット ret ;============================================================= テスト結果:
0x01→0x00を順にOUTPUTすると、PORTBのビット0が変化します。 INPUTにループバックしたデータが表示されます。 2007.11.11(日)
1) トレースのグラフ表示をスィープ方式からロール方式に変更。 波形が左方向に流れます。 2) バイトデータのグラフオン/オフのチェックボックスを追加。 3) バイトデータの縦軸倍率設定用のcomboBoxを追加。 X0.125, X0.25, X0.5, X1, X2, X4, X8, X16, X32の9種類、標準はX0.25です。 4) サンプルレート選択用のcomboBoxを追加。 数値は概ねmsec単位。 -は1サンプル毎の遅延が無く、WindowsXp Pentium4 3.01GHzでは サンプルレート10とほぼ同じです。 これは、 1. 1データ読み出しコマンドの発行 2. 読み出し 3. グラフ表示 を繰り返す為、1ループの処理時間に依存しているようです。。 横軸分のデータを一括で読み出し、一括で表示するとサンプルレートが短縮 できそうでが、ロール上に連続した表示が難しくなります。 2007.11.09(金) トレースモニターを追加しました。
ターゲットマイコンから1msecごとのカウンター値1バイトを読み出して グラフィック表示しています。 上からビット毎の変化を、一番下は1バイトの数値変化のグラフです。 2007.11.08(木)
ターゲットAVRマイコンのクロック選択に8MHZと16MHzを追加しました。 Read/Writeが安定するクロック周波数を選択します。 | 書込み | ターゲット | クロック幅 | マイコンの 選択 | Hi | Lo | 使用クロック ------+-------+-------+--------------- 1MHZ 4.8 4.8 0.41MHz以上 4MHz 1.2 1.28 1.67MHZ以上 8MHz 0.48 0.48 4.17MHz以上 16MHz 0.20 0.24 15.00MHz以上 クロック幅単位:usec 8MHz,16MHz用にATtiny2313のUSI(多用途シリアルインターフェース)を 使用してみました。 PIC系は、ターゲットマイコンの使用クロックに依存しない為、 クロック選択はディセーブルです。 2007.11.05(月) AT90S8515、AT90S8535のRead/Writeに対応しました。 Read/Write実行時間 Size | Read | Write -----------+--------+--------- ROM 8K | 3.38 | 60.60 EEPROM 512 | 0.07 | 4.47 LOCK BIT 1 | 0.09 | 0.18 単位:sec *AT90S8535はターゲットデバイスのGND配線の引き回しで、 Read/Writeが安定しました。 2007.11.04(日) PIC16F873,874,876,877のRead/Writeに対応しました。 Read/Write実行時間 Size | Read | Write Device ----------+--------+---------+------------------------ ROM 16K | 1.63 | 124.09 PIC16F876,PIC16F877 ROM 8K | 0.09 | 42.85 PIC16F873,PIC16F874 CONFIG 2 | 0.06 | 0.08 単位:sec ROM 8KのR/W確認はPIC16F877で代用しました。 2007.11.02(金) PIC12F675のRead/Writeに対応しました。
Read/Write実行時間 Size | Read | Write ----------+--------+--------- ROM 2K | 0.25 | 11.00 CONFIG 2 | 0.04 | 10.60 CALIB 2 | 0.10 | 10.40 単位:sec ROM書込み: 1. CALIBRATIONデータは、バルク消去前に読み出して保存しROM書込みの時に書き 戻します。 2. BAND GAPデータは、ROM消去前のCONFIGの値を書き戻します。 3. プログラムで定義したCONFIG値は、BAND GAP部分をも書込みます。 CONFIG書込み: 1. ONFIG書込みには、バルク消去されたROM 2Kバイトの書き戻し時間が含まれま す。 2. BAD GAPデータを含めた、CONFIG WORDの全ビットの書き換えが可能です。 CALIBRATION書込み: CALIBRATION書込みには、バルク消去されたROM 2Kバイトの書き戻し時間が含ま れます。 2007.10.29(月) PIC16F84AのRead/Writeに対応しました。 Read/Write実行時間 Size | Read | Write ----------+--------+--------- ROM 2K | 0.22 | 10.07 CONFIG 2 | 0.05 | 0.07 単位:sec Write時間には、ベリファイ時間が含まれます。 HEXファイル中のCONFIGデータはROMと一括で書込みます。 2007.10.27(土) ターゲットマイコンのクロック選択用comboBoxを追加しました。
Read/Write実行時間の比較 | READ | WRITE SIZE | 1MHz | 4MHz | 1MHz | 4MHz ----------+-------+-------+-------+------- ROM 128K | 48.91 19.93 | 99.19 39.03 EEPROM 4K | 2.15 1.40 | 51.56 49.60 単位:sec ROMのページバッファー書込みと、EEPROMのバイト書込みの違いで、 WRITEの4MHzで書込み時間が逆転しました。 Write時間には、ベリファイ用のRead時間を含みます。 2007.10.26(金) AT90S2313のRead/Writeに対応しました。 読出し/書込み時間 DVICE SIZE READ WRITE ----------+------------+----------+---------- AT90S2313 ROM 2K 1.28sec 16.06sec EEPROM 128 0.56sec 1.47sec 2007.10.25(木) ATmega64,ATmega128のRead/Writeに対応しました。 読出し/書込み時間 DEVICE SIZE READ WRITE ----------+-----------+----------+----------- ATmega64 ROM 64K 32.03sec 50.06sec EEPROM 2K 1.56sec 21.97sec ATmega128 ROM 128K 48.91sec 99.19sec EEPROM 4K 2.15sec 51.56sec FUSE,LOCK BIT,CALIBRATION,SIGNATUREの読出し/書込み時間は、ATmega8とほぼ 同じです。 ターゲットマイコンのクロックを工場出荷時の内臓RC発振周波数=1MHzに合わせてあ ります。 クロック8MHz用に書き込みのクロック幅を適合させると、アクセス時間の短縮が可能 です。 GUIから書き込み用クロック幅の選択が出来るようにしたいと思います。 128KバイトIntel Hexファイルに対応する為、セグメント処理を追加。 セグメントレコードなら、4文字データを2バイトの16進数に変換後、左に4ビット シフトしてセグメント値とします。 セグメント値とアドレスオフセットの和が実アドレスで、2^20=1Mバイトまで対応 可能です。 private int file_read(String open_type) { ..... if (rec_type == 0x02) { // セグメントレコードなら segment = hex2int(input.Substring(9, 2)) * 256; segment += hex2int(input.Substring(11, 2)); segment <<= 4; } ..... } 2007.10.24(水) ATmega8のRead/Writeに対応しました。 読み出し/書き込み時間(Vccオンからオフまで) 項目 読出 書込 備考 ------------+-----------+-----------+------------------------------ ROM 8K 3.14sec 6.56sec ページ書き込み EEPROM 512 0.272sec 5.40sec バイト書き込み FUSE BIT 90msec 36.8msec 書込[OK]釦押しからVccオフまで LOCK BIT 92msec 41.2msec 書込[OK]釦押しからVccオフまで CALIBRATION 41.2msec - SIGNATURE 41.2msec - 書き込み時間にはベリファイチェック時間を含みます。 2007.10.23(火) ATtiny26LのRead/Writeに対応しました。 Read/Writeルーチンの共通化の為、parameter_set()関数でデバイス毎にタイミング やバイトサイズ等を取得します。 //------------------------------------------ // パラメータ設定 // 2007.10.22(月) //------------------------------------------ private void parameter_set() { switch(comboBox2.Text){ case "ATtiny26L": Rom_size = 2048; Eep_size = 128; Page_size = 16; Fuse_size = 2; Fuse_ext = false; Twd_fuse = 5; Twd_flash = 5; Twd_eeprom = 10; Twd_erase = 10; Twd_lock_bit = 20; break; case "ATtiny2313": Rom_size = 2048; Eep_size = 128; Page_size = 16; Fuse_size = 3; Fuse_ext = true; Twd_fuse = 5; Twd_flash = 5; Twd_eeprom = 5; Twd_erase = 5; Twd_lock_bit = 20; break; } } Windows Appで通信ポートのオープンに失敗した時の処理を追加しました。 try { serialPort1.Open(); } catch (IOException) { MessageBox.Show("通信ポートのオープンに失敗しました", "CAUTION"); serialPort1.Close(); return; } 2007.10.22(月)
ROMライターデバッグの様子です。 上 :FT245RLを使ったROMライター。 下左:FT232RLモジュール。 下中:ATtiny2313 ROMライター用マイコン。 下右:ATtiny2313 読み・書き評価中のマイコン。 ブロック図 FT232RL ライター用 読み書き評価用 PC モジュール ATtiny2313 ATtiny2313 ┌─────┐ ┌───┐ ┌─────┐ ┌───┐ │Windows XP│USB │ TXD├──┤RXD PB4├──┤RESET │ │ ├──┤ RXD├──┤TXD PB3├──┤Vcc │ │ VC# App │ │ RTS├──┤CTS PB2├──┤CLK │ │ │ │ CTS├──┤RTS PB1├──┤MOSI │ │ │ │ │1M │ PB0├──┤MISO │ └─────┘ └───┘ボー└─────┘ └───┘ CLOCK=8MHz CLOCK=1MHz/8MHz 2007.10.21(日)
ATtiny2313のRead/Writeが出来るようになりました。 ROM :R/W EEPROM :R/W FUSE :R/W LOCK BIT :R/W CALIB :R only SIGNATURE:R only [POW ON]釦を追加。ターゲットへのVccオン・オフとRESETオン・オフを操作し、 ROM書き込み後にデバッグを行います。 2007.10.17(水) フラッシュROMライターのGUIです。
ROMデータ2048バイト分のCLK、MOSI、MISOの出力所要時間は、 書き込み:1.09sec 読み出し:0.496sec です。 電源やリセットの制御が未対応のため、実際の書き込みや読み出しは出来ません。 2007.10.13(土) ステッピングモータを回しました。 Win App
設定 SLA7078 :16分割マイクロステップに設定 モータ電流 :2.03Aに調整(=0.315V/0.155Ω) モータ用電源:24V モータ :2相ユニポーラステッピングモータ。200ステップ/回転。 信号系統 :Win App → FT232RL → ATtiny2313 → SLA7078 → モータ 動作概要 1) Win Appでステップパルス、回転方向(CW/CCW)、パルス周期時間、逓倍数などの データを生成します。 2) 生成したデータをFT232RLを経由してATtiny2313に送信します。 3) ATtuny2313のSRAMをリングバッファー(120バイト)構成にし、受信したデータを 一時的に蓄えます。 4) リングバッファーからパルス周期時間ごとにデータを取り出し、PORTBへステップ パルスと回転方向信号を出力します。 5) ステップパルス数の逓倍処理をATtiny2313が実行します。 最高回転数 Win Appのフォーム内でマウスカーソル操作をしてもモータの回転に影響しない回転 数です。 逓倍数 RPM --------+-------- 1 85 2 180 4 360 8 800 16 1600 2007.10.11(木) ボーレート1MでFT232RLからATtiny2313へデータを転送しました。
PB0の出力波形。 ┌─┐ ┌─┐ ┌─┐ ─┘ └─┘ └─┘ └ →│ │←10usec 0xFFと0x00を交互に格納した256バイトの配列データを送信。 ATtiny2313は、1バイト受信ごとに受信データをPORTBへ出力。
256バイト分のPORTB出力波形。 ┌─────┐ ──┴─────┴── →│ │←2.56msec
FT232RLがループバックで受信したデータです。 通信設定 スタートビット = 1ビット ストップビット = 1ビット データビット = 8ビット ボーレート = 1Mボー フロー制御 = RTS・CTSハンドシェークなし 1バイト送信時間 = (8+2)×1/1M=10usec でPB0の出力パルス幅と一致します。 256バイト送信時間 = 256×(8+2)×1/1M=2.56msec で測定値と一致します。 回路 FT232RL モジュール ATtiny2313 ┌───┐ ┌───┐ │ │1 2│ │ │ TXD├──●────┤RXD │ │ │ │ │ │12 ┌─┐ ┌─┐ │ │5 │ │ PB0├── ┘ └─┘ └ │ RXD├──┘ │ │ │ │ │ │ └───┘ └───┘ ATtiny2313の設定 内臓RC発振周波数=8MHz。クロック分周比=1/1。 高速通信モード(U2X=1)に設定。 UBRR設定値=8MHz/8/1Mbaud-1=0。 2007.10.10(水) ハイパーターミナルでループバックテストをしました。
ハイパーターミナルのプロパティ 接続の設定 接続方法 :COM7 モデムの構成 ビット/秒 :9600 データビット :8 パリティ :なし ストップビット:1 フロー制御 :ハードウェアー 設定 ASCII設定 ASCIIの送信 :[レ]行末に改行文字を付ける エンコード方法 ホストシステムエンコード方式を選択 :(●)Shift-JIS 2007.10.09(火) モジュールのCTSピンの半田付けテンプラで、serialPort1.CtsHoldingが常時false。
半田付け修正後のserialPort1.CtsHoldingの値 CTS# CtsHolding値 ------+---------------- 1 false 0 true RTSハンドシェークモードでループバックテストに成功しました。 //------------------------------------------ // startイベント //------------------------------------------ private void startSToolStripMenuItem_Click(object sender, EventArgs e) { // OCM7指定 serialPort1.PortName = "COM7"; // シリアル通信を開通 serialPort1.Open(); // RTSハンドシェークモード設定 serialPort1.Handshake = Handshake.RequestToSend; // CTSモニター listBox1.Items.Add( serialPort1.CtsHolding.ToString()); // 文字列送信 serialPort1.Write("Hello world!!\n"); // 文字列受信 listBox1.Items.Add(serialPort1.ReadLine()); // シリアル通信閉鎖 serialPort1.Close(); } 回路 FT232RL モジュール ┌───┐ │ │1 │ TXD├──┐ │ │ │ │ │5 │ │ RXD├──┘ │ │ │ │3 │ RTS#├──┐ │ │ │ │ │10 │ │ CTS#├──┘ └───┘ 2007.10.08(月) ループバックテストです。
[start]メニューをクリックする毎に"Hello world!!\n"を送信。 ループバックで受信し、serialPort1.ReadLine()で"\n"(改行コード)までの文字列を 読み込み、リストボックスへ表示します。 //------------------------------------------ // startメーニュークリックイベントの実行 // 2007.10.07(日) 作成開始 // 2007.10.08(月) ループバックテスト //------------------------------------------ private void startSToolStripMenuItem_Click(object sender, EventArgs e) { serialPort1.PortName = "COM7"; serialPort1.Open(); serialPort1.Write("Hello world!!\n"); listBox1.Items.Add( serialPort1.ReadLine()); serialPort1.Close(); } 回路 FT232RL モジュール ┌───┐ │ │1 │ TXD├──┐ │ │ │ │ │5 │ │ RXD├──┘ │ │ └───┘ 2007.10.07(日)
FT232RLモジュールにUSBケーブルを挿入すると、新しいデバイスが検出されたあと、 自動的にFT245RLの実験でインストールしたドライバーが選択されます。 デバイスドライバー:CDM 2.00.00 デバイスマネージャーです。
COM5=FT245RLモジュールを接続しています。 COM7=FT232RLモジュールを接続しています。 VC#の「ツールボックス」「コンポーネント」の「SerialPort」をフォームにドラッグ &ドロップすると、シリアル通信(RS232Cプロトコル)が使えるようになります。 フォームをデザインして
以下のプログラムを書いて、ビルド、デバッグ実行、 [start]メニューをクリックすると、TXD端子に接続したLEDが一瞬点灯します。 //------------------------------------------ // startメーニュークリックイベントの実行 // 2007.10.07(日) //------------------------------------------ private void startSToolStripMenuItem_Click(object sender, EventArgs e) { serialPort1.PortName = "COM7"; serialPort1.Open(); serialPort1.Write("Hello world!!"); serialPort1.Close(); } SerialPort1のプロパティは ボーレート :9600 ストップビット:1 Rts、Dtr :False 回路 FT232RLモジュール ┌───┐ │ │1 ┌┬─┐ │ TXD├──┤│<├──R1.5K─── VCC(5V) │ │ └┴─┘ └───┘ LED
ページのTopへ
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合に複製が可能です。