• 締切済み

PICのUSBホストコントローラーについて

初心者です。 PIC24FJ64GB002のUSBホストコントローラーを使用し、USB機器との通信を行っています。 USB機器との通信制御を行っていない時に、PICの汎用ポートからシリアル通信の信号(パルス幅=10μsec、50ビット)を出力しているのですが、不特定ヶ所でパルス幅が50μsec程延びます。 USB機器との通信制御を行っていない時に、通信端子に『通信時間=50μsec、1msec間隔 』の信号が出力されています。 ●この通信制御が汎用ポートの処理の邪魔をしている(割込みが入っている)のでしょうか? ●割込みが原因の場合、割込みを避けて汎用ポートの出力を行いたいのですが、どのようにすればよろしいでしょうか? ご教示下さい。 よろしくお願い致します。

みんなの回答

noname#159916
noname#159916
回答No.1

一般論ですが。 >●この通信制御が汎用ポートの処理の邪魔をしている(割込みが入っている)のでしょうか? その様子を観測したわけではないので断言できませんが、可能性はありますね。 >●割込みが原因の場合、割込みを避けて汎用ポートの出力を行いたいのですが、 >どのようにすればよろしいでしょうか? 確認目的では割り込まれたくない期間だけ割り込み禁止にすれば判断できますが。 (諸事情により割り込み禁止にできない事も有り得ますが)

ron_nast
質問者

お礼

ご回答ありがとうございます。 USBの割込みによる不具合であることの確認は取れたのですが、いまだそこを避ける方法がわかりません。 USB関連の割込みステータスレジスタの読み込みを行っていますが、値に変化がありません・・・

関連するQ&A

  • PICマイコンができること

    PICは入力信号によって「Yes」か「No」かを出力させるという仕事はできるが、入力信号をそのまま出力させるという仕事はできないものなのでしょうか? 今、PICマイコンに入力する信号は、サーボモータを動かすためのパルス信号であり、サーボモータが右に動くときと、左に動くときとで別々のポートから信号を出力させることを考えてます。 そのために、入力信号のパルス幅をタイマーで計測し、判断させているのですが、問題は判断項目(while や if)が加わると入力信号をそのまま出力することができないことです。 一応、PIC16F84Aを用いて10MHzの内部クロックで 1.判断項目がないとき入力信号をそのまま出力(別々に出力はしない) 2.判断項目は同じとして出力を入力信号にせず、5Vにして別々に出力 の2つについて実際にできました。 結構、厳しい条件ですがPICに期待しすぎなのかわからなくなったので質問しました。 よろしくお願いします。

  • USB経由でPIC自体をプログラミングできますか?

    PIC18のUSB通信機能を使って内部フラッシュメモリにデータ(プログラム)を書き込めますか? 要は、PIC18のUSBインターフェイスを使ってPIC自体をプログラミングしたいのですが、可能でしょうか? イメージ的には次のような仕組みです。 1)PICをUSBでPCにつなぐ。 2)PCからPICへプログラムまたはマクロ命令データを送信する。 3)PICはどこかにそのプログラムまたはデータを保存する。 4)PICをUSBから切り離す。 5)こちらの思い通りにPICが動く。 USB通信を行う場合、本来フラッシュメモリにはUSB通信関係のプログラムを書き込んでおくと思うのですが、 USB通信で受信したデータをフラッシュメモリの別領域に書き込んだりすることができるのでしょうか? あるいは、USB経由で受信したデータを汎用レジスタにいったん書き込んでおいて、 書き込みが終わってから、汎用「レジスタのデータを 読み取りつつ、PIC事態を制御することは可能でしょうか?

  • PICの出力パルス幅について

    初心者です。 PIC24FJ64GB002を使用し、添付ファイルのソース(シリアル出力)を作成しました。 ●仕様 スイッチ入力→シリアル出力(1パルス=約10μs) 実際動作させると、望み通りのシリアル信号が出力されるのですが、連続的に出力すると、1秒間隔位でシリアル出力のパルス幅が何倍かに延びるヶ所があります(延びるヶ所は不特定)。 考えられる原因はございますでしょうか? よろしくお願い致します。

  • PIC12F675のRB割込みミス(?)

    PIC12F675を20MHzでポート変化割込みを使用しています。 A.割込みルーチン内では BTFSC 05.3とラストリードし、bit出力(オシロでのチェック用)をするのみ (ポート変化割込に使用しているbitへの入力は約500Hz) B.メインルーチン内では MOVWF 05という形で無限ループでGPIOに出力し続けるのみ。 (出力周期は約600KHz) オシロでみると、入力が変化しても割込みが発生しないミスがかなりあります。 ここでB.の出力にディレイを入れて出力周期を約1KHzに下げると割込みミスは減少します。 Q1. マニュアルによれば、ポート変化割込みはラストリードから入力が変化とき 発生するとあります。 ラストリードはA.の割り込みルーチン内でしかしていません。 したがってB.で出力しても(出力にBCF,BSFは使用していません) 割り込みの発生には関係ないはずですが 現実は出力周期が割り込みの発生に大きく関係しています。 どういう理由でしょうか? Q2. ここまで述べてくると PIC12F675では、ポート出力をしているときはポート変化割込み ミスがある???ということになってしまいます。 これは正しいのでしょうか? 入力の変化を見落とさないために、ソフトウェアプログラムではなく割り込みを使用しているのですが・・・。

  • PICプログラムについて

    こんにちは 早速ですが質問です。 PIC16A84を使用しています。発振は4Mhzを使用しようと考えています。 入力Aの信号ONで出力Aの信号を(通常ON)をを25mSec間OFFし次にONを25mSecと入力Aの信号がONの間繰り返すのですが、この他に、入力Bと出力Bがあり、入力A、出力Aと同じ動きをするのですが、入力AとBが同時にONしたときのプログラム方法がわかりません。(プログラムの同時進行の場合のプログラミング方法) わかりずらいですがよろしくお願い致します。

  • PICマイコンを使った分解能1μsの時間差測定とPCへのデータ取込み方

    PICマイコンを使った分解能1μsの時間差測定とPCへのデータ取込み方法について PICマイコンを使って、レベル0-5Vの2つの信号A、Bの立ち上がり時間の差を、分解能1μs・最大時間100ms程度で測定し、USBコネクタでPCに時間差データを転送する方法を教えてください。 信号A、B は通常はLレベルで、Hレベルのパルス幅が10μsから1ms程度の単発パルスです。信号A、B のパルス幅は同じですが、Bのほうが数μs から数十msの遅延があります。 マイコンのクロックに10MHzとか20MHzなどの切りのいい周波数を使い、PICマイコンの割り込みを使う方法があるようなのですが、適切なPICマイコンの型番とプログラミング法、PCとインターフェースの方法などが書かれたサイトなど紹介して頂けると助かります。

  • PICマイコンを使った分解能1μsの時間差測定とPCへのデータ取込み方

    PICマイコンを使った分解能1μsの時間差測定とPCへのデータ取込み方法について PICマイコンを使って、レベル0-5Vの2つの信号A、Bの立ち上がり時間の差を、分解能1μs・最大時間100ms程度で測定し、USBコネクタでPCに時間差データを転送する方法を教えてください。 信号A、B は通常はLレベルで、Hレベルのパルス幅が10μsから1ms程度の単発パルスです。信号A、B のパルス幅は同じですが、Bのほうが数μs から数10msの遅延があります。 マイコンのクロックに10MHzとか20MHzなどの切りのいい周波数を使い、PICマイコンの割り込みを使う方法があるようなのですが、適切なPICマイコンの型番とプログラミング法、PCとインターフェースの方法などが書かれたサイトなど紹介して頂けると助かります。

  • PICでパルス数をカウントし、カウント数に応じで、ある操作をする

    PICにファンクションジェネレータからパルス(数100ms程度の幅)を0.2~1Hzで入力して、たとえば10回のパルスが入ってきたら、10回目のパルスの後、数ms後にパルスを出力するといった事をしたいのですが、わかりません。 PIC初心者です。よろしくお願いします。

  • PIC+音源IC使ってオーケストラを作りたい・・

    PICで遊んでるうちに、音源を制御したくなりました。最終目標はオーケストラです。アドバイスをお願いします。 PICで遊んでいるうちに、PICで音楽鳴らしてみようと思いました。 適当に公表されている回路を参考にして、ドレミふぁそらしど~くらいはスピーカーで鳴らすことができたのですが あまり面白くありません。 なんか簡単な音源があって、PICがそれを制御する、みたいなのをつくりたいのですが、 電子工作初心者で、なにをどうすればまったくわかりません。 PICから音色・音程を制御できる 音源IC?MIDI? とかありませんか? PIC回路 パラレル信号をうけとって 時間にしたがってパラレルポートをON/OFF <-プロトコルとか関係なく -> 音程・音色を鳴らす 単純な回路 電気的に直結ww 単純・安い回路 たとえば、PICが16F84とかだと、PORTB出力で音色決定 POARTA出力で音程決定とかやりたいわけです。 それをさらに拡大して PIC回路 時間にしたがってパラレルポートをON/OFF 単純な回路 PIC回路 パラレル信号をうけとって 時間にしたがってパラレルポートをON/OFF <--> 各PICからの複数の音程・音色を同時に鳴らす 単純な回路 電気的に直結ww 多少高くてもOK 簡易オーケストラ! PIC回路 時間にしたがってパラレルポートをON/OFF 単純な回路 何分、PICですら初心者、音楽系も音痴で、「ぐぐれ」的罵倒は覚悟しております。 この分野に得意なかた、アドバイスとかいただけると嬉しいです。

  • PICマイコンにつきまして教えてください。

    PICマイコンにつきましておしえてください。 初心者です、以下3点につきまして教えてください。 (1) PICマイコンを用いて、実験機を作成しているのですが、プログラム上の ある関数の処理時間がどのくらいが予測したいと思っています。 アセンブラの場合、クロック周期の4倍が1サイクルで、各処理毎に○サイクル というのが、データシート上に記載されていることから、ざっくり処理時間を 予測することができるのですが、C言語の場合、予測することはできないでしょうか? 加算、減算、ポート出力制御、if文、AD、、、等の1命令毎の処理時間がどのくらいか、 予測することができますでしょうか? (2) 実験機にはLCDをmain関数で表示させており、またTimer割り込み(5μsec)毎に簡単 な処理をおこなわせているのですが、動作させてみると、 LCDが表示せず(文字なしで高速で切り替えを繰り返しているような感じです。) これは、割り込み間隔が早すぎて、main関数に入る前に随時5μsec割り込みが入って main関数の表示ができていないということなのでしょうか? 割り込み間隔を50μsecにしたところ、うまく表示されましたので。。 (そういったことから(1)の質問をしました。) (3) MPLAB IDC2はデバッグシミュレータがあり、予測が難しい場合、ストップウォッチで、 確認しようと思っています。ブレークポイントを処理最初と最後に設定して、RUNで 時間を確認することができますでしょうか? 処理最初のブレークポイントまでは、どのように実行位置をもっていくのでしょうか? 長くなりましたが、よろしくお願いいたします。

専門家に質問してみよう