• 目次 -Page-
  • コンテンツ -Menu-
  • リンク -link-
  • 回路図とコネクタ基板作成 PIC18F2550

  • 回路は上図の通りです。さっぱりとした感じで不安がよぎりますが、これでUSB通信が出来るのでしょうか・・・。

    USBコネクタをブレッドボードに挿入出来るように基板化しました。
  • プログラム前段階(準備)C18 USB Framework
  • このテストを参考にされる方は「MPLAB−C18」というコンパイラがないと同じことは出来ません。 マイクロチップのサイトより無償でダウンロードできます(デモバージョン)。
     
    USB機能を内臓したPICが登場してからかなり経ちますが、ようやくテストを行ってみました。 マイクロチップが用意しているフレームワークスを用いれば簡単にPIC単体でパソコンと通信が出来るようです。
     
    MicrochipのUSB Software & Toolsサイト
     
    上記のサイトからフレームワークスをダウンロードしてパソコンにインストールするところから始まります。 V2.3をダウンロードしてインストールするとあまりにもファイルが多すぎてどれを参考にしていいのやらわからず、レガシーバージョンのV1.3をダウンロードして使うことにしました。
     
    以下「MCHPFSUSB Framework v1.3 (legacy version) 」を用いた説明です。
     
    何も変更せずにインストールするとCドライブに「MCHPFSUSB」というフォルダが作成されます。 この中にサンプル(?)が入っています。 作成するものにより使うものが変わるようですが、今回はPICとパソコンをシリアル通信するだけが目的です。 USBシリアル変換ICを使わずに出来ればこれはかなり安上がりにすみます。さてさて・・・。
     
    「MCHPFSUSB」フォルダ内の「fw」と進み、そのなかの「Cdc」というのが目的のフォルダです。 ここにPICとパソコンをUSBで接続して通信をする、尚且つパソコンからはシリアルポートに見える動作をするサンプルファイルがはいっています。

    作業をすすめましょう。プロジェクト用のフォルダを作成し、「Cdc」フォルダ内のファイルを全てコピーしてきます。 コピーされたファイルの中にある「MCHPSB.mcp」がプロジェクトファイルなのでダブルクリックします。 MPLABが立ち上がるとプロジェクトウィンドウにたくさんのファイルが入っているのがわかります。 使うのは少量なのであまり思いつめずにすすめましょう。
     
    さて、プロジェクトが立ち上がったらリンカーの変更をします。 今回使用するPICは18F2550なのでリンカを変更します。 出力先などの変更も必要な場合は手を抜かずに行ってください。
     
    つぎにメニューバーの「Configure」から「Select Device...」と進み、使用するデバイスを18F2550に設定します。
     
    ここまでの流れ
    @フレームワークスのダウンロード
    Aインストール
    Bプロジェクトフォルダの作成
    CCdcの中身をコピー
    Dリンカー等の変更
    E使用するPICの変更
  • プログラムの変更
  • プロジェクト内の「main.c」内のmain関数が基本となるのですが、ここにはプログラムを書きません。 ユーザーがプログラムを書くのは「user」フォルダ内の「user.c」です。
     
    -main.cのmain関数-----
    void main(void)
    {
    InitializeSystem();//初期設定
    while(1)
    {
    USBTasks();
    ProcessIO();//ユーザープログラム呼び出し
    }//end while
    }//end main
    ------------------------
     
    初期設定のInitializeSystem()関数を見てみると
     
    ------------------------
      ・
      ・
    mInitializeUSBDriver();
    UserInit();//ユーザー設定
      ・
      ・
    -------------------------
     
    と、なっている箇所があります。 ここから判断すると「ProcessIO()」関数内にプログラムを、「UserInit()」関数内に設定を行えばいいのがなんとなく理解出来ます。 この両関数が存在するのが「user.c」なのです。 しかし、main.cでも1箇所変更の必要があります。それはCONFIGURATIONです。 サンプルは「PIC18F4550」と「PIC18F87J50」を使用する場合の設定が書かれています(83行目くらいから160行目くらいまで)。 しかし、コメントアウト(//)で下記のようになっている箇所があります。
     
    ---------------------------
      ・
      ・
    //If using the YOUR_BOARD hardware platform
    //#elif defined(YOUR_BOARD)
    //Add the configuration pragmas here
    //#pragma config ... = ...
      ・
      ・
    ----------------------------
     
    YOUR_BOARDがいかにもって感じなのでここのコメントを削除してPIC18F2550用(今回使用する)のコンフィグを記入します。

    もう一箇所変更の必要がある箇所があります。 今回はバスパワーで動かしますが、その監視を行うか否かの設定です。 「usbcfg.h」を開きます。55行目くらいにあるパワー監視を下図のようにコメントアウトします。 PIC18F4550用の設定にも見えますが、ここをコメントアウトしないとRA1が入力限定となってしまいます(監視用)。
     
    Fmain.cにコンフィグ設定を追記
    Gusbcfg.hの電源監視をコメントアウト
  • プログラムの作成 MPLAB-C18

  • 上図が「user.c」に書いたプログラムです。UserInit関数にポートの設定を、ProcessIOに動作を書いています。 RB0にスイッチ、RC0−2にLEDを接続しています。 27−45行が動作を行うプログラムです。パソコンから送られてきた先頭文字を読み、0か1か2かそれ以外かを判定してアクションをおこします。 0が送られきた場合はRC0を反転させてパソコンへ変更したというレスポンスを返しています。
  • 動作確認
  • パソコン用のUSBドライバは「Cdc」フォルダ内の「inf」→「win2k_winxp_winvista32」内にあります。 接続した時にドライバの場所を聞かれたらここを指定します。 通信の設定は勝手にやってくれるみたいなのでプログラム内にも書いてません。 接続してポート番号が分かればそこと通信するように設定するだけです。
    ハイパーターミナルなどで動作確認が出来ます。うまく動作してよかったです。
  • リンカー等のMPLAB設定例
  • リンカー等の設定例をアップします。
    こちらでは「Cドライブ直下」に「prog」というフォルダをつくり、その中にプロジェクトフォルダがあります。 この場合のプロジェクトフォルダ名は「USB_PIC_Cds_Test」です。 その他、お使いの環境下ではリンク先が異なる場合などはご自身の環境にあった設定に変更して下さい
     
    Project→BuildOptions...→Procect→Directories
    プロジェクトウィンドウはこんな感じになっています。
    Design & Programming - 天姫 -
    Copyright (c) 2007-2009 amahime All Rights Reserved.