2014年5月2日金曜日

CDCUSBUARTを使ってみる。~送信するのみ~

マイコンで得られた情報をパソコンに送る手立てとして
手っ取り早いのは、「シリアル通信(UART)」

Arduino系やmbed系ではパソコンとのシリアル通信に
書き込みと同じUSBポートを使ってUSBシリアル通信をするはずです。

PSoCは書き込みとおなじ所からはUSBシリアル通信ができません。

と言うより

PSoC自体にUSBファンクションのUSBポートがあります。

USBファンクションと言うのは
USBのデバイスとしてPSoCを扱うことです。
PSoC5LPで扱えるのは HID Audio MIDI CDC とこんな感じ。

今回はPSoC5LPCDCクラスのUSBUARTコンポーネットを使って

PSoC5LPから文字を送信して、パソコンで受信してみましょう。

*今回はシリアル通信のソフトをTera Termなどを
インストールしておいてください。

では、PSoC5LPのシリアル通信をさせてみましょう。

まずは、空のプロジェクトを用意します。
(忘れた人はLEDチカチカの準備編へ)

コンポーネットの中のCommunicationsのファイルの中から
USBUART(CDC Interface)ドラックアンドドロップして
回路図の中に入れましょう。



通信の確認が出来るように
HW Connection」のチェックを外した
デジタル出力ピンも用意しましょう。
 (忘れた人はLEDチカチカの後編を。)

用意が出来るとこんな感じ。

***.cydwr のファイルを開いたら
デジタル出力のピンの設定をして置きます。
USBのピンは元々固定されているので設定しなくても構いません。


さて、USBUARTを使うためにはPSoC5LPのクロック」の設定する必要があります。
以前にPWMを動かした時とは違い
PWMで作った時のクロックの根幹としているクロックです。
根幹となるクロックを操作することによって
PSoC5LPCPUを低速にも高速にもすることが出来るようになります。

通常、根幹となるクロックの設定はかなりの呪文のような文を
書くのですがPSoC5LPではクリックだけで設定ができます。

ピン設定をしていた画面の下側にあるClocksのタブをクリックしましょう。
そうするとこんな感じ画面が出るはずです。



赤で囲った「Edit Clock」と言うのをクリックしましょう。

クリックするとこんな画面が出てきます。

カラフルな四角形に線と下に向かって矢印がありますね。
これがPSoC5LPのクロックエディタです。
根幹となるクロックを数倍に増幅したり、分割したりすることによって
適切な部分に適切なクロックを供給しています。

IMOが根幹となるクロック 3.0MHzが一番高精度
ILOが低速クロック(ただし、精度が低い) スリープモード等で使う
PLLは根幹となるクロックを数倍に増幅させる部分
Master Clockはデジタル系で使われるクロックを作る部分
Bus ClockCPUに供給する用のクロックを作る部分です。

これを次のように設定します。


クロックの精度が4%で平気か?と思う人もいるかと思いますが

UART系を使う場合にだけ高精度の24MHzにきり替わる事が出来るので、大丈夫です。

設定が出来たら「OK」をクリックして、1度目のコンパイルをしましょう。


さて、ここまで来たらプログラミングですね。
main.c」のファイルを開きましょう。

Int main()の中身は

int main()
{
    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
       CyGlobalIntEnable;
       USBUART_1_Start(0, USBUART_1_3V_OPERATION);//3.3Vで動かす
       //USBUART_1_Start(0, USBUART_1_5V_OPERATION);//5.0V
      
       while(!USBUART_1_GetConfiguration());// USBUARTの設定が出来るまで待つ
       USBUART_1_CDC_Init();//CDCUSBUARTをスタートさせる

    /* CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */
    for(;;)
    {
        /* Place your application code here. */
        while(USBUART_1_CDCIsReady()==0u){};//通信の準備が出来るまで待つ
              USBUART_1_PutString("Hello from PSoC5LP");//文字を送信する。
              Pin_1_Write(1);
              CyDelay(250);
       
              while(USBUART_1_CDCIsReady() == 0u){};//通信の準備が出来るまで待つ
              USBUART_1_PutCRLF();//改行コード+行頭復帰を送信する
              Pin_1_Write(0);
              CyDelay(250);
    }
}

です。長いのでコピーして貼り付けましょう。

プログラムを書いたら、もう一度コンパイル。

プログラムを書き込んだら、USBケーブルをPSoC5LPから外します。

新しいデバイスを使う場合「ドライバファイル」が必要になります。
ドライバーのファイルの場所は
PSoCのファイルを保存しているところ(ドキュメント)⇒
PSoC Creator⇒「今回のファイル名」⇒Generated_SourcePSoC5
の中の

USBUART_1_cdc.inf がドライバーファイルです。

コンポーネットの設定を変えない限りはこのドライバーファイルを使うことができます。
このドライバーファイルを
Cドライブに「PSoC」と言う新しいフォルダを作ってそこに入れておきます。

入れたら、PSoC5LPの書き込み用ではない方のUSBポートにつなぎます。


ドライバーのインストール方法とWin8の署名なしドライバーの許可方法は
スイッチサイエンスのブログを参考にするのが良いでしょう。
デバイスドライバーの場所を指定するときに「C\PSoC」にすればいいです。


さて、Tera Termを起動させると
こんな感じとなります。


OK」をクリックすると

こんな感じとなります。

PSoC5LPでの受信は気が向けば書こうかなと思います。
*ボーレートの設定は自動で調整されます。

0 件のコメント:

コメントを投稿