からくり小箱

アクセスカウンタ

zoom RSS USBケーブル接続の自動認識

<<   作成日時 : 2011/08/28 18:39   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

 PCのHDD障害のため、PICの開発環境も壊れてしまったため、自分のHPを参照しながら環境構築を行いやっと、2輪倒立振子ロボットのソースがビルド出来るようになりました。LIBRA-ONEのソースは全て無くなってしまったため、再度LIBRA=ZEROのソースから、これも自分のブログを参照しながら、PIC 2550→14K50のソースの修正をやりました。一応ロボットは動くようになったのですが、USBケーブル接続の自動認識がうまく動きません。
 PICに残っていた、HEXデータを書きなおす前に吸い上げて置いたので、これに戻すと動きます。自分のブログを見ながら新しいソースを大分チェックしたのですがうまく動きません。(不正なUSBデバイスのエラーになってしまいます)

 そこで、このやり方では不完全であると判断して、新しいやり方を試して見てうまく動きましたので報告します。こちらの方が正攻法だと思うのですが、外付けのPullup抵抗が必要なので、前回は敬遠していました。
 やり方は下記のロジックで、FrameworksのUSB処理を起動する前に、D+の電位をチェックして、USBケーブルの接続の有無を判断します。

・D+ (PortAのBit0)に外付けでPullup抵抗(あり合わせの120KΩを使用)を追加
・PortAのBit0をデジタル入力に設定し、USB処理を起動する前にこのロジックレベルを判断する。
・PortAのBit0の論理が1ならケーブル未接続、0ならケーブル接続と判断する。
・ケーブルが接続されているときのみUSB処理を起動する。

画像


PIC18F14K50で上記のロジックのプログラムを作るのに必要処理を以下にまとめました。

■PortAのデジタル入力設定
 PortAをデジタル入力に設定するには、TRISAを設定するだけではなく、状態割り込みレジスタ(IOCA)を設定する必要があります。

   TRISA = 0xff;
   IOCAbits.IOCA0 = 1;

■USBケーブル接続の有無のチェック処理

立ち上げ時にUSBケーブの接続の有無をチェックします。

void main(void)
{
     InitializePort();    //ポートの設定
     ep_restore();     //EEPROMデータのリストア
     wait_ms(200);    //0.2秒待ち
     InitializeSystem(); //USB Driver初期化
     InitializeINT();    //割り込み設定
     iniadconv();     //AD変換設定
     cal_gyro();      //gyroのキャリブレーション
     usb_sense();     //USBを使用するか否かの判断
}

void usb_sense(void)
{
    if(PORTAbits.RA0 == 0){
       usb_use = 1; //USBを使う;
    }
    else{
       usb_use = -1; //USBを切り離す
    }
return;
}

usb_use フラグが1以外の場合は、USB処理を呼ばないようにします。

/* USB 処理 */
void USBTasks(void)
{
     if(usb_use == 1){
        USBCheckBusStatus();   // Must use polling method
        if(UCFGbits.UTEYE!=1)
          USBDriverService();  // Interrupt or polling method
        CDCTxService();
     }
     return;
}


D+に接続するPullup抵抗の値は、あまり小さいとUSBの動作に影響があるようです。ホスト側のPulldown抵抗が15KΩなので、それよりは十分大きな値として、ケーブルが接続された時に、PortABit0が0レベルが入力されるようにします。僕はあり合わせの120KΩの抵抗を使用しましたが、一応ノイズの影響出ていませんが少し心配です。
PICの内蔵Pullupを有効にすれば、この外付け抵抗は不要になりますが、PortABit0には、この機能は無いようです。



テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
USBケーブル接続の自動認識  からくり小箱/BIGLOBEウェブリブログ
文字サイズ:       閉じる