※ ChatGPTを利用し、要約された質問です(原文:H8/3052F 同士の簡単な通信についての問題)
H8/3052F 同士の簡単な通信についての問題
このQ&Aのポイント
H8(A)側は正しく駆動し、タクトスイッチを押すと、計測を開始するとともに5Vの信号が出力できています。
問題はH8(B)側で、H8(B)のボードの電源を入れた直後から、H8(A)の信号を待たずに計測を開始してしまいます。
なぜ、H8(B)は電源を入れたとたんに駆動を開始してしまうのでしょうか?もしお分かりになる方がいらしたら、ご教授願います。
秋月製マイコンボード(マザーボードも秋月製です)、H8/3052F(以下H8)につきまして質問があります。
なお開発環境にはベストテクノロジーのGDLを使用し、C言語にてプログラムを行ってます。
現在、2枚のH8を連動させて動かすことを試みています。
目的としましてはH8を物理量の計測に使用しています。
私のとった手法は、以下の通りです。
1、H8の、ある汎用ポート同士を1本の信号線で繋ぐ
2、片方のH8(仮にH8(A)とします)のマザーボード付属のタクトスイッチを押す。これを合図にH8(A)は計測を開始し、それと同時にH8(A)の汎用ポートから信号が出力される。
3、もう片方のH8(仮にH8(B)とします)はH8(A)からの出力があるまで待機し、出力を検知すると計測を開始する。
プログラムの内容としましては、以下のようにしました。
※H8(A)の入力検知用のタクトスイッチは、ポート4のビット4についています。また信号の出力はポート1のビット0です。
※H8(B)の入力検知用のポートはポート4のビット0です。
※両ボードともに同一の安定化電源から電源を取っているので、グランドは共有できていると思います。
<H8(A)側のmainプログラム>
/*ポート定義****/
P4.DDR = 0; /*ポート4のタクトスイッチを入力に設定。押すと0、何もなしで1*/
P4.PCR.BYTE = 0xff; /*ポート4を全ビットプルアップ。*/
P1.DDR = 0xff; /*P1を出力に設定*/
/*****************/
/*スイッチ入力待機部分*********/
while(P4.DR.BIT.B4); /*タクトスイッチが押されるまで、待機*/
P1.DR.BIT.B0 = 1; /*P1のビット0から5V信号を出力、別のH8(B)に信号を送る*/
/******************************/
(~以下、計測プログラム部へ)
<H8(B)側のmainプログラム>
/*ポート定義****/
P4.DDR = 0; /*P4端子を入力に設定。信号入力で0、何もなしで1*/
P4.PCR.BYTE = 0xff; /*ポート4を全ビットプルアップ。*/
/*****************/
/*スイッチ入力待機部分*********/
while(P4.DR.BIT.B0); /*P4のビット0にH8(A)からの信号入力があるまで、待機*/
/******************************/
(~以下、計測プログラム部へ)
以上のようなプログラムを組みました。
H8(A)側は正しく駆動し、タクトスイッチを押すと、計測を開始するとともに5Vの信号が出力できています。
問題はH8(B)側で、H8(B)のボードの電源を入れた直後から、H8(A)の信号を待たずに計測を開始してしまいます。
最初はH8(B)のポート4ビット0の初期値に0が入っており,いきなりwhile文を抜けてしまうのかと思いました.
そこで,H8(A)からの信号線を外しますと、ずっと計測待機状態に入るのでプログラム的には一応回っているようです。
(私の認識では,ハードウェアマニュアルによればポート4の初期値は全ビット0ですが,MOSプルアップをすることにより,全ビット1に反転する(?)と考えています)
次に,H8(A)側から予期せぬ信号が入力されているのかと思い,テスターで電圧を測ってみました.
しかし,タクトスイッチ入力前は0Vで,入力後は5Vが出力されており,見かけ上は問題がなさそうでした.
なぜ、H8(B)は電源を入れたとたんに駆動を開始してしまうのでしょうか?
もしお分かりになる方がいらしたら、ご教授願います。
お礼
お返事が遅れまして申し訳ありません. 大変,丁寧な助言をしてくださいまして,ありがとうございます. ご指摘の通り while( 0 == P4.DR.BIT.B0 ); と訂正しましたところ,正常に動きました. また,アドバイスも大変参考になりました. この2点についても,考慮させていただきます.