SSブログ

PSoC 4 を MDK-ARM で使いたい (5) [PSoC]このエントリーを含むはてなブックマーク#

MDK-ARM のスプラッシュ

内蔵 Flash にプログラムが書けるようになったので、次はデバッガの動作を試してみます。

デバッグしようにもソフトウェアがありません

main.c を開く

そうなのです。 PSoC 4 のプロジェクトを作成はしましたが、このプロジェクトでは、一行もソフトウェアを書いていないのです。 さすがに、デバッグ対象のソフトウェアが無いのではしょうがないので、まずは、コードを追加します。

左側にある "Project" ペインから "main.c" ファイルを探して、ダブルクリックするとテキスト・エディタが開きます。


コードを追加する

エディタが開いたら、 for ループの中にコードを追加します。

    for(;;)
    {
        /* Place your application code here. */
        Clock_1000Hz_Stop();
        CyDelay(5000);
        Clock_1000Hz_Start();
        CyDelay(5000);
    }

このコードによって、ふたつのクロックの片方が5秒動いて、5秒止まって、という動作を繰り返すようになります。 LEDは、クロックが動いている間は明るさが変化し、クロックが止まると一定の明るさを保つようになります。

プロジェクトを Build して Download すると、5秒ごとに異なる動作をするのが観測できます。

デバッグモードに投入

デバッグモードに入る

デバッグを開始するには、 "Start/Stop Debug Session" ボタンをクリックします。


32K 制限の警告

すると、このようなダイアログが表示されます。 これは、無償版の MDK-ARM では、 32k バイトのコードサイズ制限があるという事を示す警告です。 PSoC 4200 の場合には、最大 Flash 容量が 32k バイトですので、問題ないでしょう。


デバッグモード

"OK" ボタンをクリックすると、デバッグモードに入ります。

ブレークポイントを設定する

Step Over 実行

デバッグモードに入ったとき、 PSoC の初期化を行う initialize_psoc() の直前で CPU が止まっています。 つまり、 LED を駆動するための信号が出力されておらず、 LED は消灯したままの状態です。

初期化だけを行うためには、 "Step Over" ボタンをクリックして、初期化関数を実行します。 初期化を行うと、 LED の明るさが変化し始めます。


ブレークポイントの設定

次に "main.c" ファイルを開いて、二か所にブレークポイントを設定します。 それぞれの行の左側で左クリックすると、赤い印が現れ、ブレークポイントが設定されたことがわかります。

ブレークポイントまで実行

Run ボタン

"Run" ボタンをクリックすると、次のブレークポイントまで実行されます。 LED は、 "Run" ボタンをクリックするたびに、明るさが変化する状態と変化しない状態を繰り返します。 PSoC の場合、 CPU の動作とディジタルロジックで使用するクロックが連動していないため、このような動作になります。

デバッグモードから抜けるには、ふたたび "Start/Stop Debug Session" ボタンをクリックします。

関連商品

PSoC 4200M CY8CKIT-043 Prototyping Kit

PSoC 4200M CY8CKIT-043 Prototyping Kit

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス

PSoC 4 を MDK-ARM で使いたい (4) [PSoC]このエントリーを含むはてなブックマーク#

MDK-ARM のスプラッシュ

お待たせしました。 今回から MDK-ARM での操作が始まります。

オプション設定

プロジェクトのオプション

まず、最初に行うのは、プロジェクトのオプションを整える事です。 メニューの "Project" → "Options for Target..." を選択して、ダイアログを開きます。


Device タブ

"Device" タブを開くと、 CY8C4245AXI-483 が指定されているのがわかります。

デバッグハードウェアを設定する

デバッグハードウェアの選択

次に "Debug" タブを選ぶとデバッガの設定画面が開きます。 左半分がシミュレータを使用する時の設定で、右半分が実物を使う時の設定です。 右側のドロップダウンリストから "Cypress MiniProg3/KitProg v3.3" を選択します。


設定ダイアログの呼び出し

そして、ドロップダウンリストの右側にある "Settings" ボタンをクリックして設定ダイアログを開きます。


KitProg 設定ダイアログ

このダイアログでは、 KitProg の指定と設定を行います。 CY8CKIT-042 PSoC 4 PIONEER Kit が PC に接続されていれば、自動的に認識されて "S/N" に表示されます。 ここでデバッガに使用される KitProg は、設定項目がほとんどありません。 右端に内蔵 Flash メモリにファームウェアをダウンロードする際の振る舞いを定義できるようになっていますが、すべてチェックしたままにしておきます。

設定が終わったら、 "OK" をクリックします。

Flash の書き込み設定

Utilities タブの設定

次は、 "Utilities" タブをクリックします。 このダイアログの上半分では、内蔵 Flash への書き込みをどのように行うのかを指定します。 Flash への書き込みには、デバッガをそのまま使います。 必要なのは、 "Use Debug Driver" をチェックする事だけです。

この Flash への書き込み設定ですが、 "Use Target Driver for Flash Programming" を選んでいたはずなのになぜか "Use External Tool for Flash Programming" に切り替わってしまう事があります。 その時には、 Flash への書き込みに失敗しますので、このオプション項目を設定し直して、再度書き込んでみてください。

以上で最低限のオプション設定は完了しました。 "OK" ボタンをクリックして、ダイアログを閉じます。

プロジェクトを Build する

Build ボタン

デバッガの設定ができたら、 "Build" ボタンをクリックして、プロジェクトを Build します。

Flash に書き込む

Download ボタン

Build できたら、次は Flash への書き込みです。 MDK-ARM の場合、 Flash への書き込みは "Download" と呼ばれています。 "Download" ボタンをクリックすると、 Flash への書き込みが始まります。


書き込み完了

書き込みが完了したら、 "Build Output" に "Programming Succeeded" と表示され、正常に書き込みが行われた事がわかります。 CY8CKIT-042 PSoC 4 PIONEER Kit の赤い LED の明るさが緩やかに変化しているのが観測されます。

関連商品

PSoC 4200M CY8CKIT-043 Prototyping Kit

PSoC 4200M CY8CKIT-043 Prototyping Kit

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス

PSoC 4 を MDK-ARM で使いたい (3) [PSoC]このエントリーを含むはてなブックマーク#

MDK-ARM のスプラッシュ

前回は、 MDK-ARM とその周辺を整備しました。 今回は、PSoC Creatorで作成したプロジェクトを MDK-ARM に Export します。

IDE Export Wizard の呼び出し

Export メニュー

PSoC Creator で作成したプロジェクトは、 PSoC Creator アプリケーションから MDK-ARM で使用できるプロジェクトに変換 (Export) できます。 具体的には、メニューの "Project" → "Export to IDE" で作成を開始します。


IDE の選択

すると、 "IDE Export Wizard" が開きます。 MDK-ARM を使用するため、その IDE である μVision を選びます。 二つの選択肢 "μVision" と "Generated CMSIS-PACK (Beta)" のうち、 Beta ではない μVision を選びます。

インストールした IDE は、 μVision 5 なのですが、ここでは μVision 4 を選択して、 "Legacy Support" を利用します。

MiniProg3/KitProg ドライバのインストール

ドライバのインストール

"IDE Export Wizard" を使うと、 "MiniProg3/KitProg" のドライバが準備されているかが検査されます。 ドライバがなければ、このダイアログが表示されます。 "Install Drivers for μVision" ボタンをクリックして、ドライバをインストールします。


インストール完了

表示にしたがってインストールを進めます。 最後に "Finish" をクリックすると、インストールが完了します。


ドライバ準備完了

ドライバの準備が出来たら、 "Next" をクリックして次に進みます。

ツールチェインを選択

ツールチェインの選択

この画面では、ツールチェイン、すなわちコンパイラなどを選びます。 もちろん、 "ARM MDK Generic" を選択します。

ソースファイルの選択

ソースファイルの選択

この画面では、どのファイルを μVision で使用するかを指定します。 すべてのファイルを選択するために "Select All" をクリックして、 "Next" をクリックして次の画面に進みます。

Wizard の完了

IDE Export Wizard の最終確認

いよいよ、最後の確認です。 "Wizard" は、プロジェクトの Build 前後で実行されるスクリプトを作成し、プロジェクトを Export します。 "Next" をクリックすると、 Export が始まります。


IDE Export Wizard 完了

Wizard が正常に完了したら、ふたつの項目にチェックが表示されます。 "Open in μVision" にチェックを入れて、 "Finish" をクリックすると "Wizard" の終了後 IDE が自動的に開きます。

関連商品

PSoC 4200M CY8CKIT-043 Prototyping Kit

PSoC 4200M CY8CKIT-043 Prototyping Kit

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス

PSoC 4 を MDK-ARM で使いたい (2) [PSoC]このエントリーを含むはてなブックマーク#

MDK-ARM スプラッシュ

前回は、タネとなるプロジェクトを作成しました。 今回は、 MDK-ARM をインストールします。

MDK-ARM のインストーラをダウンロードする

MDK-ARM のインストーラをダウンロードするためには、 MDK Microcontroller Development Kit ページから "Download" ページに入り、 いくつかのリンクをたどって "MDK-ARM" をダウンロードします。 ダウンロードするためには、途中で個人情報を登録する必要があります。
Export エラー

この記事を執筆している時点では、 MDK-ARM v5.17 が最新版になっています。 ところが、 PSoC CreatorMDK-ARM v5.17 との組み合わせでは、後で述べる "Export" のステップでこのようなエラーが発生してしまい、うまく動かないようです。 色々と実験を行った所、 MDK-ARM v5.15 以前の古い版では動作しました。


ダウンロード先のリンク

そこで、ダウンロード先を示す URL の最後尾の "517.exe" を "515.exe" に変更して、 MDK-ARM v5.15 を取り寄せます。 現状では、この方法で MDK-ARM v5.15 を取り寄せられますが、将来にわたって通用する保証はありませんのでご注意ください。

MDK-ARM をインストールする

インストール開始

インストーラを取り寄せたら実行します。 表示にしたがって、インストールを進めます。


デバイスドライバのインストール

インストールの終盤で、デバイスドライバがインストールされます。 これは、 ULINK と呼ばれる ARM の開発ツール・ハードウェアのドライバで、今回の実験では使用されませんが、ついでにインストールしてしまいます。


インストール完了

ドライバがインストールされたら、インストールは完了です。 最後の画面で "Finish" をクリックして、インストーラを終了します。

続いて Pack Installer の調整

Pack Installer 起動

インストールが終わると同時に "Pack Installer" が動き始めます。 "Pack Installer" とは、多種多様なデバイスに関する情報を集めたデータベースを管理するプログラムです。 情報は、ネットワークを介して "Pack Installer" が適切にダウンロードしてきます。 まず、説明ダイアログの "OK" ボタンをクリックして閉じます。


データベースの更新

しばらくの間、ネットワーク上の情報を確認すると、このような画面に切り替わります。 右半分には、すでにデータベースに登録されている情報が列挙されています。 このリストの "Update" と書いてあるのが、データベースの情報が古くなっている事が確認された項目です。 これらの "Update" ボタンをクリックして、データベースを更新します。


データベースの更新完了

下のステータス・バーに "Completed requested actions" と表示されたら、データベースの更新完了です。

PSoC 42xx を登録する

MDK v4 Legacy Support

じつは、今回使用する PSoC 42xx シリーズは、 "Pack Installer" では登録されません。 これは、 PSoC 42xx は、古いバージョンにのみ対応しているのが原因のようです。 PSoC 42xx シリーズは、 MDK v4 Legacy Support という所に収蔵されています。


MDKCM515.exe

このページで "MDKCM515.exe" をダウンロードして実行します。


Legacy Support のインストール

表示にしたがって、インストールを進めます。


Legacy Support インストール終盤

最後の画面で "Finish" をクリックすると、インストール終了です。

以上で MDK_ARM に関連したインストールが終わりました。 次回は、 PSoC Creator のプロジェクトを MDK-ARM に引き渡す方法を紹介します。

関連商品

PSoC 4200M CY8CKIT-043 Prototyping Kit

PSoC 4200M CY8CKIT-043 Prototyping Kit

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス

PSoC 4200M は、 "Legacy Support" にも含まれていないので、さらに工夫が必要です。


PSoC 4 を MDK-ARM で使いたい (1) [PSoC]このエントリーを含むはてなブックマーク#

MDK-ARM スプラッシュ

本シリーズのテーマは、 ARM が提供している KeilMDK-ARM を使用して PSoC 4 のソフトウェア開発を行う事です。

PSoC Creator でプロジェクトを作成する

ターゲット・ボードの選択

MDK-ARM でソフトウェア開発をする場合でも、プロジェクトの作成には PSoC Creator を使用します。 数ある中から、 PSoC Creator 3.3 CP1 を使用しています。 また、ターゲットには CY8CKIT-042 PSoC 4 PIONEER Kit を使用します。


空の回路図を作成する

スクラッチのプロジェクトから始めるので、 "Empty Schematic" を選択します。 このあと、 "Workspace" と "Project" の場所と名前を指定して、プロジェクトを作成します。

回路図と端子の割り当て

おためし回路図

この記事では、 MDK-ARM を使用してみる事を目的としているので、見た目で確認できる簡単な回路図を書いてみました。 周波数の異なるふたつの矩形波を XOR 論理に与える事で、周期的に幅が変化するパルス列が生成されます。 このパルスを P1[6] に接続されている LED に与えると、緩やかに明るさが変化するように見えるという仕組みです。 PSoC 4 のランダムロジックには、クロックをじかに接続する事が出来ません。 このため、 Toggle Flip Flop で二分周したクロックを接続しています。 これで、 500Hz と 501Hz の矩形波が XOR に入り、これらの周波数の差である 1Hz のビートが LED の明るさの変化として観測されます。

PSoC Creator から書き込んでみる

書き込みボタン

CY8CKIT-042 PIONEER Kit を接続して、 Program ボタンをクリックすると、ファームウェアが書き込まれて、そのまま実行されます。 赤い LED の明るさが緩やかに変化したら、完成です。

と、今回はここまで。 次回、いよいよ MDK-ARM の登場です。

関連商品

PSoC 4200M CY8CKIT-043 Prototyping Kit

PSoC 4200M CY8CKIT-043 Prototyping Kit

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス

この記事は、 CY8CKIT-042 PSoC 4 PIONEER Kit を使用していますが、 PSoC 4200M 向けにプロジェクトを作成しても同様の実験ができます。


リップルカウンタを作ってみたはずなのに [PSoC]このエントリーを含むはてなブックマーク#

リップルカウンタ?の出力

Bridge Control Panel でロジアナって、便利。 と、いう話題で書いた前回の記事ですが、もともと何をしたかったのかを追記します。 題して、「RTLで書いたのと違うじゃん。」です。

前回までのあらすじ

PSoC で作るロジアナみたいなもの

PSoC でロジック信号をつかまえて、 I2CUART のインターフェイスで出力すると、ロジアナみたいな事ができる事がわかりました。 前回の例では、同期カウンタを使ったきれいな波形を読み取らせたのですが、きれいな波形だったら手計算でシミュレーションだってできます。 本当に見たかったのは、こんなきれいな物じゃななかったのです。

リップルカウンタが出来ちゃう?

リップルカウンタの回路図

きっかけは、某所で見かけた「カスケード接続された TFF」でした。 TFF をカスケード接続するとリップルカウンタと呼ばれる非同期カウンタを構成する事が出来ます。 たとえば、こんな回路です。 前段の TFF の出力の立ち下がりを次の段の TFF のクロックに使うと、バイナリカウンタが出来上がります。

論理合成をかじった方ならわかると思いますが、この回路は厳密には PSoC 4 では実現できるはずがないのです。 それは、 PSoC 4 ではクロックを4本しか持てないからです。 この回路を真面目に実現すると、5種類のクロックが必要なのです。 これが、合成できるという事は、何か真面目に実装していないからに違いないのです。

ロジアナで観測したら

リップルカウンタ?の出力

そこで、リップルカウンタの出力を観測してみました。 すると、各ビットの立下りが同時に発生するはずなのに、ステージごとに1クロックずつ遅れて出力が変化しているのがわかります。 これでは、リップルカウンタではありません。


リソースの使用状況

"Resource Meter" で、リソースの使用状況を見た所、やはりクロックは二つしか使っていません。 では、それぞれの TFF は、どのクロックを使用しているのでしょうか。

前段の出力はクロックとして使われていない

そこで、合成時のレポートを確認してみました。 以下のレポートは、 "rpt" ファイルの "Final Placement Summary" → "Final Placement Details" → "Component Details" にある、 Q3 を作っているマクロセルに関するレポートです。

LAB@[UDB=(0,1)][LB=0] #macrocells=1, #inputs=0, #pterms=0
{
    [McSlotId=0]:     MacroCell: Name=Q3, Mode=(T-Register) @ [UDB=(0,1)][LB=0][MC=0]
        Total # of inputs        : 0
        Total # of product terms : 0
        List of special equations: 
            Clock  = (CK_digital) => Global
            Clock Enable: NegEdge(Q2)
        Main Equation            : 0 pterms
        !(
            0
        );
        Output = Q3 (fanout=1)
        Properties               : 
        {
        }

    [McSlotId=1]: (empty)
    [McSlotId=2]: (empty)
    [McSlotId=3]: (empty)
}

このレポートによると、 Q3 出力を作っている TFF のクロックは、 Q0 を作っている TFF で使用されている "CK" であり、 "Clock Enable" と称してなぞの入力 "NegEdge(Q2)" が接続されています。 どうやら、原理的に1クロックの遅延を生ずる Q2 の立ち下がり検出回路を TFF のイネーブル入力に使用して、疑似的に TFF が構成されているようです。 つまり、 TFF という記号が使用されてはいますが、これは TFF とは違う実装になっているようです。

分周されたクロックを入れてみたら

分周されたクロックを入れたリップルカウンタ

どうやら、 TFF は分周前のクロックを使用したエッジ検出を行っているらしいことがわかってきました。 そこで、リップルカウンタに与えるクロックに4分周回路を追加してみました。 元のクロックの周波数を4倍にしたので、最終的な出力に変わりはないはずです。


クロックを分周した波形

ところが、各ステージでの遅延が少なくなりました。 合成結果は省略しますが、それぞれの TFF の駆動クロックの周波数が4倍になったのが原因です。 このように、元のクロック周波数が十分に高ければ、 TFF の出力はリップルカウンタ出力として見なせるという事がわかりました。 それでも、決してリップルカウンタとはなりませんので、注意が必要です。

本日の結論

  • PSoC の論理合成では、 TFF をカスケードに接続する事もできますが、正確な実装ではありません。
  • 元のクロック周波数が高い場合は、リップルカウンタのように見なす事も出来ますが、リップルカウンタとは動作が異なります。
  • 何よりリップルカウンタを作らせないような回路を作る事が大事です。

関連文献

シリーズ最強!PSoC3ボード+デバッグ・ボード (トライアルシリーズ)

シリーズ最強!PSoC3ボード+デバッグ・ボード (トライアルシリーズ)

  • 作者: 古平 晃洋
  • 出版社/メーカー: CQ出版
  • 発売日: 2012/05
  • メディア: 単行本

ダイオード AND を設計してみた [電子工作]このエントリーを含むはてなブックマーク#

ダイオードは、ふたつの端子に印加される電圧によって電流を流したり流さなかったりできる、いわゆるスイッチング素子です。 この性質を利用して AND 回路を構成するというのが、今回のテーマです。

ダイオードを使った AND の原理

ダイオードを使った2入力AND

ダイオードを使って2入力 AND 回路を構成するには、図のようにダイオード2本と抵抗一本を使います。 入力電圧のどちらか一方が 0V に落ちると、出力電圧も 0V に落ちるという仕組みです。


しかし、現実には出力電圧は 0V まで落ちません。 それは、ダイオードに順方向電圧降下 (VF) が存在しているからです。 そのため、出力電圧は、入力電圧よりも VF だけ高い電圧になってしまいます。

VOUT = min(VIN1 + VF, VIN2 + VF)

さらに、入力電圧にも注意が必要です。 論理 "0" の信号は、決して 0V を意味するものではありません。 ある素子が論理 "0" を出力した時の電圧は、一般に VOL というパラメータであらわされます。 VOL の値は、部品のばらつき、電源電圧、使用温度、出力に流れ込む電流などにより影響を受けます。 そのため、半導体では「特定の出力電流 (IOL) を流した時の出力電圧値」として、最小値と最大値を定めるのが一般的です。

同様に論理 "1" の信号について IOH 条件下の VOH が定められています。

CMOS の場合

まず、 CMOS ロジックを使用した回路を考えます。 電源電圧は、 VCC=4.5V と仮定します。 ここでは、普通のシリコンダイオードを使ったとして VF=0.7V とします。


代表的な CMOS ロジック SN74HC04 の出力特性は、以下の表のとおりです。

PARAMETERCONDITIONMINMAXUNIT
VOHIOH=-20uA4.4----V
VOHIOH=-4mA3.84----V
VOLIOL=20uA----0.1V
VOLIOL=4mA----0.33V

CMOSロジックをダイオードANDに接続する

この AND 回路の場合、論理 "0" を出力するためにはプルアップ抵抗に電流を流す必要があります。 IOL=4mA と仮定すると、 VOL(MAX)=0.33 ですので、一方の入力が論理 "0" になった時の最大出力電圧は、以下の式であらわされます。

VLOW(MAX) = VOL(MAX) + VF = 1.03V

これを CMOS ロジックで受けます。 論理回路の入力には、「確実に論理 "0" が保証できる電圧 (VIL) の最大値と最小値」が定義されています。 同様に「確実に論理 "0" が保証できる電圧 (VIH) の最大値と最小値」も定義されています。 先の VLOW(MAX) が VIL の範囲内に入っていれば、もっと具体的には VIL(MAX) よりも低ければ、このダイオード AND 回路は動作する事になります。


SN74HC04 の入力特性は、以下の表のとおりです。

PARAMETERMINMAXUNIT
VIH3.15----V
VIL----1.35V

これを見ると、 VLOW(MAX) < VIL(MAX) ですので、この回路は AND 論理として動作する事がわかりました。

逆に論理 "1" となる場合には、入力電圧が VOH(MIN)=4.4V となるため、ダイオードは OFF し、プルアップ抵抗により VCC=4.5V の電圧が出力に現れます。 もちろん、この電圧は論理 "1" と解釈されます。

LS-TTL の場合

次に Low-power Schottky (LS) TTL を使った回路を考えます。 代表的な LS-TTL である SN74LS04 の出力特性は、以下の表のとおりです。

PARAMETERCONDITIONMINMAXUNIT
VOHIOH=-0.4mA2.7----V
VOLIOL=4mA----0.4V
VOLIOL=8mA----0.5V

LS-TTLロジックをダイオードANDに接続する

論理 "0" を出力する時には、やはりプルアップ抵抗に電流を流す必要があります。 ひとまず、 IOL=4mA と仮定して、あとで検証しましょう。 VOL(MAX)=0.4V; VF=0.7V とすると、 VLOW(MAX)=1.1V です。


一方、 SN74LS04 の入力特性は、以下の表のとおりです。

PARAMETERMINMAXUNIT
VIH2.0----V
VIL----0.8V

つまり、 VLOW(MAX) > VIL(MAX) となってしまい、この回路は AND 回路として働かないという事が判明してしまいました。

ショットキーダイオードを使ったら

問題は、 VLOW(MAX) が高くなってしまうことなので、 VOL(MAX) か VF を低くするしかありません。

そこで、 VF の低いショットキーダイオードを使ってみます。 VF=0.3V と仮定すると、 VLOW(MAX)=0.7V となりますので、ぎりぎり VIL(MAX)=0.8V よりも低くすることが出来ます。

ダイオードでレベルシフトしてみる

論理1出力時のバイアス電流

VLOW(MAX) が高くなってしまうのは、 VF を持ったダイオードを接続したためです。 であれば、上がってしまった電圧を別の VF を使って低くしてやる事も出来るはずです。 そこで、作成したのがこの回路です。


出力部分にダイオードを追加して、 VF だけ電圧を落とします。 また、レベルシフタが働くように、抵抗を追加して以下のバイアス電流を少し流しています。

IBIAS = (VCC - VF) / (RPU + RPD)

この回路では、ふたつの入力が論理 "1" になった時に出力の論理も "1" になる必要があります。 この時の出力電圧は、以下のように計算されます。

VHIGH = RPD * IBIAS

この電圧が VIH(MIN) よりも高い電圧になることが論理 "1" を出力するための条件なので、

RPD * (VCC - VF) / (RPU + RPD) > VIH(MIN)

ここで、 R と RPD の比率を RPU:RPD = 1:r とすると、

r > 0.98

r = 1.5 と仮定し、 IBIAS < 100uA の条件を与えると、

IBIAS = (4.75 - 0.7) / ((1 + 1.5) * RPU) < 100u [A]

これを満たすには、例えば、RPU=22k; RPD=33k のような組み合わせが考えられます。


論理0出力時ので夏と電流

論理 "0" を出力する場合の電圧電流は、このようになります。

ふたつの入力が同時に変化すると

LS-TTLの入力特性

これら二つの入力が、同時に変化する同期カウンタの出力に接続されると、どうなるかを考えてみました。 まず、ふたつの入力電圧を二次元グラフの X-Y にとり、その時の出力電圧をプロットします。 まずは、 LS-TTL で一般的なダイオードを使った場合です。

出力電圧が VIH(MIN) より高くなる領域を「赤」で、 VIL(MAX) より低くなる領域を「青」で表現しています。 その間の灰色の領域は、この出力を受信する素子の特性により、論理 "1" にも "0" にもなりうることを意味しています。 ふたつの入力信号の電圧が、 VOL(MAX) と VOH(MIN) の間を同時に変化すると、図の直線の軌道を通ります。 始点と終点が、灰色の領域にあるので、そもそも、論理が定まっていない事がわかります。 さらに、軌道の途中で「赤」の領域を通過しているため、この回路では「必ず論理 "1" のグリッチが発生する」という事がわかります。


ショットキーダイオードを使った時の入力特性

次にショットキーダイオードを使った場合です。 「赤」の領域を通ることはありませんが、「赤」に近い不定領域を通過しているため、論理 "1" のグリッチが出る可能性が高くなっています。


レベルシフトした時の入力特性

最後は、ダイオードでレベルシフトした場合です。 さらに「赤」の領域から遠い場所を通過していますが、不定領域を通っている事に代わりはありません。 もし、論理 "1" のグリッチを確実に抑制したいのであれば、 AC 的に出力信号の立ち上がり時間を長くした方が良いようです。


CY8CKIT-042 でロジアナを作った ~UART編~ [PSoC]このエントリーを含むはてなブックマーク#

波形の表示

前回の記事では、取得した論理信号の情報を EZI2C で PC に引き渡すことで、毎秒 390 サンプルの速度を出していました。 今回は、 UART を使って、表示させてみます。

回路図は、こうなった

UART版ロジアナ回路

前回同様、PSoC 4 PIONEER Kit (CY8CKIT-042) の中にロジアナと観測対象 (DUT) の回路の両方を入れてしまいました。 変更されたのは、 EXI2C コンポーネントが UART コンポーネントになった所と周期割り込みの仕掛けが追加された事です。

UART コンポーネントは、 115200 bit/s の速度で送信専用に設定されています。 理論的には、毎秒 10k バイトぐらいは出せるのですが、受信側が追い付かない事がわかりました。 そのため、サンプリング周期を割り込みで作り出して、順次、送信します。 この回路の場合、サンプリング周期は毎秒 1000 サンプルになっています。

前回の EZI2C を使った通信方式では、 PC 側でサンプリングタイミングを作り出していました。 ところが、ハンドシェイクを使わない UART の場合には、送信側が一方的にデータを送り出す仕組みなので、 PSoC 側でサンプリングタイミングを作ります。 これが、前回との大きな違いとなっています。

ファームウェアは、こうなった

UART版ロジアナのファームウェア

ファームウェアは、ちょっとだけ複雑になりました。 割り込み処理ルーチン (Interrupt Service Routine; ISR) を宣言して、割り込みが発生したらフラグ "Int_Sample_flag" を立てます。 メインループで、このフラグを検出して、サンプリングの処理を行います。 これで、周期的にサンプリングを行い、データを送出できるようになりました。

データの受信と表示

UARTからのデータ受信

今回もデータの受信には、 Bridge Control Panel (BCP) を使用します。 CY8CKIT-042USB-UART に割り当てられた COM ポートを選択すると、 UART の受信が出来るようになります。 ボーレートなどのプロトコルの設定は、 "Tools" → "Protocol Configuration" で設定できます。


UARTデータ受信構文

データの受信に使用される構文は、 "rx8 @0Probe" でおしまいです。 この実装の場合、送られてきた8ビットのデータを延々と受信するだけなので、データの始まりも終わりもありません。 複数バイトの受信が必要な場合には、ヘッダやトレーラを設定する事も出来ます。


サンプル数設定

データを受信した後は、表示を行いますが、サンプル速度が変わったので一画面当たりのサンプル数を変更する必要があります。 UART 版では、サンプル速度が割り込みによって比較的正確に決められています。 ここでは、一画面に22クロック(22秒)を表示するために一画面当たり22000サンプルに設定します。


波形の表示

これで、波形が表示できるようになりました。 今度は、 PC の画面表示能力にボトルネックが現れたように思われます。

プロジェクトアーカイブ

この記事を書くために作成したプロジェクトは、このファイルの拡張子を ZIP に変更して展開すると再現できます。

関連商品

Cypress PSoC4-PIONEER KIT CY8CKIT-042

Cypress PSoC4-PIONEER KIT CY8CKIT-042

  • 出版社/メーカー: Cypress
  • メディア: その他

関連文献

シリーズ最強!PSoC3ボード+デバッグ・ボード (トライアルシリーズ)

シリーズ最強!PSoC3ボード+デバッグ・ボード (トライアルシリーズ)

  • 作者: 古平 晃洋
  • 出版社/メーカー: CQ出版
  • 発売日: 2012/05
  • メディア: 単行本

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。