忍者ブログ

Fグループ電子工作講座

秋月電子SH7125ボードで始めるマイコン開発

シリアル通信の設定(XBee S1による無線化4:マイコンの設定)

関連
XBee S1による無線化1:モジュールの初期化
XBee S1による無線化2:エクスプローラの配線
XBee S1による無線化3:ベースボードの配線

無線化するためのハードウェアが揃ったのでSH7125の設定を行います。

SH7125ベースボード2つで遠隔制御の回
のプログラムをベースに使います。
シリアル通信設定ファイルintSCI.c、intSCI.hをSCI0が使えるように編集します。
編集方法はシリアル通信の設定(1)~(7)に準拠します。
現在ダウンロード可能なintSCI.cintSCI.hSCI0が使えるように編集済みです。
設定ファイルの読み込みについては遠隔制御の回を参照してください。

遠隔制御の回から変更する点はintprg.c
SCI1用シリアル通信設定
451行目付近
453行目付近
455行目付近
void INT_SCI1_ERI1(void){/* sleep(); */}
void INT_SCI1_RXI1(void){/* sleep(); */}
void INT_SCI1_TXI1(void){/* sleep(); */}

void INT_SCI1_ERI1(void){SCI1_INT_ERI1();}
void INT_SCI1_RXI1(void){SCI1_INT_RXI1();}
void INT_SCI1_TXI1(void){SCI1_INT_TXI1();}
に加えて

SCI0用シリアル通信設定
443行目付近
445行目付近
447行目付近
void INT_SCI0_ERI0(void){/* sleep(); */}
void INT_SCI0_RXI0(void){/* sleep(); */}
void INT_SCI0_TXI0(void){/* sleep(); */}

void INT_SCI0_ERI0(void){SCI0_INT_ERI0();}
void INT_SCI0_RXI0(void){SCI0_INT_RXI0();}
void INT_SCI0_TXI0(void){SCI0_INT_TXI0();}
を編集することでSCI0が使用可能になります。

メインプログラムは4か所を変更することで使用ポートがSCI1からSCI0へ変わります。
<設定>
#include "iodefine.h"
#include <stdio.h>
#include "io_setup.h"
#include "ADConv.h"
#include "intMTU.h"
#include "intCMT.h"
#include "intSCI.h"

void main(void){
    //変数定義
    short ad_vale[8];    //AD変換値の格納
    short pwm_out[8];    //PWM出力値の格納
    short trans_data[10];    //送信データ格納用
    short recive_data[10];    //受信データ格納用
    unsigned long timer;    //ループ制御用タイマー
    int i;

    //各機能の初期化
    hardware_setup();    //汎用IOの初期化
    init_ADC();            //AD変換の初期化
    init_MTU();            //PWMの初期化
    init_CMT0(1);        //タイマーの初期化
    init_SCI0();        //シリアル通信の初期化

    timer=getsystime();    //現在時刻の取得(intCMT)

    while(1){    //無限ループ開始
        check_ai();            //AD変換の実行
        analysys_sci(0);    //シリアル通信受信処理

        if(timer<getsystime()){        //タイマー設定時刻を経過
            timer=getsystime()+50;    //50ms後に設定

            for(i=0;i<8;i++){
                ad_vale[i]=get_ai(i);    //AD変換値を取得0-1023
            }

            recv_data_sci0(ID_OPE,10,recive_data);    //受信データを取得

            set_pwm(PWM_PE0,recive_data[2]*4);    //0-255を0-1023に変換して出力
            set_pwm(PWM_PE1,recive_data[3]*4);    //0-255を0-1023に変換して出力
            set_pwm(PWM_PE8,recive_data[4]*4);    //0-255を0-1023に変換して出力
            set_pwm(PWM_PE9,recive_data[5]*4);    //0-255を0-1023に変換して出力
            set_pwm(PWM_PE10,recive_data[6]*4);    //0-255を0-1023に変換して出力
            set_pwm(PWM_PE11,recive_data[7]*4);    //0-255を0-1023に変換して出力
            set_pwm(PWM_PE12,recive_data[8]*4);    //0-255を0-1023に変換して出力
            set_pwm(PWM_PE13,recive_data[9]*4);    //0-255を0-1023に変換して出力

            //送信用データを組み立て
            trans_data[0]=0;            //送信データ0内部状態
            trans_data[1]=get_sw1();    //送信データ1スイッチ入力
            trans_data[2]=ad_vale[0]/4;    //送信データ1AD変換値0、0-1023を0-255へ変換
            trans_data[3]=ad_vale[1]/4;    //送信データ1AD変換値1、0-1023を0-255へ変換
            trans_data[4]=ad_vale[2]/4;    //送信データ1AD変換値2、0-1023を0-255へ変換
            trans_data[5]=ad_vale[3]/4;    //送信データ1AD変換値3、0-1023を0-255へ変換
            trans_data[6]=ad_vale[4]/4;    //送信データ1AD変換値4、0-1023を0-255へ変換
            trans_data[7]=ad_vale[5]/4;    //送信データ1AD変換値5、0-1023を0-255へ変換
            trans_data[8]=ad_vale[6]/4;    //送信データ1AD変換値6、0-1023を0-255へ変換
            trans_data[9]=ad_vale[7]/4;    //送信データ1AD変換値7、0-1023を0-255へ変換

            send_data_sci0(ID_OPE,10,trans_data);    //データ送信

        }//50ms
    }//end while
}

ホストプログラム等を使って動作確認を行います
ホストプログラム設定ファイルCOM_Settings.iniのPortNumはXBee USBインターフェースボードキットの設定時に確認したポートへ変更して使用します。

PCXBee USBインターフェースボードキットXBeeエクスプローラマイコン
の順にデータが流れて無線通信が可能になったはずです。
ホストプログラムの上2つのスライダを動かしてマイコンのLEDが調光できれば成功です。

マイコン間で無線通信を行いたい場合はXBeeエクスプローラとマイコンの配線をもう一式用意してください。
PR

コメント

プロフィール

HN:
ぼんどF博士
性別:
男性

最新コメント

[02/26 とし]
[02/25 ぼんどF博士]
[02/25 とし]
[10/25 ぼんどF博士]
[10/18 ss400]