割り込みについての理解方法と手順

このQ&Aのポイント
  • タイマーや通信機器、I/Oアクセスなどのイベントが起きると、割り込みコントローラーがそれを検知し、CPUに割り込みをかけるまでの手順を知りたいです。資料や参考サイトがあれば教えてください。
  • 割り込みについての詳細な手順を知りたいです。具体的には、タイマーや通信機器、I/Oアクセスなどのイベントが発生した際に、どのようなシーケンスが行われるのかを知りたいです。資料や参考サイトがあればお教えください。
  • 割り込みに関して詳しく学びたいです。タイマーや通信機器、I/Oアクセスなどのイベントが発生した場合、割り込みコントローラーがそれを検知し、CPUに割り込みをかけるまでの一連の手順を知りたいです。参考になるサイトや資料があれば教えてください。
回答を見る
  • ベストアンサー

割り込みについて

タイマー、通信機器、I/Oアクセスなどのイベントが起きて、それを割り込みコントローラーが検知して、 CPUへ割り込みをかけるまでのレジスター操作、バスコンポーネントなどシーケンスを段階的に知りたいのですが参考サイトなどがございましたら、ご教授頂けないでしょうか? 出来ましたらブロック図や回路図などもあると、理解がしやすと思われます。 PICが搭載されたマイコンやIntelプラットフォームなど、何でも結構です。 Intelデベロッパーズマニュアルを読んでいたのですが、レジスター操作のことは記載がありましたが、 コントローラーが検知して、どのようなコンポーネントを通して、CPUへ割り込みをするかまでは理解できませんでした。 以上 宜しくお願い致します。

noname#187796
noname#187796

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8516/19358)
回答No.5

>1. >割り込み許可・禁止命令は、CPUが割り込みコントローラーに通知して、割り込みコントローラー >がCPUの割り込み信号を有効・無効にしているのでしょうか? 割り込みコントローラーは無関係。 割り込みコントローラーの役目は「割り込みの交通整理」だけです。 割り込みコントローラーは、CPUが割り込み禁止状態か、割り込み許可状態か、どっちになってるかなんて知りません。 CPUが割り込み禁止命令を実行すると、CPUのステータスレジスタの割込許可フラグがクリアされ、フラグがクリアされている間はCPUは割り込みを先送りします。 CPUが割り込み許可命令を実行すると、CPUのステータスレジスタの割込許可フラグがセットされ、割り込みを処理するようになります。 なお、一部のCPUには、ステータスレジスタに割り込みの禁止許可の状態を表すフラグを持っていない物もあります。 >2. >あと、既にご返答して頂いた件ですが、 >バスラインとCPUの割り込み信号は、別々配線でしょうか? 「バスライン」の定義を再確認して下さい。バスラインは、データバス、アドレスバス、制御信号バスなど、色々な信号線の束の事を言います。 割り込み信号は、通常、制御信号バスの中にあって、制御信号バスはバスラインの一部を構成する要素です。 >プログラムとは、デバイスドライバーのことでしょうか? デバイスドライバーに限った話ではありません。一部のOSでは、デバイスドライバーがOSとハードウェアの橋渡しをしていますが、デバイスドライバーが存在しないOSもあるし、デバイスドライバーを無視してI/Oを直接制御しようとするアプリケーションも存在します。 割り込み制御は、Windowsなどの「狭い世界」に限定した話ではないので、狭い世界の事は忘れて下さい。 >リセット命令を出すのは、割り込みコントローラーでしょうか? 割り込みコントローラーは「割り込みの交通整理をするだけ」なので、デバイスの状態を変化させるような事はしません。 デバイスの初期化を行うのは(行えるのは)CPUだけです。 >3. >割り込みコントローラーで割り振っている優先順位(0-15)ですが、BIOSなどで、PCIデバイスなどは >同じIRQ番号を共有していますが、他のバスデバイス、タイマーなどはメニューにございませんでした。 >本来、割り込みの優先順位は、どのように設定されているのでしょうか? それぞれのハードウェアに依存しますので「こうする」と言う決まりはありません。 通常「CPUがすぐに応答しないと困る物」の優先順位が高くなっています。 >あと、ACPI OSの場合、OSのIRQ情報を割り込みコントローラーが参照しているようですが >参照のタイミング、方法が、もしお分かりになればご教授頂けないでしょうか? その辺りの仕様は「使っている割り込みコントローラーに依存する」ので、コントローラーチップのデータシートを読んで下さい。 >4. >デバイスの割り込み線が割り込みコントローラーに配線されて、割り込みコントローラーから >CPUへは割り込み信号線が配線されていると思います。 感じ的には「そんな感じ」ですね。 >一連の流れを知りたいとき、ご推薦の書籍、ウェブサイトがございましたらご教授頂けないでしょうか? CPUのアーキテクチャブックを読むのが一番でしょう。古いのなら和訳されてるのもあります。 --- こういうのを勉強する際は「これは一般的な技術」「これはWindowsパソコンに限った技術」ってのを、きちんと把握しておく必要があります。 じゃないと、アーキテクチャやOSが違う物になった時に「トンチンカンな話」になっちゃって「ああ、このOSでは、そんな事してない。全然違うんだ」って指摘されて、恥をかきます。

noname#187796
質問者

お礼

お礼が遅れて申し訳ありません。ご丁寧な回答をありがとうございました。

その他の回答 (4)

  • chie65535
  • ベストアンサー率43% (8516/19358)
回答No.4

>ここで質問ですが、仮にCPUでI/Oアクセスの処理をしていて、優先順位の高いSVCコールがおきたとき、 >I/Oアクセスなど制御をしていたハードウェア割り込みコントローラーへは、どのような作用をするのですか? 通常「一連のI/Oアクセス」を行っている場合、アクセスタイミングが非常にシビア(アクセスを中断できない)なので、一連のアクセスを行う前に「割り込み禁止命令」を実行し、他の割り込みを一切受け付けない状態にします。 そして「一連のアクセス」が終了し、処理を中断しても良い(処理を邪魔されても良い)タイミングになった所で「割り込み許可命令」を実行します。 割り込み禁止中に発生した割り込み(優先度が低いのはもちろん、優先度が高い物も)は、割り込み許可命令が実行されるまですべてペンディングされ、許可した次の瞬間に(優先度が高い物から順に)割り込みが発生します。 つまり、プログラムで「ここから先、邪魔するな」って命令を実行してから、ハードウェアアクセスをして、邪魔が入っても問題ない状態になったら「邪魔してもいいよ」に戻す訳です。 但し「割り込み禁止モード」に入っても「NMI(ノンマスカブルインタラプト。マスク出来ない割り込み)」「例外」「リセット」は発生しますから、割り込みがまったく入らないと言う訳ではありません。 そういった訳で「一連のI/Oアクセス中は、優先度が高いスーパーバイザコールが起きてもペンディングされ、一連のI/Oアクセスが終わるまで、邪魔が入らない」ようになっています(プログラマーが「割り込み禁止命令を入れ忘れた」ってミスを犯さない限り、ですが) 蛇足ですが「PCがフリーズする」って言う状態は「どこかで割り込み禁止命令を実行して、バグやハードウェア不良で無限ループに入ってしまった場合」に起きます。 例えば「割り込み禁止にしてから、I/Oを監視して、どこかのビットが変化するまで待つ」って言う処理で、バグやハード不良で「変化するはずのビットが何時までも変化しない」と言う状況になると、そこで無限ループに入り、割り込みも一切受け付けないので「フリーズ状態」になります。 なお、NMI、例外、リセット直後は、ハードウェアが「どんな状態になっているか判らない(アクセスの途中でCPUがアクセスを止めちゃったかも知れない)」ので、ハードウェアに対して「リセット命令を出す」「リセット信号をアクティブにする」などして、I/Oを強制リセットします。

noname#187796
質問者

お礼

ご返答いただきましてありがとうございます。 一連の流れを詳しく知りたいので、再度質問させてください。 1. 割り込み許可・禁止命令は、CPUが割り込みコントローラーに通知して、割り込みコントローラー がCPUの割り込み信号を有効・無効にしているのでしょうか? 2. あと、既にご返答して頂いた件ですが、 >「CPUに割り込みをかける」とは、具体的には「バスラインに割り込み番号を乗せる」→ 「CPUの割り込み信号をアクティブにする」→「CPUが割り込みを受け取ったか調べ、 受け取ったら割り込み信号をネガティブにする」と言う作業。 バスラインとCPUの割り込み信号は、別々配線でしょうか? >プログラムで「ここから先、邪魔するな」って命令を実行してから、ハードウェアアクセスをして、 邪魔が入っても問題ない状態になったら「邪魔してもいいよ」に戻す訳です。 プログラムとは、デバイスドライバーのことでしょうか? >NMI、例外、リセット直後は、ハードウェアが「どんな状態になっているか判らない (アクセスの途中でCPUがアクセスを止めちゃったかも知れない)」ので、 ハードウェアに対して「リセット命令を出す」「リセット信号をアクティブにする」などして、 I/Oを強制リセットします。 リセット命令を出すのは、割り込みコントローラーでしょうか? 3. 割り込みコントローラーで割り振っている優先順位(0-15)ですが、BIOSなどで、PCIデバイスなどは 同じIRQ番号を共有していますが、他のバスデバイス、タイマーなどはメニューにございませんでした。 本来、割り込みの優先順位は、どのように設定されているのでしょうか? あと、ACPI OSの場合、OSのIRQ情報を割り込みコントローラーが参照しているようですが 参照のタイミング、方法が、もしお分かりになればご教授頂けないでしょうか? 4. デバイスの割り込み線が割り込みコントローラーに配線されて、割り込みコントローラーから CPUへは割り込み信号線が配線されていると思います。 一連の流れを知りたいとき、ご推薦の書籍、ウェブサイトがございましたらご教授頂けないでしょうか? 以上 質問が多くて申し訳ございません。

  • chie65535
  • ベストアンサー率43% (8516/19358)
回答No.3

>OSからのSVCコールの時も、割り込みコントローラー、CPUの作業は、ご説明していただいた内容と同じでしょうか? SVCコール(スーパバイザコール)の実装は、CPU、OSに依存します。 SVCコールが具体的にどのように行われるかは、CPUごと、OSごとに異なります。

noname#187796
質問者

お礼

大変申し訳ございませんが、再度、質問させてください。 Intel CPUシステムで、Windowsを使用している場合のSVCコールですが、OSのAPCIコンポーネントにレジストしている IRQ情報をベースにAPICソフトウェア割り込みコントローラーがCPUに割り込み処理しているようです。 ここで質問ですが、仮にCPUでI/Oアクセスの処理をしていて、優先順位の高いSVCコールがおきたとき、 I/Oアクセスなど制御をしていたハードウェア割り込みコントローラーへは、どのような作用をするのですか? 検討違いな事でしょうか? もしお分かりになればお知恵を貸してください。 以上

  • chie65535
  • ベストアンサー率43% (8516/19358)
回答No.2

>コントローラーが検知して、どのようなコンポーネントを通して、CPUへ割り込みをするかまでは理解できませんでした。 割り込みコントローラーがやる作業は、デバイスからの割り込み要求を交通整理して、CPUに割り込みをかけるだけ。 「交通整理」とは「割り込み中に、もっと優先順位が高い割り込みがあったから、そっちを優先させる」とか「優先順位が低いから、今やってる割り込み処理が終わるまで待たせる」とか「今は誰も割り込んでないから、割り込みを許す」とか「優先順位が一緒だから、先着順に割り込みを起す」とかって作業。 「CPUに割り込みをかける」とは、具体的には「バスラインに割り込み番号を乗せる」→「CPUの割り込み信号をアクティブにする」→「CPUが割り込みを受け取ったか調べ、受け取ったら割り込み信号をネガティブにする」と言う作業。 この時の「バスラインに乗せる割り込み番号」は、デバイスごとに決まっていて、BIOS起動時や、デバイスドライバソフトのロード初期化時に、デバイス本体と割り込みコントローラに番号がセットされます(デバイスによっては番号が固定の物もあります) CPUは、割り込み信号がアクティブになると、CPUの全レジスタを退避し、バスラインに乗った割り込み番号を読み込んでから、割り込みモードに入り、その番号に対応した割り込みベクタから「ジャンプ先」を求め、そこにジャンプします。 ジャンプした先は「割り込みコントローラ用のデバイスドライバソフトの中」で、そこに「割り込みを受けたら何をするか」のプログラムがあります。 CPUの割り込み処理ルーチンの最後には「割り込みモードを終了して、元に戻りなさい」っていうCPU命令が書いてあります。 CPUは、その命令に従って、退避してあったレジスタをすべて元に戻し、割り込みが起きる直前に実行していた命令の次の位置から処理を再開します。

noname#187796
質問者

お礼

chie65535さん、 お世話になります。 >出来ましたら、実例(実機)で、割り込みが起きて、コントローラーが検知して、CPUで割り込み処理及び終了後の マスク解除まで、回路上の信号のフローをその時々の制御レジスタの状態も含めて勉強したいのですが........ マイコン入門書を探します。ご迷惑をおかけして申し訳ありません。無視してください。 申し訳ございませんが、もう一つ質問させてください。 OSからのSVCコールの時も、割り込みコントローラー、CPUの作業は、ご説明していただいた内容と同じでしょうか? 以上 宜しくお願い致します。

noname#187796
質問者

補足

簡潔明瞭なご説明ありがとうございます。 出来ましたら、実例(実機)で、割り込みが起きて、コントローラーが検知して、CPUで割り込み処理及び終了後のマスク解除まで、回路上の信号のフローをその時々の制御レジスタの状態も含めて勉強したいのですが参考サイトなどがございましたら、ご教授頂けないでしょうか? 以上 宜しくお願い致します。

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

この辺りの記事では、いかがですか? http://www.glamenv-septzen.net/view/633#id075f05

参考URL:
http://www.glamenv-septzen.net/view/633#id075f05

関連するQ&A

  • 8051プロセッサについて

    質問カテゴリが適切でなかったらすいません。 インテル8051プロセッサ互換のマイコンで、 データポインタの使い方、間接アドレッシングの使い方が 分かりません。レジスタでいうとDPL,DPH、命令でいうところの R0,R1についてです。PICマイコンではレジスタFSRで示された アドレスに、INDFを通してアクセスできますが、これとは全く 違う方法なんでしょうか? 実際に使用するマイコンはアナログデバイセスのADuC812です。 もしお分かりの方がおられたら教えていただけませんか。

  • 【PICマイコン】一般製品にPICシリーズが使われてるって本当ですか?

    最近PICをはじめて大分アセンブラもなれてきて楽しめるようになってきました。 それで教えてGOOで色々見てるときにPICシリーズのマイコンは一般製品の中にも組み込まれているって書いてあったんですが本当ですか? 僕の中でPICやAVR等はそれなりにコアな趣味を持つ人たちのおもちゃ的な物だと思ってました。 もし本当に入ってるんだったら具体的にどんな製品にどのマイコン(例PIC16F877A等)が使われてるのか教えてください。凄く興味があります。 また、何処のサイトだったか忘れましたが「これからマイコンをはじめるならAVR!PICをやるメリットなし!」ぐらいの勢いで書いてあったんですがその通りなんでしょうか? もひとつ、、PICの勉強をはじめるときにアセンブラかCかで迷ったんですがアセンブラではじめた方がCPUの構造をより理解しやすいとの事でアセンブラで進めてきたんですが、いまいちその実感がわきません。具体的にどういう所でCPUの構造を理解しやすいのでしょうか? それっぽいなぁと思うのはクロックでタイミングを与え、そのタイミング毎に命令を実行しレジスタのBITで条件判断をしたり計算をしたりしてポートに出力する的な部分でしょうか?そもそもCPUの構造ってどういう事なんでしょうか?何て言うか例えて言うならエクセルは仕事で使うから詳しいけどWindowsの設定は全然解りませんみたいな感じです。 よろしくお願いしますm(_)m

  • システムの考え方。

    HITACHIのCPU H8/3040を使っています。外部割込みをして簡単な回路(フォトインタラプタで検知し、LEDを点灯させる)を動かしたいと思います。既に簡単なプログラムはアセンブラ言語で作っています。システムの考え方が分りません。割り込みに必要なのはポートの設定とレジスタの値(アドレス)だと思うのですが…いまいち説明できません。外部割込みがしたいだけなんですけど、分る人がおられたら教えて下さい。

  • 不揮発メモリ(EEPROM)内蔵のワンチップマイ…

    不揮発メモリ(EEPROM)内蔵のワンチップマイコンについて http://mori.nc-net.or.jp/EokpControl?&tid=154077&event=QE0004 に非常に奇妙な質問と回答がありました。 回答が締め切られたため、別話題として質問にしてみました。 不揮発メモリのEEPROMには書きこみ回数に寿命制限があります。 このため、ワンチップマイコンにEEPROMを内蔵すると、書きこみ回数の 寿命制限を越えたときから、マイコンは正常に動作できなくなる問題 があります。 従って、EEPROM書きこみ回数制限を越えても、CPUが動作できるように、 不揮発情報をCPU外部のNVRAM RAMに持たせるという考え方がH8ではとられ ていると思われます。 一方PICマイコンで内蔵EEPROMを使用するには当然、その書きこみ回数が 書きこみ制限回数を越えないような応用に使わないと、PICマイコンは EEPROM書きこみ回数の上限値を越えたときから恒久故障に至ります。 そうしたマイコンそれぞれの設計思想を理解せずして、PICマイコンが良い とか、H8が悪いみたいな結論は、マイコンとその応用の仕方の考え方の 理解が全くできていないと思いますよ。 H8が悪くてPICが良い? http://mori.nc-net.or.jp/EokpControl?&tid=154077&event=QE0004

  • PIC16F193X割り込み時の退避・復帰処理方法

    ICマイコンでの割り込み処理について、16F193Xの型番では割り込み発生時における退避・復帰が自動的に行われると認識しているのですが、下記型番では以前の様に wレジスタ、status,PCLATh等のレジスタを退避・復帰をプログラムで保存しておく必要がなくなったということでしょうか? 使う割り込みはタイマー割り込み(timer0)とし、割り込処理中の割り込みは禁止とした場合 因みに割り込みは以下の様に発生させ ////////////////////////// org   0 goto start org 4 goto INTLAP ////////////////////////// INTLAP BCF INTCON,2 INCF TES_CNT,1 RETFIE 割り込み処理中にTES_CONのレジスタ内容をPORTAの出力pinをオシロスコープで観察できる簡単なプログラムで走らせると動作していることが確認できましたが、退避・復帰が行われているかは不明です。 他に自動退避・復帰を確実に実行するためのプログラム等の操作を怠っていないでしょうか? 初心者で認識が誤っていないのか判断が出来ません。 対象型番 PIC16F1933 ? PIC16F1934? PIC16F1936 ? PIC16F1937? PIC16F1938 ? IC16F1939 PIC16F193X/LF193Xデータシート記述より(P71,72) 〇「このデータシートに記載されているデバイスRETFIE 命令では、割り込み前に実行していたアドレスをスタックから取得し、シャドウ レジスタから保存した内容を回復し、GIE ビットをセットすることによって、ISR から通常動作に復帰します。」 内容保存機能 〇「割り込み動作に遷移する際、復帰時の PC アドレス値がスタックに保存されます。また、次に示すレジスタ値も自動的にシャドウ レジスタに保存されます。 ・W レジスタ ・ ステータス レジスタ (TO および PD を除く) ・BSR レジスタ ・FSR レジスタ ・ PCLATH レジスタ 割り込みサービス ルーチンから通常動作に戻るとき、自動的にこれらのレジスタ値が回復されます。 とあります。

  • PICとパソコンの通信について質問です。

    現在、「PICで楽しむネットワーク接続機器の自作」という本でPICの勉強をしております。 PICおよびC言語に関しては超初心者です。 初心者なので本の通りに作成した実験基盤と本に付属していたVBのソフトを使用し、パソコンで実験基盤は本の通り正常に動作しております。 (具体的にいえば第6章の6と7のUDPおよびTCPでの操作の部分です。) さて、質問の内容ですがUDPでもTCPでも同じ結果ですが、1対1(マイコン1、パソコン1台)では問題無いのですが、1対2(マイコン1、パソコン2台)になるとどちらのソフトもフリーズしてしまいます。 ネットワークに関する知識もないので、ポートやらその他の事情(マイコン側の制限?・VBソフト側の制限?)でこうなるのかもしれませんが、1つの基盤を2台以上で操作できるようにするにはどのようにすればよいかわかりません。 どのようにすれば2台以上のパソコンで同時に操作できるようになるのでしょうか? UDPの場合、PIC側はローカルポート10002、リモートポート10001で通信しているようです。(TCPは50002と50001) そもそも2台のパソコンからPIC側の10002のポートへは複数の通信はできないのでしょうか? 質問の内容自体詳細にどのようなことを説明すれば良いかも理解しておりませんが、この内容で理解できる方は問題ありませんが、できれば本をお読みになった方にご回答いただければ幸いです。 よろしくお願いいたします。

  • パソコンが異音とともに停止

    (質問をまとめ直しました。よろしくお願いします><) パソコン使用中にいきなり、「ガガガガガ」という異音とともに完全に画面がとまりました。これはフリーズとも違い完全に止まりました。 その後電源を落とし再び起動させようとすると起動自体はしてるようなのですが画面が真っ暗なままbios画面なども一切表示されません。(このときの起動音は普段とやや違う気もします。) 二週間前にも同じことがあり、そのときは、マザーボードのボタン電池を入れ直したら、画面がbios設定画面などに進み無事に使えるようになりました。それからは不自由なくパソコン使えていたのですが、昨日また止まったんです。同じように対処したところ、3時間くらいあとに異音とともにパソコンは止まり、電池を入れ直しても今回は復活しませんでした。(今ここから進展なし) 昨日はボタン電池を新しくしてみたのですが、まちがえてリチウム電池でなく、アルカリ電池を入れてしまいました。もしかするとそのせいで無理に起動させられて3時間後に限界きたのかもしれません。 今日新しくリチウム電池を買ってきたのですが、相変わらず画面は真っ暗です。 どなたか、原因と対処方法をアドバイスいただければ幸いです。 補足:二週間前はホコリが原因でファンかなにかが物理的に詰まったのかと思って、溜まっていたホコリをエアダスターで掃除しました。 また昨日はcpuのファンの周りを取り囲む配線がファンにぶつかってしまいそうな位置にずれてたのでそれを直しました。 pc詳細ですが、マザーボードはfoxconnのp67a-s-b3、intelのcorei7 2700k ,gtx560ti, メモリは普段十分に余っていたと思います。(多くてcpu使用率10パーセント~20パーセントとか) ファンは上と後ろとグラボとマザーボードとたくさんついてます。 電源は大きめのがついていたはずです。 画面つかない時の内部ですが、マザーボード上で58という数字が光っていました。調べたところ、コード58は、「8259 programmable interrupt controller mask register OK」というものみたいです。http://miro.pair.com/ami-bios/ただこのサイトであってるかわかりません。違うかも。 よくわかりませんが、Programmable Interrupt Controller はpicという割り込みコントローラーのことみたいですね。そして8259ですが、引用➡「もっともよく知られているPICの一つに、8259Aがある。これはx86アーキテクチャのPCに採用されている。今では、これはx86 PCの中で一つの単独のチップとしては存在していない。むしろ、その機能はマザーボードのサウスブリッジの一部として取り込まれている。」 で、Interrupt Mask Registerは、割り込みマスクレジスタといい、各種割り込みの入力を禁止(マスク)するレジスタみたいですね。ちょっとこれ以上は自分はわかりませんでした。 あと、電池入れ直しについてですが、アルカリ電池で試したときなので意味ないかもですが、1時間おいてダメで、10時間おいてもダメでした。先ほどリチウム電池を買ってきたので、今度は時間をおかずドライバーでショート?させ、電圧を抜いてから入れましたが、やはり画面が立ち上がりはしませんでした。ただ、ドライバーが電気を通すやつなのか不明なので、ショートできてない可能性も高いです。 あとマザーボードに不具合を知らせるビープ音スピーカーはついていません。今日買ってこようかと思っています。

  • 加速度センサーを使ってゲームを操作したいと思っています。

    加速度センサーを使ってゲームを操作したいと思っています。  友人に障害があり、麻痺で左手がほとんど動かない状態です。右手の指は少し動かせますが腕全体を動かすことは難しいようです。しかし頭、顎が動かせます。  本人はゲームが大好きで、リハビリのためにゲームをしておりますが、左手で十字キーの操作が難しいようです。  片手で操作できるコントローラーを試してみましたが、右手の指はそんなに大きく動かせないようで、すべての操作ができませんでした。  ゲームのコントローラーはプレステです。  今、考えているのは右手で△、□、○、×を操作して、顎や頭に加速度センサー、傾きセンサーを付けてそれから出力される信号を十字キーにつなげ、上下左右を操作したいと思っています。  しかしPIC?マイコン?の知識や技術がまったくない素人ですので、調べてみましたが、よくわかりませんでした。  加速度センサーを使ったキットなどが売られているようですが、流用できないのでしょうか。  また、顎や頭で十字キーを操作できる違った方法をご存知の方、いい方法があったら教えてください。  半田付けはまったくの素人よりできると思います。  よろしくお願いします。

  • PWM制御のデューティ変更時におけるトラブル

    SH7211マイコンのPWM(モード1)を使用して、定電流制御をしています。 PWMの周期を10KHzとし、その割り込みの周期で電流値を増設のADコンバータで取得、PID演算の後にPWMのデューティを変更して電流を制御するフィードバック機構です。 この時、10KHzで割り込みをして電流を一定に保つようデューティを常に変更しているのですが、過度に電流を流さないようデューティの値を変更する時はデューティが50%以上にならないようにしています。 ですが、PWM出力をオシロで見ていると、例えば電流値を5Aから1Aへ変更しようとした時、変更するタイミングで何故かデューティが100%以上になってしまい、本来電流値が下がるべき所で一瞬だけ5A以上となる現象に悩まされています。 CPUのマニュアルに、「周期レジスタとデューティレジスタのコンペアマッチが同時に発生すると出力は変化しない」とあり、その時デューティが100%以上になってしまう動作例が載っているのですが、プログラム上でデューティは50%以上にならないようにしていますので、この箇所は問題ないかと思います。 今現在わかっている事ですが 1) 割り込みで常にデューティは書き換えているのですが、電流値を変化させた時、つまりデューティレジスタの値を急激に変化させた時に発生しているように見えます。2A→1A程度の変化では発生しません。 2) 5A→1Aと減らした時と、1A→5Aと増やした時両方で発生します。 3) デューティを変更する直前でブレークをかけて、適当なタイミングでブレーク解除した時、この現象が発生する時と発生しない時があります(デューティを変更するタイミングが問題?)。 4) デューティレジスタの値を0とした場合、上記に書きました「周期レジスタとデューティレジスタのコンペアマッチが同時に発生すると出力は変化しない」事に該当するかもしれないと考え、デューティレジスタの値が0の時は強制的に値を10としましたが、この現象が発生しました。 また、プログラムの中身ですが 1) 周期レジスタの値は3999、デューティレジスタの値は0~1999の値で変化。 2) 出力は初期出力がHi、コンペアマッチでLowというHi→Low出力。 3) 割り込み関数の中でADコンバータから値を取得→PID演算→デューティレジスタの値を変更という処理をしています。 4) 割り込みレベルを他の割り込みと比べて一番高くしているため、割り込み関数処理中に他の割り込みは発生しません。 長文申し訳ございませんが、何か同じような現象が起きた方、または何かしらの解決策をご存知の方、アドバイスを宜しくお願いします。

  • IDEコントローラがインストールできません

    以前いわゆるPIO病にかかってしまいこのサイトのアドバイスに従って IDEコントローラのセカンダリIDEチャネルを削除し、 インテルチップセットドライバをインストールしたら直ったのですが 今回また同じ症状がでて、同じように回復をこころみたところ 「このハードウェアをインストールできません、このハードウェアのインストール中に問題がありました IDEチャネル  デバイスをインストール中にエラーが発生しました ドライバはこのプラットフォーム用ではありません」 とエラーメッセージがでて、IDEコントローラがインストールできません 使用環境は WindowsXP sp2 BIOS AMI CPU : Intel Pentium4 2.8 チップセット:865G マシン:Soltek DVD-D LG電子 GSA-4167B(IDEセカンダリマスターに設定)です インテルのチップセットドライバは ​http://support.intel.co.jp/jp/support/chipsets/sb/CS-009241.htm​のサイトの Intel 865Gチップセット「infinst_autol.exe(ファイルバージョン2.11.15.0)」です どうしたらよいでしょうか、よろしくお願いします