Insight-Pro™


EE101 Insight-Pro™ ユーザーズ・マニュアル

 

EE101 Insight-Pro™について知る

実践的なケース・スタディ



システム概要




EE101 Insight-Pro™ は最新技術を使った組み込みファームウェア・システムをデバッグするのに最適なツールです。 これにより設計作業を明確、且つ、簡潔に把握できるためバグを素早く見つけて修正できます。  ロジック・アナライザのデジタル・データ、オシロスコープのアナログ・データ、I2C、SPI、及び、UARTデコード・データと新しい EE101インターフェイスをキャプチャして表示します。  EE101 Insight-Pro™ はシンプルな"printf"の様なコールを 使用してファームウェアにシンプルな1-wire(UART)、又は、2-wire(GPIO)インターフェイスを使用します。  これは外部バスに含まれていないデータにアクセスすることができ内蔵のファームウェアだけが知っている内部情報が表示されます。  また、データをディスクにストリーミングすることでキャプチャを引き継ぎ、難解なバグを確実に取り込むことができます。

EE101 Insight-Pro™ポッドはUSBケーブルを使用してコンピュータに接続するボックスです。  また付属のテスト・リードとクリップを使用してテスト中の回路に接続します。  その後、マイクロプロセッサはEE101 Insight-Pro™ソフトウェアを使用して表示されるデバッグ情報を送信します。

 

EE101 Insight-Pro™ EE101 Insight-Proはロジック・アナライザのデジタル入力、オシロスコープのアナログ入力、I2C、SPI、UARTデコードデータと 新しいEE101 Insight-Pro™バスをキャプチャできます。



EE101バス




EE101バスを介してキャプチャされるデータには2つのタイプがあります; EE101 TextEE101 Value (標準的なロジックとアナログ入力)

EE101 Textは文字列であり従来の"printf"出力と同じです。  それらは時間とともにグラフ化され垂直にリストされます。

各デバッグ・テキスト出力は次のような単純なソースコード行によって作成されます:

又は、

EE101 Valueはデータの視覚的プレゼンテーションのために時間に対してグラフ化された値のデータです。

波形上の各データ・ポイントは次のような単純なソースコード行によって作成されます:

EE101TextLabelとEE101ValueLabel関数を呼び出すことにより各ウェーブラインの左側のラベルをファームウェアからセットすることもできます。  帯域幅を使用せずディスプレイ上で定期的に更新するためにこれらの関数はこのルーチンが呼び出されるたびにラベルを256回送信します。

 



1-Wire(UART)、又は、2-Wire(GPIO)モードを選択




EE101バスは1-Wire、又は、2-Wireバスにすることができます。 あなたの設計と利用可能なリソースに応じていずれかのインターフェイスを選択できます。

以下は2つの利用可能なモードの概要です。 

  1-Wire UARTモード 2-Wire GPIOモード
使用されるプロセッサのピンの数 1 2
プロセッサ上にUARTが必要  
GPIOピンが必要(出力のみ使用)  
最大ビット・レート 3MBaud(自動ボー検出) 10MHz clock
プロトコル 非同期シリアル N, 8, 1 同期クロックとデータ
EE101接続 Device A[デバイスA]ではピン0
Device B[デバイスB]ではピン2
Device A[デバイスA]ではピン0,1
Device B[デバイスB]ではピン2,3


代表的なアプリケーション




EE101 Insight-Pro™ は1つのソースライン変更と 1度ボタンを押すと自動的に表示されます:

  • I2C、又は、SPIバスから読み取った加速度計データは時間とともにグラフ化

  • 土日も温度データ測定可能

  • 長時間動作時のバッテリ電圧

  • 受信した各パケットのRSSI値を時間とともにグラフ化

  • 周波数ホッピング中の送信チャンネル周波数

  • システム状態、メモリー・レベル、FIFOの深さ、又は、ビットエラーが時間とともにカウント

... そして、値、結果、情報メッセージ、エラー状態、センサー・データ、リンク状態、 ボタン押下等々の他のファームウェアの知識



ソフトウエアをインストール




コンピュータにEE101 Insight™ソフトウェアをインストールするには以下からインストールパッケージをダウンロードする必要があります。

常に最新のバージョンをご使用下さい。

Windows版ダウンロード- Windows Vistaと7ではインストールの後、実行出来るディレクトリから ドライバをインストールすることが出来ます。Windows 8とそれ以降ではドライバは必要ありません。

MAC OS X ダウンロード - OS Xはドライバを必要としません。

3.10 - リリース・ノート

  • I2C反転信号検出
  • I2Cデコードの改善
  • ロジック・ライン上の弱いプルアップを削除

3.9 - リリース・ノート

  • トレース毎の自動微分キャリブレーション
  • 手動キャリブレーションの追加

3.8 - リリース・ノート

  • 自動電流測定ダイアログ
  • アナログ・チャネル・スケーリング、オフセット、及び、ユニットのカスタマイズ
  • アナログ平均レベル測定
  • デバイスBでのUART hexのバグ修正

3.7 - リリース・ノート

  • 高分解能差動アナログ入力を追加

3.6 - リリース・ノート

  • Macでのファームウェアのダウンロードの改善
  • ライブ・キャプチャ中に最新のリストデータを表示
  • カラー・スキームを通して前後にスクロールするためのF5/F6

3.5 - リリース・ノート

  • ロジックとアナログ・チャンネルのライブ・リーディングを常に表示
  • 計算されたボーレートを表示
  • リスト・ビューでのオプションのタイム・スタンプ
  • 高速ボーレートに対するUARTボーレート検出の改善
  • ナビゲーション・コントロールの改善

3.4 - リリース・ノート

  • UART(ASCII)とUART(Hex)モードを追加
  • 新しいキャプチャ波形をスクロールしている間にリスト・ビューをスクロール
  • 長いI2Cパケットに対するI2Cデコード改善


ハードウェアの接続




EE101 Insight-Pro™をコンピュータに接続するには、同梱のUSB A to micro-Bケーブルを使用し使用可能なUSBポートに接続します。  コンピュータは適切なドライバ(CDC USB Comポート・ドライバ)を検索してインストールします。  以前のWindowsバージョン(Vista, 7)ではインストールしたDriversディレクトリに含まれているものを使用してドライバを更新する必要があります。  ユーザーの回路がUSB経由で同じコンピュータに接続されている場合は、それが別のUSBポート(パワー・ハブ)であることを確認してください。

EE101 Insight-Pro™をターゲット・デバイスに接続します。  以下はEE101 Insight-Pro™ポッドのピン出力配置です。

ラベル 

  • GND - この信号を回路のグランドに接続する必要があります。  これはデバイス全体のリファレンス0レベルを提供します。
  • デバイスAの入力は青色で表示され、デバイスBの入力は黄色で表示されます。
  • EE101デバイス入力 - 各デバイス(A、又は、B)は通信に1(UART)、又は、2(GPIO)信号を使用します。  1-wireモードではデバイスAのチャネル0に接続し、そして、デバイスBのチャネル2に接続します。  2-wireモードでは各デバイスの2つの信号が自動的に決定されスワップされるためどちらの信号がどれかを判断する必要はありません。
  • I2C入力 - クロック(SCL)とデータ(SDA) 
  • SPI入力 - Select(SS#), Clock(SCK), Output(MOSI)とInput(MISO).  両方のデータラインは、実際にはEE101デバイスへの入力です。 
  • UART - 1と2チャネル  各デバイスに対して1つ、又は、両方を同時に使用できます。
  • デバイスA、又は、デバイスBで使用されていないチャネル(ロジックに設定)は汎用ロジック・アナライザの入力になります。
  • Analog In 1と2 - アナログ入力チャネル
  • Analog Out 1 - アナログ出力チャネル(AWG)

付属のテスト・リードの色は殆どラベルの色にマッチした色を持っています。  これらの色はソフトウェア・ディスプレイ上の色と一致するので重要です。  リードをEE101 Insight-Pro™に接続するには, ワイヤの角の端をEE101上部スロットを通してEE101 Insight-Pro™内部のピンに接続します。  次にクリップを使用して測定したいユーザー回路IC、ヘッダー、又は、分離したコンポーネントに接続します。  ボードを設計する余裕がある場合、GNDと2つのEE101信号に簡単にアクセスできるように3ピン・ヘッダーを置くことができます。



スペシフィケーション




以下はEE101 Insight-Pro™システムの技術仕様です。

EE101デバッグ・ポートの数:2(デバイスAとデバイスB)
EE101デバッグ・ピン/ポート: 1(UART)、又は、2(GPIO - 1クロックと1データ)
EE101デバッグ・ポート入力範囲: -0.5 〜 7.0V
EE101デバッグ・ポート・ロジック・スレッショルド: 0.1Vヒステリシスで0Vと4V間可変
EE101デバッグ・ピン駆動電流: 1mA
EE101デバッグライン入力インピーダンス: >10K ohm || 10pF
EE101デバッグ・ポート1-Wireモード: 非同期 N, 8, 1. 3MBaud迄の自動ボー検出
EE101デバッグ・ポート2-Wire最大クロック周波数: 10MHz
EE101デバッグ・ポート最大テキスト・デバッグ・メッセージ長: 250文字
EE101テキスト・チャネルのデバッグ・ポート数: 8/デバイス
EE101データ・チャネルのデバッグ・ポート数: 8/デバイス
EE101デバッグ・ポート・データ・チャネル出力値: --2,147,483,648 - 2,147,483,647
EE101デバッグ・タイムスタンプ分解能: 1us

I2C 最大クロック・レート: 10MHz
I2C 最大ポート: 2
I2C 必要な信号: SCLとSDA
I2C 入力範囲: -0.5 - 7.0V
I2C ロジック・スレッショルド: 0.1Vヒステリシスで0Vと4V間可変
I2C 入力インピーダン: >10K || 10pF
I2C 最大データ転送サイズ デコード/トランザクション: 56 bytes

SPI 最大クロック・レート: 10MHz
SPI 最大ポート: 2
SPI 必要な信号: SS, SCKと少なくとも1データライン
SPI 入力範囲: -0.5 to 7.0V
SPI ロジック・スレッショルド: 0.1Vヒステリシスで0Vと4V間可変
SPI 入力インピーダン: >10K || 10pF
SPI 最大データ転送サイズ デコード/トランザクション: 250 bytes
SPI ポラリティ・セッティング: SCKサンプル・エッジの立ち下がり、又は、立ち上がり、SSアクティブロー
SPI データ・チャネル数: 2, MOSIとMISO

UART 最大ボーレート: 3Mbaud
UART ボーレート選択方法: オートボーがボーレートを自動的に決定
UART セッティング: 8 Data Bits, No Parity
UART 入力範囲: -0.5 - 7.0V
UART ロジック・スレッショルド: 0.1Vヒステリシスで0Vと4V間可変
UART 入力インピーダン: >10K || 10pF
UART 最大データ転送サイズ デコード/トランザクション: 250 bytes
UART データ・チャネル数: 2, TxとRx

Logic Analyzer 入力: 最大8.  各EE101デバッグ・ポートに2つの入力が使用されます。
Logic Analyzer 入力範囲: -0.5 to 7.0V
Logic Analyzer スレッショルド: 0.1Vヒステリシスで0Vと4V間可変
Logic Analyzer 入力インピーダン: >10K || 10pF
Logic Analyzer サンプル・レート: 最大90kサンプル/秒  サンプルは他のEE101デバッグ・データが利用できないときに採取されます。

Analog 入力: 2
Analog 入力タイプ: 2 Single Ended or One High Resolution Auto Scaling Differential Input
Analog シングル・エンド入力範囲: 0V to 5V measurable. -0.5 - 7.0V tolerant.
Analog シングル・エンド測定分解能: 1.22 mV
Analog シングル・エンド入力インタフェース:     180K ohm || 1pF
Analog 差動入力範囲: +/- 2.048 V measurable. CM 0V - 5V.
Analog 差動測定分解能: 15.6 uV
Analog 差動入力インピーダンス:     1M ohm || 1pF
Analog サンプル・レート: 最大90kサンプル/秒  サンプルは他のEE101デバッグ・データが利用できないときに採取されます。

サイズ: 2.75" x 1.5" x 0.6"
パッケージ: カスタム・デザインABSプラスティック
過電流保護: リセッタブルPOLY-FUSE
コンピューターへの接続: USB Full Speed A to micro-B cable(付属)
テスト・リードとクリップ: 10ミニグラバ・テスト・クリップ付リード(付属)

キャプチャー中のサンプル・ストレージ場所:  ディスク・ドライブ
最大サンプル数: ディスクドライブのストレージ容量の上限まで無制限
最大データ転送レート: 500,000 bytes[バイト]/秒(全チャネルがキャプチャされている場合)

サポートOS:  Windows Vista, 7, 8.x, 10, 32と64 bit, Mac OS X. 



ソフトウエア操作




EE101 Insight-Pro™ソフトウェアは組み込みシステムから取得したデータを実行して表示します。  ソフトウェアは次の状態になりデータをキャプチャして視覚化する準備が整います。

キャプチャー

回路から データをキャプチャするには、EE101 Insight-Pro™がUSB経由で接続されていることを確認しキャプチャ・ボタンを押します。  キャプチャされているデータがスクロールして表示されます。 

キャプチャする前にキャプチャするデータを選択できます。 デバイスA、又は、デバイスBがキャプチャするデータのタイプを選択します。

デバイスAとデバイスBに対して利用出来るデバイス・キャプチャ・タイプ:

  • Logic Inputs
  • EE101 Data (1-Wire Mode)
  • EE101 Data (2-Wire Mode)
  • I2C
  • SPI Rising or Falling Edge Clock
  • UART (ASCII)
  • UART (Hex)

ポッドがビジーでなくEE101データを読み取っている時に2つのアナログ入力チャンネルを測定するためにAnalog Listbox[アナログ・リストボックス] をオンにします。 2つの独立した0-5V入力、又は、1つの高分解能自動スケーリング差動入力のいずれかを選択します。  ポッドがEE101データを読み取ってビジー状態でない時にロジック・アナライザ信号のデジタル・レベルをキャプチャするためにLogic Checkbox[ロジック・チェックボックス]を チェック 以下は2つのアナログ入力をキャプチャするトレースです。

デバイスAとBのバスのタイプを変更はEE101が新しいコンフィギュレーションをデバイスにダウンロードする間に短い遅延が必要になることがあります。   キャプチャ・ボタンを押すとダウンロードが行われます。 

ロジック」電圧スレッショルドレベルはボタン」右で使用しているロジック・ファミリ(1V?5V)を選択することによっても選択できます。  このレベルはEE101デバイス入力同様にロジック・アナライザ入力に影響します。

キャプチャが進行中であればキャプチャされている間にスクロールして表示できます。  全てのデータがディスク(Users/AppData、又は、Users Libraryディレクトリ)に継続的に格納されていることに注意してください。  キャプチャ中にキャプチャされたバイトの総数が下部に表示されます。

古くて低速なコンピュータや低速のディスクドライブを使用している場合は、リアルタイム・ビューをアクティブにしないでデータをキャプチャするために Live Checkbox[ライブ・チェックボックス]をオフ[アンチェック]にします。  これによりデータを落とすことなくキャプチャが可能になります。

使用されている信号とチャンネルのみが自動的にディスプレイに表示されます。  従って、ファームウェアが1つのチャネルのデータのみを出力する場合、 そのチャネルのみが表示されます。  これにより表示される破線の設定が不要になります。  アナログを選択すると2つのアナログ入力が自動的に表示します。  ロジックを選択するとロジック・アナライザ入力が自動的に表示します。

好みの十分なデータを収集した時に、同じボタン(今はStop[停止]と表示されています)を押してキャプチャを終了します。 

キャプチャをもう一度押すと前のキャプチャが消去され新しいキャプチャが開始されます。

トレースをナビゲートする

トレースを取得したらトレースを様々な方法でナビゲートできます。 

1つのウィンドウでトレース全体を表示するには、Zoom All[全てズーム]ボタンを押します。  これはタイムライン上の最初のサンプルから最後のサンプルまで全てのデータに収まるようにデータがスケールします。

Zoom Cursors[ズーム・カーソル]ボタンを押すと2つのカーソル間のデータが拡大表示されます。

データをズームイン、又は、ズームアウトするには波形の上にマウスを置いてマウスのスクロールするか、 又は、トラックパッド上で2本の指で上下にスクロールします。  

波形を左、又は、右にパンするには、マウスで波形をクリックしてドラッグするか、又は、トラックパッド上で2本の指で横にスクロールします。

遠距離をパンするよりもズームアウトして戻す方がはるかに迅速です。

左側のタブをクリックしてドラッグすることで波線を並べ替えることができます。 新しいテキストを選択して入力することによって波線の名前を変更できます。

EE101 TextとValuesリストをナビゲートする

EE101のテキスト、又は、値の出力の全ては画面の右側の垂直ウィンドウにも表示されます。  表示されるデータは現在のマウス位置(Cカーソル)から始まります。 垂直スクロール・バーを全てのデータ一覧を拡大するために変更することが出来ます。  デバイスAの出力は左側に、デバイスBの出力は右側に揃えられます。 それらは波形データの左から始まる時系列で列挙されています。

EE101テキストと値の出力ウィンドウをスクロールするには、先ず現在のCカーソル位置をロックするために波形をクリックして、スクロール・ホイールを使用して上下にスクロールします。  キーボードの矢印上/下ボタン、Page Up/Downボタンを使用することもできます。

このウィンドウはウィンドウの上部をクリックしてドラッグすることで移動してドッキング解除できます。 それを元に戻すには元の位置に戻します。

 

 

 

測定

測定はトレース・バッファのどこにでも置くことができる2つのカーソルを使用して行われます。  ウィンドウの上部にあるタイムライン・バーの上でホバーリングすることで、左(X1の場合)、又は、右(X2の場合)マウスボタンを押してカーソルを配置します。  また、波形をダブルクリックしてカーソルを置くこともできます、X1を左ダブル・クリックとX2を右ダブル・クリックします。

得られた時間デルタと等価な周波数がカーソル間に表示されます。

各アナログ・ライン(アナログ入力、又は、EE101値波形のいずれか)にはそのサンプルの値を示す測定マーカーを付けることもできます。  波形上をダブル・クリックするだけでカーソルが配置されます。

 

 

 

フィルター

EE101テキスト、又は、値リストはチャネルに基づいて結果をフィルターできます。  そのチャンネルをオン、又は、オフにするにはテキスト・ウィンドウの上部にあるカラー・ボックスをクリックします。

サーチ

特定の値のEE101テキスト出力を検索するには、最下部の編集ボックスに検索文字列を入力し、Enterキーを押すか、又は、Search[検索]をクリックします。  現在の(C)カーソルの位置から時間的に前方に検索し、次の検索文字列を検索します。  見つかった場合、テキスト・ウィンドウの一番上にテキスト行を置き画面の中央に配置します。

検索は検索アルゴリズムによってテキスト・ウィンドウに設定されたフィルターに従います。

トレース全体を検索する場合は、先ずZoom All[全てをズーム]を押します。

テキスト検索は部分一致アルゴリズムです。 入力されたテキストがデバッグ文字列内のどこかにマッチした場合はそれをマッチと宣言します。 

ファイル・オープンとセーブ

貴重な情報を含むトレースを取得したら、一番下のSave[保存]ボタンを押してその情報をファイルに保存することができます。

一番下にあるOpen[開く]ボタンを押すことで、そのファイルを開くことができます。

 

ファイル・イクスポート

カーソル間のEE101のテキストと値の出力はExport[エクスポート]ボタンを押してCSV(カンマで区切ったテキスト)ファイルにエクスポートすることもできます。  エクスポートはディスク容量を節約するために2つのカーソルの間にあるテキストと値のチャネル出力を全て保存します。

CSVファイルはソーティング、フィルターリング、又は、それ以上の分析のために、Excel、又は、Numbersで簡単に開くことができます。

ホット・キー

下記のホット・キーを使用」することが出来ます:

SPACE キャプチャーの開始と中止
I ズームイン
O ズームアウト
1 カーソルX1を現在のマウス位置に置きます。
2 カーソルX2を現在のマウス位置に置きます。
Left Arrow パンを左
Right Arrow パンを右
Up Arrow 右のリスト・ウィンドウで1行上に移動します。
Down Arrow 右のリスト・ウィンドウで1行下に移動します。
Page Up 右のリスト・ウィンドウで1ページ上に移動します。
Page Down 右のリスト・ウィンドウで1ページ下に移動します。
F5/F6 配色のForward/Backward[順/逆順]

電流測定

差動アナログ入力を使用してトレース内のシステムの電流を測定することができます。 これを行うには、電流経路に小さな直列抵抗を配置し(下記参照)、抵抗両端の電圧降下を測定する必要があります。  セットアップに役立つ自動ダイアログが作成されました。  アナログ設定リストボックスの右側にあるGearアイコンを押すと次のダイアログが表示されます。  そこでボトムに抵抗値を入力しSave[保存]を押します。 測定は抵抗を流れる実際の電流量が表示されます。

抵抗の値は50mΩと10Ωの間で小さくする必要があります。 抵抗両端の電圧降下は妥当な分解能を得るのに十分な大きさである必要がありますが、回路に影響を与えない程度に小さくしてください。  妥当な経験則は最大電流(V=I*R, R= V/I)で0.1Vの電圧降下を引き起こす抵抗値を選択することです。  従って、最大電流が200mAのシステムの場合、抵抗はR=0.1V/0.2A=500mΩです。 

0.1Vの電圧降下でさまざまな最大システム電流に対する推奨抵抗値の一覧を示します:

 

最大システム電流 推奨直列抵抗値
10 mA 10 Ohms
50 mA 2 Ohms
100 mA 1 Ohm
500 mA 200 mOhms
1 A 100 mOhms

 

電流プローブ, 電流解析 電流プローブ, 電流解析

 



ファームウェア・ルーチンと制御コマンド




EE101 Insight-Pro™は次のルーチンを呼び出すとファームウェアからデバッグデータを取得します。

ルーチン

EE101Text( unsigned char channel, unsigned char * string);

このルーチンは指定されたテキスト・チャネル上の指定されたテキストを出力します。

channel = 0 thru 7

stringは出力する\0終了文字列です。  これらはホスト・キャプチャ・ソフトウェアのさまざまな機能を制御する 特殊な制御コマンドでもあります。

サンプル: EE101Text ( 2, "It Happened!");      // 現在の時間でチャンネル2に"It Happened!"と表示されます。

 

EE101printf ( unsigned char channel, unsigned char * printfformatstring, ... );

このルーチンは指定されたテキスト・チャネル上にprintfのようなテキストを出力します。 

channel = 0 thru 7

printfformatstring は標準Cで使用する\0終了文字列です。 printf routine

... フォーマット文字列によって使用されるパラメータです。

サンプル: EE101printf ( 4, "%d: %d", index, data);      // index = 23とdata = 15432の場合、チャンネル4に"23: 15432"と表示されます。

 

EE101Value ( unsigned char channel, signed long value );

このルーチンは指定された値を時間の経過とともにグラフ表示するように指定されたValue Channelに出力します。

channel = 0 thru 7

valueはグラフに出力する値です。  valueはsigned long であるため 範囲は –2,147,483,648 - 2,147,483,647

サンプル: EE101Value ( 2,  ADCValue );      // ADCValue = 123の場合、現時点でチャンネル2の値123にグラフ・ポイントを追加します。

 

EE101TextLabel( unsigned char channel, unsigned char * string );

このルーチンは指定されたテキスト・チャネルのラベルを設定します。

channel = 0 thru 7

stringは新しいチャネル・ラベルになる\ 0終了文字列です。

サンプル: EE101TextLabel( 2, "State");      // テキスト・チャネル2のラベルを"State"に変更します。

 

EE101ValueLabel( unsigned char channel, unsigned char * string );

このルーチンは指定された値チャネルのラベルを設定します。

channel = 0 thru 7

stringは新しいチャネル・ラベルになる\ 0終了文字列です。

サンプル: EE101ValueLabel( 2, "X Axis");      // 値チャネル2のラベルを"X Axis"に変更します。

 

制御コマンド

これらのコマンドはEE101Text()の呼び出しで文字列パラメータを使用して送信されます。

Play Beep:   EE101Text( channel, "?cmd=beep");

このコマンドを送信するとコンピューター上で可聴BEEPが生成されます。

channel = 0 thru 7,  ignored

サンプル: EE101Text( 2, "?cmd=beep");      // コンピューターでビープ音を鳴らします。

 

Send Email:   EE101Text( channel, "?cmd=email&to=toemail&msg=message");

このコマンドは指定された電子メールアドレスに電子メールを送信します。

channel = 0 thru 7,  無視されます。

toemail = emailメッセージを送るemailアドレス

message = emailに含まれるメッセージ

サンプル: EE101Text( 2, "?cmd=email&to=support@ee101.com&msg=The Test Has Passed!");      // support@usbee.comへemailを送ります。

 

Change Color:   EE101Text( channel, "?cmd=color&fg=foregoundcolor&bg=backgroundcolor&tc=textcolor&all=1");

このコマンドは指定されたチャンネルの色を変更します。  "color"の後のすべてのパラメータはオプションです。

channel = 0 thru 7,  ディスプレイ上の色を変更するチャンネルです。

foregroundcolor = このチャンネルの波形、又は、テキスト・ボックスの色。  許可される値はここをご覧下さい。

backgroundcolor = このチャネルの背景の色。 許可される値はここをご覧下さい。

textcolor = このチャネルのテキストの色。 許可される値は ここをご覧下さい。

all=1 = 全てのチャンネルの色がセットされます。

サンプル:

EE101Text(2,"?cmd=color&fg=red");        // チャネル2の波形、又は、テキスト・ボックスを赤に変更します。

EE101Text( 2, "?cmd=color&bg=red");       // チャネル2の背景色を赤色に変更します。

EE101Text( 2, "?cmd=color&tc=yellow");    // チャネル2のテキストを 黄色に変更

EE101Text( 2, "?cmd=color&fg=red&bg=blue&tc=yellow");      // 青色の背景に黄色のテキストでチャネル2を赤色の波形に変更します。

EE101Text( 2, "?cmd=color&bg=red&all=1");       // 全チャネルの背景色を赤色に変更します。

 

Stop Capture:   EE101Text( channel, "?cmd=stop");

このコマンドは進行中のキャプチャを停止しディスクに格納されているトレースを表示します。

channel = 0 thru 7,  ignored

サンプル: EE101Text( 2, "?cmd=stop");      // stops the capture

 

Restart Capture:   EE101Text( channel, "?cmd=restart");

このコマンドはキャプチャを停止して再開します。 これにより以前にディスクに格納されていた トレースが破棄されます。

channel = 0 thru 7,  ignored

サンプル: EE101Text( 2, "?cmd=restart");      // キャプチャを停止して再開し、以前のトレースを破棄します。

 



エンベデッド・ファームウェア




EE101 Insight-Pro™システムの主要コンポーネントは組み込み内蔵マイクロコントローラで動作する ファームウェアです。 マイクロコントローラはコードの状態、場所、又は、変数をリアルタイム操作で表示したいときはいつでも、 汎用I/Oライン(GPIO)のペアからデバッグ情報を送信します。  このデータを送信するには下記の3つのAPIルーチンのいずれかを呼び出します。

以下のファームウェア・ソースコードはユーザーのファームウェア・プロジェクトに組み込まれて、 ファームウェアが情報を出力したいときはいつでも呼び出すことができる簡単なAPIルーチンを提供します。  printf(...)と同様に、ユーザーは1行のコードを素早く追加して、正確な時刻に新しい情報を出力することができます。

このファームウェア・ソースコードを使用するには、ソースをプロジェクト(インライン、又は、 新しいソースファイルのいずれか)にコピーします。  次に、MAKE YOUR CHANGES コメント間の内容を変更します。  これらの変更は2つのGPIO信号の出力レベルの設定方法や他のプラットフォーム固有の設定方法を定義します。  詳細については以下のソースコードのコメントを参照にしてください。

プログラムとデータの使用

次のソースコードでは各種プロセッサやコンパイラ用に以下のリソース(ROM、及び、RAM)を使用しています。

             (ROM)    (RAM)
 Processor   Program  Data   Notes
 ----------  -------  ----   -------------------------------------
 Arduino       2132    268   With VARIABLE_ARGUMENT_SUPPORT
 Arduino        554     14   Without VARIABLE_ARGUMENT_SUPPORT
 PSoC 5LP      3072    368   With VARIABLE_ARGUMENT_SUPPORT
 PSoC 5LP       512     19   Without VARIABLE_ARGUMENT_SUPPORT
 STM EFM32     3152    315   With VARIABLE_ARGUMENT_SUPPORT
 STM EFM32      920      9   Without VARIABLE_ARGUMENT_SUPPORT
 PIC XC32     15684    628   With VARIABLE_ARGUMENT_SUPPORT
 PIC XC32      2096     16   Without VARIABLE_ARGUMENT_SUPPORT

ソースコード

以下はユーザーのファームウェア・プロジェクトに含めるソースコードです。  ファイルをPCに保存するには、下のリンクを右クリックし"名前を付けて保存"を選択します。  そしてそれらをファームウェア・プロジェクトに追加します。

ee101.c - 以下のコードを含むCソースファイル

ee101.h - ファイルで使用するためにルーチンを宣言するCヘッダーファイル

 

/* =============================================================
EE101 Insight-Pro™
Firmware Library
Provided by EE101.com

このファイルはEE101 Embedded Insight-Pro™にデバッグ情報を送信するために組み込みファームウェア・プロジェクトに含まれます。
これは1-wire(UART)モード、又は、2-wire(GPIO)モードで動作します。
1-wireモードではボーレート3MBaud迄, N、8,1に設定されたオンボードUARTを使用します。
2-wireモードでは2つの信号(クロックとデータ線)を使用します。
EE101 Insight-Pro™は正しい極性を自動的に選択します。
2つの信号は殆どのマイクロプロセッサで使用可能な汎用I/Oピン(GPIO)です。
出力のみが必要です。
出力電圧レベルは1Vから5Vのどこでも構いません。
このファイルをいくつかの場所で変更してGPIOの設定とクリアの方法と割り込みを有効/無効にする方法(必要な場合)を指定する必要があります。
ONLY MODIFY THE CODE BELOW BETWEEN THE FLAGS.[フラッグの下のコードのみを変更してください。]

If you have any questions or issues, please email us at
support@ee101.com.
===============================================================*/

//**************   MAKE YOUR CHANGES BELOW ONLY [以下のみを変更してご使用下さい。] *************************
// これらの定義はCypress PSoC5LPマイクロコントローラを使用した例です。

#define EE101_DEBUG_ON // このラインをコメントアウトしてEE101デバッグ出力をオフにします。

// Change #1 - 以下の定義に必要なインクルードを追加します。
#include "project.h"

// CHANGE #2 - 割り込みを無効にする方法。デバッグをしている場合にのみ必要です。
// 割り込みで出力します。割込みが再びイネーブルされると割込みが処理されるように割り込みを無効にするかどうかを確認して
// 割込み(割込みフラグをアクティブに保つ)を失わないようにします。
#define EE101IntDisable ; // 割り込みデバッグはありません。
#define EE101IntEnable ;
//#define EE101IntDisable CyGlobalIntDisable; // デバッグを中断
//#define EE101IntEnable CyGlobalIntEnable;

// CHANGE #3 - 2 wire(GPIO)、又は、1 wire(UART)のEE101インタフェースを使用している場合は選択します。
#define EE101_ONE_WIRE // EE101デバッグ・データ用の単一信号UARTインタフェースを使用している場合はこの行のコメントを外してください。
//#define EE101_TWO_WIRE // EE101デバッグ・データ用の2 wire sync[同期]インタフェースを使用している場合はこの行のコメントを外してください。

// CHANGE #4 - 2-wire EE101モード: GPIOピンをHigh及び、Lowレベルに設定し、Togglesを設定することを定義します。
// これらは可能な限り高速であるべきですが、50ns(20MHz)を超えないようにしてください。
// これらの2つのGPIOはクロックとデータラインです。システムの初期化中にファームウェアの他の場所に出力として設定する必要があります。
// データラインのトグルはGPIOラインの現在の状態を反転させる必要があります。
#define EE101ClockLow EE101_CLOCK_DR &= ~(1 << EE101_CLOCK_SHIFT); // PSoC Version
#define EE101ClockHigh EE101_CLOCK_DR |= (1 << EE101_CLOCK_SHIFT); // PSoC Version
#define EE101DataLow EE101_DATA_DR &= ~(1 << EE101_DATA_SHIFT); // PSoC Version
#define EE101DataHigh EE101_DATA_DR |= (1 << EE101_DATA_SHIFT); // PSoC Version
#define EE101DataToggle EE101_DATA_DR ^= (1 << EE101_DATA_SHIFT); // PSoC Version
//#define EE101ClockLow digitalWrite(10, LOW); // Arduino Version
//#define EE101ClockHigh digitalWrite(10, HIGH); // Arduino Version
//#define EE101DataLow digitalWrite(11, LOW); // Arduino Version
//#define EE101DataHigh digitalWrite(11, HIGH); // Arduino Version
//#define EE101DataToggle digitalWrite(11, !digitalRead(11)); // Arduino Version
//#define EE101ClockLow GPIO_PinOutClear(EE101_CLOCK_PORT,EE101_CLOCK_PIN) // STM EFM32 Version
//#define EE101ClockHigh GPIO_PinOutSet(EE101_CLOCK_PORT, EE101_CLOCK_PIN) // STM EFM32 Version
//#define EE101DataLow GPIO_PinOutClear(EE101_DATA_PORT, EE101_DATA_PIN) // STM EFM32 Version
//#define EE101DataHigh GPIO_PinOutSet(EE101_DATA_PORT, EE101_DATA_PIN) // STM EFM32 Version
//#define EE101DataToggle GPIO_PinOutToggle(EE101_DATA_PORT, EE101_DATA_PIN) // STM EFM32 Version
//#define EE101ClockLow PORTCbits.RC12 = 0; // PIC X32 Version
//#define EE101ClockHigh PORTCbits.RC12 = 1; // PIC X32 Version
//#define EE101DataLow PORTCbits.RC13 = 0; // PIC X32 Version
//#define EE101DataHigh PORTCbits.RC13 = 1; // PIC X32 Version
//#define EE101DataToggle PORTCbits.RC13 = !PORTCbits.RC13; // PIC X32 Version

// CHANGE #5 - 1-wire EE101モード: UARTに1バイトを送信するためにルーチン名を定義します。
// UARTはファームウェアのどこかで設定、及び、有効にする必要があります。
#define EE101UartTx(x) UART_PutChar(x)

// CHANGE #6 - SendEE101printfの変数引数サポートを有効/無効にします。
#define VARIABLE_ARGUMENT_SUPPORT // コンパイラにstdarg.hで定義されているva_list、va_start、vsprintf、va_endの
サポートがない場合は、この行をコメントアウトしてください。

#define MAX_STRING_LENGTH 250 // SendEE101printfバッファに使用するRAMの量
// これは250を超えてはいけません。
// これはデバッグ・テキスト・メッセージの最大長を定義します。

#ifdef VARIABLE_ARGUMENT_SUPPORT // va_list, va_start, vsprintf、及び、va_endに必要なものを含みます。
#include <stdio.h> // vsprintf
#include <stdarg.h> // va_list, va_startとva_end
#endif

// CHANGE #7 - Typeは使用しているプラットフォームを定義
// これらの定義と関数のプロトタイプをヘッダー。・ファイルにコピーしてAPIを定義します。
#define euint8 unsigned char // unsigned 8 bit value
#define eint8 signed char // signed 8 bit value
#define eint32 signed long // signed 32 bit value
#define echar char // bytes within a string
void EE101Value(euint8 channel, eint32 value ); // このチャネルの値を出力します。
void EE101Text(euint8 channel, echar *string ); // このチャネルのテキストを出力します。
void EE101ValueLabel( euint8 channel, echar *string ); // この値チャネルのラベルを設定します(256回送信)
void EE101TextLabel( euint8 channel, echar *string ); // このテキスト・チャネルのラベルを設定します(256回送信)
#ifdef VARIABLE_ARGUMENT_SUPPORT
void EE101printf(euint8 channel, echar *format, ... ); // 可変引数リストを持つprintfのような関数
#endif

//************** MAKE YOUR CHANGES ABOVE ONLY[*上記のみ変更を行って下さい。] *************************

#define EE101_SYNC 0x50
#define EE101_VALUE_TYPE 0x80
#define EE101_TEXT_TYPE 0x00
#define EE101_LABEL 0x08

#ifdef EE101_ONE_WIRE // これは1-wireインターフェイス

void SendEE101Byte(euint8 value)
{
    EE101UartTx(value);
}

void EE101Value( euint8 channel, eint32 value )
{
#ifdefEE101_DEBUG_ON
    EE101IntDisable;

    SendEE101Byte( (channel & 0x07) | EE101_VALUE_TYPE | EE101_SYNC);
    SendEE101Byte( value >> 24);
    SendEE101Byte( value >> 16);
    SendEE101Byte( value >> 8);
    SendEE101Byte( value );

    EE101IntEnable;
#endif
};

void EE101Text( euint8 channel, echar *string )
{
#ifdef EE101_DEBUG_ON
    euint8 bytes = 1;

    EE101IntDisable;

    SendEE101Byte( (channel&0x07) | EE101_SYNC | EE101_TEXT_TYPE);
   while(*string)
    {
        if (bytes++ > MAX_STRING_LENGTH)
        break;
       SendEE101Byte( *string++ );
    }
    SendEE101Byte( 0 );

   EE101IntEnable;
#endif
};

void EE101TextLabel( euint8 channel, echar *string )
{
#ifdef EE101_DEBUG_ON
    static euint8 timeout[8] = {0,0,0,0,0,0,0,0};
    euint8 bytes = 1;

    channel &= 0x07;
    timeout[channel]++;
    if ( timeout[channel] != 1 ) return;
   EE101IntDisable;
    SendEE101Byte( channel | EE101_SYNC | EE101_TEXT_TYPE | EE101_LABEL);
    while(*string)
    {
        if (bytes++ > MAX_STRING_LENGTH)
            break;
        SendEE101Byte( *string++ );
   }
   SendEE101Byte( 0 );
    EE101IntEnable;
#endif
};

void EE101ValueLabel( euint8 channel, echar *string )
{
#ifdef EE101_DEBUG_ON
    static euint8 timeout[8] = {0,0,0,0,0,0,0,0};
    euint8 bytes = 1;

    channel &= 0x07;
    timeout[channel]++;
    if ( timeout[channel] != 1 ) return;
    EE101IntDisable;
    SendEE101Byte( channel | EE101_SYNC | EE101_VALUE_TYPE | EE101_LABEL);
    while(*string)
    {
        if (bytes++ > MAX_STRING_LENGTH)
            break;
       SendEE101Byte( *string++ );
    }
    SendEE101Byte( 0 );
    EE101IntEnable;
#endif
};

#else // それ以外の場合は、2-wireインタフェースです。
void SendEE101Byte( euint8 value )
{
    if (value & 0x80) {EE101DataHigh;} else {EE101DataLow;} EE101ClockHigh; EE101ClockLow;
    if (value & 0x40) {EE101DataHigh;} else {EE101DataLow;} EE101ClockHigh; EE101ClockLow;
    if (value & 0x20) {EE101DataHigh;} else {EE101DataLow;} EE101ClockHigh; EE101ClockLow;
    if (value & 0x10) {EE101DataHigh;} else {EE101DataLow;} EE101ClockHigh; EE101ClockLow;
    if (value & 0x08) {EE101DataHigh;} else {EE101DataLow;} EE101ClockHigh; EE101ClockLow;
    if (value & 0x04) {EE101DataHigh;} else {EE101DataLow;} EE101ClockHigh; EE101ClockLow;
    if (value & 0x02) {EE101DataHigh;} else {EE101DataLow;} EE101ClockHigh; EE101ClockLow;
    if (value & 0x01) {EE101DataHigh;} else {EE101DataLow;} EE101ClockHigh; EE101ClockLow;
}

void EE101Value( euint8 channel, eint32 value )
{
#ifdef EE101_DEBUG_ON
    EE101IntDisable;
    SendEE101Byte( (channel & 0x07) | EE101_VALUE_TYPE | EE101_SYNC);
    if ((value > 32767L) || (value <-32768L))
    {
        SendEE101Byte( value >> 24);
        SendEE101Byte( value >> 16);
    }
    if ((value > 127L) || (value < -128L))
        SendEE101Byte( value >> 8);
    SendEE101Byte( value );
    EE101DataToggle;EE101DataToggle;
    EE101IntEnable;
#endif
};

void EE101Text( euint8 channel, echar *string )
{
#ifdef EE101_DEBUG_ON
    euint8 bytes = 1;

   EE101IntDisable;
    SendEE101Byte( (channel&0x07) | EE101_SYNC | EE101_TEXT_TYPE);
   while(*string)
   {
        if (bytes++ > MAX_STRING_LENGTH)
            break;
        SendEE101Byte( *string++ );
    }
    EE101DataToggle;EE101DataToggle;
    EE101IntEnable;
#endif
};

void EE101TextLabel( euint8 channel, echar *string )
{
#ifdef EE101_DEBUG_ON
    static euint8 timeout[8] = {0,0,0,0,0,0,0,0};
    euint8 bytes = 1;

    channel &= 0x07;
    timeout[channel]++;
    if ( timeout[channel] != 1 ) return;
    EE101IntDisable;
    SendEE101Byte( channel | EE101_SYNC | EE101_TEXT_TYPE | EE101_LABEL);
    while(*string)
   {
        if (bytes++ > MAX_STRING_LENGTH)
            break;
        SendEE101Byte( *string++ );
    }
    EE101DataToggle;EE101DataToggle;
    EE101IntEnable;
#endif
};

void EE101ValueLabel( euint8 channel, echar *string )
{
#ifdef EE101_DEBUG_ON
    static euint8 timeout[8]{0,0,0,0,0,0,0,0};
    euint8 bytes = 1;

    channel &= 0x07;
    timeout[channel]++;
    if ( timeout[channel] != 1 ) return;
   EE101IntDisable;
    SendEE101Byte( channel | EE101_SYNC | EE101_VALUE_TYPE | EE101_LABEL);
    while(*string)
    {
        if (bytes++ > MAX_STRING_LENGTH)
            break;
        SendEE101Byte( *string++ );
    }
    EE101DataToggle;EE101DataToggle;
   EE101IntEnable;
#endif
};

#endif


#ifdef VARIABLE_ARGUMENT_SUPPORT
echar EE101str[MAX_STRING_LENGTH];
void EE101printf( euint8 channel, echar *format, ... )
{
#ifdef EE101_DEBUG_ON
    va_list arglist;
   va_start( arglist, format );
    vsprintf( EE101str, format, arglist );
   va_end( arglist );
    EE101Text( channel, EE101str );
#endif
};
#endif