ページ 1 / 1
H8マイコンについて質問です。
Posted: 2013年1月14日(月) 22:42
by artile
現在HEWを使いプログラムを書いているのですがどうしても1つだけ分からないところがあります。
今、H8マイコンで(ボードはwrc-003)赤外線センサを使いそれをAD変換して変換された数値により、H8マイコンボードに付いている2個のLEDを点灯と消灯させようとしているのですが、これらをキーボードから入力された信号をH8に読ませるキーボード割り込みをする為にどのように関数(?)、プログラムを書けばいいか分かりません。今このように書いていますがこれをキーボード入力により値を変化させたいです。
アドバイスよろしくお願いします。
コード:
#ifdef __cplusplus
extern "C" {
void abort(void);
#endif
void main(void);
#ifdef __cplusplus
}
#endif
/*インクルード***********************************************************/
#include<36064s.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "vs-wrc003.h"
/*マクロ***********************************************************/
/*グローバル変数***********************************************************/
/*メイン関数***********************************************************/
void main(void)
{
//制御周期の設定[単位:Hz 範囲:30.0~]
const BYTE MainCycle = 60;
Init((BYTE)MainCycle); //CPUの初期設定
//ループ
while(1){
int data = AdRead(0); //wrc-003のAN1(0番目の端子)のアナログ値を取得し代入
if(data = 50 ){ //デジタル変換後の値の範囲は0~1024 この値を自由にキーボードで変えたいです。
LED(0);
} //両方消灯
else{
LED(1); //2つのLEDが同時点灯(緑と橙)
}
}
}
#ifdef __cplusplus
void abort(void)
{
}
#endif
Re: H8マイコンについて質問です。
Posted: 2013年1月14日(月) 23:06
by box
私はその分野のことはよくわかりませんが、
artile さんが書きました:
コード:
if(data = 50 ){ //デジタル変換後の値の範囲は0~1024 この値を自由にキーボードで変えたいです。
このif文はどうも正しくないような気がします。
dataに50を代入したいのか、dataと50を比べたいのか、どちらなんでしょうか。
Re: H8マイコンについて質問です。
Posted: 2013年1月14日(月) 23:26
by artile
box さんが書きました:私はその分野のことはよくわかりませんが、
artile さんが書きました:
コード:
if(data = 50 ){ //デジタル変換後の値の範囲は0~1024 この値を自由にキーボードで変えたいです。
このif文はどうも正しくないような気がします。
dataに50を代入したいのか、dataと50を比べたいのか、どちらなんでしょうか。
すみません正しくは
です
Re: H8マイコンについて質問です。
Posted: 2013年1月14日(月) 23:56
by softya(ソフト屋)
キーボードとH8の関係を教えて下さい。
パソコンとシリアル接続ですか? それとも別の方法ですか?
Re: H8マイコンについて質問です。
Posted: 2013年1月15日(火) 00:02
by artile
softya(ソフト屋) さんが書きました:キーボードとH8の関係を教えて下さい。
パソコンとシリアル接続ですか? それとも別の方法ですか?
はい、パソコンとはシリアル接続でつなげます。
マニュアルです
WRC-003テクニカルマニュアル
Re: H8マイコンについて質問です。
Posted: 2013年1月15日(火) 01:03
by softya(ソフト屋)
ここが参考になると思います。
「Beauto ステップアップ講座4 対話形式パラメータ調整画面の作成: 山口自動機械 作業日誌」
http://kazeusagi2005.cocolog-nifty.com/ ... 921-1.html
Re: H8マイコンについて質問です。
Posted: 2013年1月15日(火) 02:52
by artile
ありがとうございます。
これでもう少しやってみたいと思います。
Re: H8マイコンについて質問です。
Posted: 2013年1月16日(水) 00:17
by artile
ためしましたがダメでした。H8/36064に文字を入力する為にシリアル通信をしたいのですが出来ません。
Re: H8マイコンについて質問です。
Posted: 2013年1月16日(水) 00:28
by softya(ソフト屋)
ボーレートなどは一致していますか?
あと基本機能として「WRC-003テクニカルマニュアル」に書いている機能で通信できるみたいですが、それは出来ていますか?
Re: H8マイコンについて質問です。
Posted: 2013年1月16日(水) 00:39
by artile
softya(ソフト屋) さんが書きました:ボーレートなどは一致していますか?
あと基本機能として「WRC-003テクニカルマニュアル」に書いている機能で通信できるみたいですが、それは出来ていますか?
ビットレートの事ですか?
実は大学の課題で明日までに提出なのです。課題の内容は温度計をマトリックスLEDでグラフ化し、その温度の上限の数値をキーボードの入力で設定し上限を超えたらブザーを鳴らすと言うものです。コピーされるのを恐れたので別のプログラムにして書きました。
コード:
#ifdef __cplusplus
extern "C" {
void abort(void);
#endif
void main(void);
#ifdef __cplusplus
}
#endif
/*インクルード***********************************************************/
// #include <sys/time.h>
#include<36064s.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "vs-wrc003.h"
/*マクロ***********************************************************/
/*グローバル変数***********************************************************/
/*メイン関数***********************************************************/
void main(void)
{
//制御周期の設定[単位:Hz 範囲:30.0~]
const BYTE MainCycle = 60;
// BYTE pitch = 16;
int L0[8],L1[8],L2[8],L3[8],L4[8],L5[8],L6[8],L7[8]; //温度data
int Max[8];
int Timer1 = 1; //スクロール間隔
int Timer2 = 1000; //data更新時間 後で10000にする
int ini=0;
int count;
Init((BYTE)MainCycle); //CPUの初期設定
while(1){ //メインループ
int data = AdRead(0); //センサの値を取得し,dataに代入 AN1=0,AN2=1,AN3=2
if(ini< 1){
L0[0] = 1;
L0[1] = 1;
L0[2] = 1;
L0[3] = 1;
L0[4] = 1;
L0[5] = 1;
L0[6] = 1;
L0[7] = 1;
L1[0] = 1;
L1[1] = 1;
L1[2] = 1;
L1[3] = 1;
L1[4] = 1;
L1[5] = 1;
L1[6] = 1;
L1[7] = 1;
L2[0] = 1;
L2[1] = 1;
L2[2] = 1;
L2[3] = 1;
L2[4] = 1;
L2[5] = 1;
L2[6] = 1;
L2[7] = 1;
L3[0] = 1;
L3[1] = 1;
L3[2] = 1;
L3[3] = 1;
L3[4] = 1;
L3[5] = 1;
L3[6] = 1;
L3[7] = 1;
L4[0] = 1;
L4[1] = 1;
L4[2] = 1;
L4[3] = 1;
L4[4] = 1;
L4[5] = 1;
L4[6] = 1;
L4[7] = 1;
L5[0] = 1;
L5[1] = 1;
L5[2] = 1;
L5[3] = 1;
L5[4] = 1;
L5[5] = 1;
L5[6] = 1;
L5[7] = 1;
L6[0] = 1;
L6[1] = 1;
L6[2] = 1;
L6[3] = 1;
L6[4] = 1;
L6[5] = 1;
L6[6] = 1;
L6[7] = 1;
L7[0] = 1;
L7[1] = 1;
L7[2] = 1;
L7[3] = 1;
L7[4] = 1;
L7[5] = 1;
L7[6] = 1;
L7[7] = 1;
ini++;
}
L7[0] = L6[0];
L7[1] = L6[1];
L7[2] = L6[2];
L7[3] = L6[3];
L7[4] = L6[4];
L7[5] = L6[5];
L7[6] = L6[6];
L7[7] = L6[7];
L6[0] = L5[0];
L6[1] = L5[1];
L6[2] = L5[2];
L6[3] = L5[3];
L6[4] = L5[4];
L6[5] = L5[5];
L6[6] = L5[6];
L6[7] = L5[7];
L5[0] = L4[0];
L5[1] = L4[1];
L5[2] = L4[2];
L5[3] = L4[3];
L5[4] = L4[4];
L5[5] = L4[5];
L5[6] = L4[6];
L5[7] = L4[7];
L4[0] = L3[0];
L4[1] = L3[1];
L4[2] = L3[2];
L4[3] = L3[3];
L4[4] = L3[4];
L4[5] = L3[5];
L4[6] = L3[6];
L4[7] = L3[7];
L3[0] = L2[0];
L3[1] = L2[1];
L3[2] = L2[2];
L3[3] = L2[3];
L3[4] = L2[4];
L3[5] = L2[5];
L3[6] = L2[6];
L3[7] = L2[7];
L2[0] = L1[0];
L2[1] = L1[1];
L2[2] = L1[2];
L2[3] = L1[3];
L2[4] = L1[4];
L2[5] = L1[5];
L2[6] = L1[6];
L2[7] = L1[7];
L1[0] = L0[0];
L1[1] = L0[1];
L1[2] = L0[2];
L1[3] = L0[3];
L1[4] = L0[4];
L1[5] = L0[5];
L1[6] = L0[6];
L1[7] = L0[7];
// clock_t t = clock();
// while (clock() - t < Timer2){
count=0; //10秒毎のdata更新
while(count<Timer2/Timer1/8){
count++;
// 0点灯 1消灯
// volatile unsigned int i;
// Sync(); //同期関数60Hz
if(data < 180){ //0度以下
L0[0] = 1;
L0[1] = 1;
L0[2] = 1;
L0[3] = 1;
L0[4] = 1;
L0[5] = 1;
L0[6] = 1;
L0[7] = 1;
}
else if(data <190){ //5度以上
L0[0] = 0;
L0[1] = 1;
L0[2] = 1;
L0[3] = 1;
L0[4] = 1;
L0[5] = 1;
L0[6] = 1;
L0[7] = 1;
}
else if(data < 220){ //10度以上
L0[0] = 0;
L0[1] = 0;
L0[2] = 1;
L0[3] = 1;
L0[4] = 1;
L0[5] = 1;
L0[6] = 1;
L0[7] = 1;
}
else if(data < 230){ //15度以上
L0[0] = 0;
L0[1] = 0;
L0[2] = 0;
L0[3] = 1;
L0[4] = 1;
L0[5] = 1;
L0[6] = 1;
L0[7] = 1;
}
else if(data < 240){ //20度以上
L0[0] = 0;
L0[1] = 0;
L0[2] = 0;
L0[3] = 0;
L0[4] = 1;
L0[5] = 1;
L0[6] = 1;
L0[7] = 1;
}
else if(data < 262){ //25度以上
L0[0] = 0;
L0[1] = 0;
L0[2] = 0;
L0[3] = 0;
L0[4] = 0;
L0[5] = 1;
L0[6] = 1;
L0[7] = 1;
}
else if(data < 267){ //30度以上
L0[0] = 0;
L0[1] = 0;
L0[2] = 0;
L0[3] = 0;
L0[4] = 0;
L0[5] = 0;
L0[6] = 1;
L0[7] = 1;
}
else if(data < 272){ //35度以上
L0[0] = 0;
L0[1] = 0;
L0[2] = 0;
L0[3] = 0;
L0[4] = 0;
L0[5] = 0;
L0[6] = 0;
L0[7] = 1;
}
else{ //40度以上
L0[0] = 0;
L0[1] = 0;
L0[2] = 0;
L0[3] = 0;
L0[4] = 0;
L0[5] = 0;
L0[6] = 0;
L0[7] = 0;
}
//0入力,1出力
IO.PDR7.BIT.B2 = 0;
IO.PDR7.BIT.B1 = 0;
IO.PDR7.BIT.B0 = 0;
IO.PDR5.BIT.B0 = L0[0];
IO.PDR5.BIT.B1 = L0[1];
IO.PDR5.BIT.B2 = L0[2];
IO.PDR5.BIT.B3 = L0[3];
IO.PDR5.BIT.B4 = L0[4];
IO.PDR5.BIT.B5 = L0[5];
IO.PDR5.BIT.B6 = L0[6];
IO.PDR5.BIT.B7 = L0[7];
Wait(Timer1);
IO.PDR7.BIT.B2 = 1;
IO.PDR7.BIT.B1 = 0;
IO.PDR7.BIT.B0 = 0;
IO.PDR5.BIT.B0 = L1[0];
IO.PDR5.BIT.B1 = L1[1];
IO.PDR5.BIT.B2 = L1[2];
IO.PDR5.BIT.B3 = L1[3];
IO.PDR5.BIT.B4 = L1[4];
IO.PDR5.BIT.B5 = L1[5];
IO.PDR5.BIT.B6 = L1[6];
IO.PDR5.BIT.B7 = L1[7];
Wait(Timer1);
IO.PDR7.BIT.B2 = 0;
IO.PDR7.BIT.B1 = 1;
IO.PDR7.BIT.B0 = 0;
IO.PDR5.BIT.B0 = L2[0];
IO.PDR5.BIT.B1 = L2[1];
IO.PDR5.BIT.B2 = L2[2];
IO.PDR5.BIT.B3 = L2[3];
IO.PDR5.BIT.B4 = L2[4];
IO.PDR5.BIT.B5 = L2[5];
IO.PDR5.BIT.B6 = L2[6];
IO.PDR5.BIT.B7 = L2[7];
Wait(Timer1);
IO.PDR7.BIT.B2 = 1;
IO.PDR7.BIT.B1 = 1;
IO.PDR7.BIT.B0 = 0;
IO.PDR5.BIT.B0 = L3[0];
IO.PDR5.BIT.B1 = L3[1];
IO.PDR5.BIT.B2 = L3[2];
IO.PDR5.BIT.B3 = L3[3];
IO.PDR5.BIT.B4 = L3[4];
IO.PDR5.BIT.B5 = L3[5];
IO.PDR5.BIT.B6 = L3[6];
IO.PDR5.BIT.B7 = L3[7];
Wait(Timer1);
IO.PDR7.BIT.B2 = 0;
IO.PDR7.BIT.B1 = 0;
IO.PDR7.BIT.B0 = 1;
IO.PDR5.BIT.B0 = L4[0];
IO.PDR5.BIT.B1 = L4[1];
IO.PDR5.BIT.B2 = L4[2];
IO.PDR5.BIT.B3 = L4[3];
IO.PDR5.BIT.B4 = L4[4];
IO.PDR5.BIT.B5 = L4[5];
IO.PDR5.BIT.B6 = L4[6];
IO.PDR5.BIT.B7 = L4[7];
Wait(Timer1);
IO.PDR7.BIT.B2 = 1;
IO.PDR7.BIT.B1 = 0;
IO.PDR7.BIT.B0 = 1;
IO.PDR5.BIT.B0 = L5[0];
IO.PDR5.BIT.B1 = L5[1];
IO.PDR5.BIT.B2 = L5[2];
IO.PDR5.BIT.B3 = L5[3];
IO.PDR5.BIT.B4 = L5[4];
IO.PDR5.BIT.B5 = L5[5];
IO.PDR5.BIT.B6 = L5[6];
IO.PDR5.BIT.B7 = L5[7];
Wait(Timer1);
IO.PDR7.BIT.B2 = 0;
IO.PDR7.BIT.B1 = 1;
IO.PDR7.BIT.B0 = 1;
IO.PDR5.BIT.B0 = L6[0];
IO.PDR5.BIT.B1 = L6[1];
IO.PDR5.BIT.B2 = L6[2];
IO.PDR5.BIT.B3 = L6[3];
IO.PDR5.BIT.B4 = L6[4];
IO.PDR5.BIT.B5 = L6[5];
IO.PDR5.BIT.B6 = L6[6];
IO.PDR5.BIT.B7 = L6[7];
Wait(Timer1);
IO.PDR7.BIT.B2 = 1;
IO.PDR7.BIT.B1 = 1;
IO.PDR7.BIT.B0 = 1;
IO.PDR5.BIT.B0 = L7[0];
IO.PDR5.BIT.B1 = L7[1];
IO.PDR5.BIT.B2 = L7[2];
IO.PDR5.BIT.B3 = L7[3];
IO.PDR5.BIT.B4 = L7[4];
IO.PDR5.BIT.B5 = L7[5];
IO.PDR5.BIT.B6 = L7[6];
IO.PDR5.BIT.B7 = L7[7];
Wait(Timer1);
} // 10秒毎のdata更新ループ
}
}
#ifdef __cplusplus
void abort(void)
{
}
#endif
Re: H8マイコンについて質問です。
Posted: 2013年1月16日(水) 00:59
by softya(ソフト屋)
>ビットレートの事ですか?
それとは意味がちょっと違うんですけどね。
「ボーレートとは 「baudレート」 (baud rate, baudrate): - IT用語辞典バイナリ」
http://www.sophia-it.com/content/%E3%83 ... C%E3%83%88
データの転送レートがビットレートで スタートビット、ストップビット、パリティビット、データをあわせてのレートがボーレイトです。
ごめんなさい。今日はもう遅いので詳しい回答は無理そうです。
WRC-003は持っていませんので確認もできませんので、ご自分でできるだけ頑張ってみてください。
あと、通信処理が組み込まれていないようですが?
Re: H8マイコンについて質問です。
Posted: 2013年1月16日(水) 01:02
by artile
その通信処理の方法が分からないのです。
Re: H8マイコンについて質問です。
Posted: 2013年1月16日(水) 01:03
by softya(ソフト屋)
参考サイトにあるinputDecInt()とかの関数は使えなかったのですか?
Re: H8マイコンについて質問です。
Posted: 2013年1月16日(水) 03:06
by artile
ありがとうございます、ですがもう出来そうにありません。
すみません、もう単位諦めました。ありがたいアドバイスありがとうございました。
Re: H8マイコンについて質問です。
Posted: 2013年1月16日(水) 11:43
by softya(ソフト屋)
紹介したサイトの「4_config.c」のコードから必要な部分だけ抜き出すだけだったのですが、それが出来ないぐらいC言語が分からないと言うことでしょうか?
今後の課題で困らないと良いのですが。