• 締切済み

H8/3048 マイコンのプログラムについて教えてください。

Interestの回答

  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

こんな内容が学校の課題だとも思えませんし、高々この程度の処理を行うのにH8/3048にOSをのせることも無かろうと思います。 ここでいう「インバータ」は、論理を反転させる素子という意味でいいですか? ごくあたりまえなマイコンのプログラムの流れからすると、 1.スタートアップルーチン(アセンブリ言語) 2.周辺回路の初期化 3.(割り込みを使うなら割り込み許可) 4.主となる処理を行う無限ループ 左右スイッチの操作で割り込みをかけられるかどうかは回路図みてないとわかりませんが、どうなっていますか? > リミットスイッチがOFFの場合、 > 左または右を押した場合、0.5秒 その方向に回り、停止。 > > リミットスイッチがONの場合、 > 左または右を押した場合、リミットスイッチがOFFになったら止まる。 この仕様からは (a) 左スイッチまたは右スイッチが押されていない場合 (b) 左スイッチまたは右スイッチが同時に押された場合 (c) 左スイッチが押されたまま右スイッチが押され、左スイッチが離された場合 等にどのように動けばよいのか読み取れません。 また、「スイッチが押された」というのは、 (1) 押し下げられた時点 (2) 押されたままの状態 (3) スイッチから手が離れた時点 のどのタイミングで判断するのでしょうか。

FURUTA_H
質問者

補足

ご回答ありがとうございます。 >こんな内容が学校の課題だとも思えませんし、高々この程度の処理を行うのにH8/3048にOSをのせることも無かろうと思います。 はい、学校の課題でもありません。 約 30cmほどの展示ディスプレイ用の模型を動かそうと思っております。 H8の選択は、過去に買ったものが手付かずになっていたため 今度こそ使えないかと思った次第です。 >ここでいう「インバータ」は、論理を反転させる素子という意味でいいですか? インバーターとは、モーターを駆動させるためのインバーターで、 その入力端子は、時計回り、反時計回りの2つの入力があり、 それぞれをグランドに落とすとモーターが回ります。 また、その入力には、フォトカプラやリレーで入力できるものです。 >左右スイッチの操作で割り込みをかけられるかどうかは回路図みてないとわかりませんが、どうなっていますか? 回路図に関しては、現在、下記のそれぞれの端子があるのみです。 時計回り、反時計回り、グランド 両側跳ね返りの2回路3接点 リミットスイッチの押してON、グランド です。 リミットスイッチですが、 リミットスイッチ自体が、ギヤボックスに付いています。 そのギヤボックスに、アルミの角パイプが通るようになっており、 ギヤボックス自体がパイプに沿って左右に動きます。 角パイプの両側の側面に、穴を開け、 その穴をリミットスイッチが検知するという仕組みの模型です。 秋月のH8/3048に、それぞれを入力できれば…と思っています。 >> リミットスイッチがOFFの場合、 >> 左または右を押した場合、0.5秒 その方向に回り、停止。 >> >> リミットスイッチがONの場合、 >> 左または右を押した場合、リミットスイッチがOFFになったら止まる。 >この仕様からは >(a) 左スイッチまたは右スイッチが押されていない場合 >(b) 左スイッチまたは右スイッチが同時に押された場合 >(c) 左スイッチが押されたまま右スイッチが押され、左スイッチが離された場合 >等にどのように動けばよいのか読み取れません。 仕様に関しては、 b) と c)は、跳ね返りのスイッチのためありません。 >また、「スイッチが押された」というのは、 >(1) 押し下げられた時点 >(2) 押されたままの状態 >(3) スイッチから手が離れた時点 >のどのタイミングで判断するのでしょうか。 スイッチが押されたというのは、 1)のスイッチが押し下げられた時点です。 こんな状況です。 よろしくお願いします。

関連するQ&A

  • 神社の本殿の参拝

    神社の本殿の周りに道がある場合右回り、左回りどちらで回ったらいいのでしょう? つまり、本殿に向かって右・左どちらに行けばいいのでしょうか

  • H8マイコンでC言語で、パルスモータを制御

    パルスモータを使用した、自動車のパワーウィンドウシミュレートプログラムを作成したいのですが、if文の書き方がわかりません。 1.プログラム開始時、窓が閉まっている状態を想定。2.完全に閉じた状態から左回りに5回転したときの状態を完全に開いた状態とする。3.完全に開いた状態から右回りに5回転したときに、窓が完全に閉じた状態となる。 キー入力は、A :左回り全開:窓が完全に閉じた状態(5回転目)になるまで左回転し、停止。B :左回り部分開:キー押下時に左回転。キーを離す、窓が完全に閉じた状態になったら停止。C :右回り部分閉:キー押下時に右回転。キーを離す、窓が完全に開いた状態になったら停止。D :右回り全閉 :窓が完全に開いた状態(5回転目)になるまで右回転し、停止。 ヒントを教えてください。お願いします。 #include <stdio.h> #include <key.h> /* 外部ポート A1,B1,C1 */ #define EPA1 (*((unsigned char *)0x60000)) #define EPB1 (*((unsigned char *)0x60001)) #define EPC1 (*((unsigned char *)0x60002)) #define EPCW1 (*((unsigned char *)0x60003)) void wait(long); void counterclockwise (void); void clockwise (void); unsigned char Keydat, count, cf, state; int cwpuls,ccwpuls; void main(){ //開始時は、窓が閉じている状態 state = 0; //回転数を初期化 count = 0; /* uPD71055(82c55) 初期化 */ init_key(); Keydat = 0; cf = 0; while (1) { if((Keydat = get_key_code())==KEY_A){ //左回り全開 clockwise(); //全開(5回転目)になったら停止 EPC1 = 0; /* 一度電流OFF */ wait(90000);/* 時間まち */ } else if (Keydat == KEY_B){ //左回り部分開 clockwise(); //全開(5回転目)になったら停止 EPC1 = 0; /* 一度電流OFF */ wait(90000);/* 時間まち */ } else if (Keydat == KEY_C){ //右回り部分閉 counterclockwise(); //全閉(5回転目)になったら停止 EPC1 = 0; wait(90000); } else if (Keydat == KEY_D){ //左回り全閉 counterclockwise(); //全閉(5回転目)になったら停止 EPC1 = 0; wait(90000); } } } void wait(long time) { long i; for (i = 0; i < time; i++) ; } void counterclockwise (void){ for (cwpuls = 0; cwpuls < 96; cwpuls++){/* CW方向96パルス回す*/ cf++; if (cf == 4) { cf = 0; } /* 励磁相カウンタ+1*/ switch (cf) { case 0:EPC1 = 0x50; /* 励磁パターン出力 */ break; case 1:EPC1 = 0x60; break; case 2:EPC1 = 0xa0; break; case 3:EPC1 = 0x90; break; } wait(1000); // モーター速度 } } void clockwise (void){ for (ccwpuls = 0; ccwpuls < 96;ccwpuls++){/* CCW方向96パルス回す*/ cf--; if (cf == 0xff) { cf = 3; } /* 励磁相カウンター -1 */ switch(cf) { case 0:EPC1 = 0x50; /* 励磁パターン出力 */ break; case 1:EPC1 = 0x60; break; case 2:EPC1 = 0xa0; break; case 3:EPC1 = 0x90; break; } wait(1000); //200~500が限界 } }

  • 四畳半のたたみの敷き方

    本当にくだらない質問ですみません。 四畳半の敷き方を教えてください。 (言葉だけだと難しいですが、下の文章を理解してください。) 半畳を真ん中にして、右回りと左回りができると思います。 半畳に立ったとして、その前の半畳3枚分で一畳横長になるのは まん前の半畳分とその右ですか?左ですか? (右だと多分右回り、左だと多分左回りな気がします。)

  • 金庫の開け方について

    金庫の開け方について教えて下さい。 例えば、以下のダイヤルの場合、どのようにまわしていくのでしょうか?(防犯上の為、実際の数字とは変えてあります) 右4回 34 左3回 72 右2回 55 左1回 04 自分は、一番初めは0から右に回し、0を4回越えてから34で止め、左回りで0を3回過ぎてからの72で止め、右回りで0を2回越えた55で止め、左回りに0を1回越えてすぐの04で止めていますが、開きません。いろいろなパターンでやっているのですが、うまくいきません。 どなたか、助けてください。

  • 100V/200V4Pモーターが現在ついています、パワーが無く・・・

    100V/200V4P400Wモーターが現在ついています、パワーが無く・・・困っています、良い方法がありましたら、お教え願います。 富士電機さんのMBC6087Aと言う100V200Vモーターが付いています、機械はタイヤ交換の右回り左回りに使用しています、今現在は100V50HZ使用です、200Vにした方がパワーはありますか?また、インバーターを購入して三相200Vで2本使用するとか??本体側は4本のスイッチからの配線です。ご意見をお願いいたします。

  • スイッチ・インバータ・タイマー・モーターの接続方法

    当方、配線の知識がほとんどありません。 スイッチ・インバータ・タイマー・モーター(三相)の接続を考えています。スイッチを1度押し、回転速度を調整する目的でインバータを介してモーターを動かし、3秒後に停止させます。インバータの制御回路でスイッチを押している間だけ作動するまではできたのですが、タイマーをどのように接続したらよいかわかりません。当方のインバータは古いのか、タイマー機能がありません。簡単な説明過ぎますが、ご存知の方、よろしくお願いいたします。 スイッチ:接点構成1aの押しボタン インバータ:パナソニック dv-551 タイマー:富士電機機器制御 MS4SA モーター:産業用汎用モーター

  • 時計回りっていつから?

    日本では「右回り、左回り」っていうのを欧米では「clockwise(時計回り)とかcounterclockwise(逆時計回り)」なんていいますね。日本でも環状線なんかに使われています。右・左というより判り易くてありがたいのですが、時計の発明される前はなんて言っていたのでしょう?右回り、左回りなど生物発祥以来の現象ですし、時計は最近の文明のはず。どなたか教えてください。

  • ACモータの位相制御とインバータ制御

    Q1. 単相ACモータの速度制御には インバータ制御とトライアック等による位相制御がありますが 両者はどのような場合に使い分けられているのでしょうか? Q2. (1)インバータ制御は使えなくて位相制御しかできないモータ (2)位相制御は使えなくてインバータ制御しかできないモータ (3)どちらも使えるモータ モータの種類によって、そのように分類されることが ありましたら教えてください。

  • DCモータの回転方向

    DCモータの回転方向をトグルスイッチを使って制御したいのですが,トグルスイッチには「ON-OFF-ON」を使って,スイッチがOFFのとき,モータをブレーキ状態にさせる回路はどのように作ればいいでしょうか? また,回転方向を切り替えるトグルスイッチ1つで,2・3個のモータを別々に動かす場合,どこにスイッチを入れるのが一番いいでしょうか?

  • インバータとモータ

    どなたか、よろしくお願いします。 シーケンサ(FX2N-32MR、DC24入力、DC24Vリレー出力)とインバータ(FR-S540E-0.4K)で0.2kwのモータ二つを同時制御(ON/OFF)しようと思ってます。 モータブレーキの制御方法について教えてください。 よろしくお願いします。