ロボット制御向けRX220用サンプルプログラムを公開しておきます。
ファイルおよび関数の使い方は
SH7125用と同じです。
プロジェクトにファイルを追加して、関数を呼び出してください。
割込み関数はintprg.cへの登録が必要になります。
※2020/02/02
ダウンロード名が数列になってしまうので、
名前を付けて保存して下さい。
クロック設定:
hwsetup_rx220.c、
hwsetup_rx220.h(32MHzに設定する関数があります)
AD変換設定:
ADconv_rx220.c、
ADconv_rx220.hPWM設定:
intMTU_rx220.c、
intMTU_rx220.h ※2019/02/25常時回生ブレーキ仕様追加
タイマ設定:
intCMT_rx220.c、
intCMT_rx220.hシリアル通信設定:
intSCI_rx220.c、
intSCI_rx220.hエンコーダ設定:
intENC_rx220.c、
intENC_rx220.h ※2019/02/25プルアップ機能追加
簡易I2C設定:intI2C_rx220.c、
intI2C_rx220.h ※2019/02/25追加
ソースファイル(*.c)とヘッダファイル(*.h)は対で使用します。
※PMW、タイマー、シリアル通信は32MHz動作を前提として作成してあります。
※intSCI_rx220はintCMT_rx220を使用しています。
※
HEW4でのみ使用確認しました。CS+では動作確認していません。
※2018/11/15 MTUでPWMとエンコーダ(位相計数)との干渉を防ぐためPWMの割込み設定を変更しました。割り込みに使用する関数および登録先の変更が必要になります。ピン配置は以下としています。
※IRQの設定用プログラムは未だ作成していません。
※エンコーダ(CLK)を使用する場合はPWM_1A,1B,2Bを併用できません。
使い方 とりあえずプロジェクトを作る
これ以降は変更する内容が特になかったのこのまま完了して大丈夫だと思います。
プロジェクトができたらファイルを追加
ダウンロードしてきたファイルを追加
※*.hファイルは追加しなくてもincludeさえすればOK
メインのソースファイル(上の設定だとrx220_test.c)の上の方でヘッダファイルをインクルード。
#include "hwsetup_rx220.h"
#include "ADconv_rx220.h"
#include "intCMT_rx220.h"
#include "intMTU_rx220.h"
#include "intSCI_rx220.h"
ここで一回ビルドが通ることを確認しておきましょう。
intprg.cのそれぞれの位置へ割り込み関数を登録
// CMTU0_CMT0void Excep_CMTU0_CMT0(
void){
CMTU0_INT_CMT0(); }
※2018/11/15変更// MTU22_TGIA2void Excep_MTU22_TGIA2(void){ MTU22_INT_TGIA2(); }// MTU20_TGIE0void Excep_MTU20_TGIE0(
void){
MTU20_INT_TGIE0(); }
// MTU23_TGIB3void Excep_MTU23_TGIB3(
void){
MTU23_INT_TGIB3(); }
// MTU24_TGIB4void Excep_MTU24_TGIB4(
void){
MTU24_INT_TGIB4(); }
// SCI1_ERI1void Excep_SCI1_ERI1(
void){
SCI1_INT_ERI1(); }
// SCI1_RXI1void Excep_SCI1_RXI1(
void){
SCI1_INT_RXI1(); }
// SCI1_TXI1void Excep_SCI1_TXI1(
void){
SCI1_INT_TXI1(); }
// SCI5_ERI5void Excep_SCI5_ERI5(
void){
SCI5_INT_ERI5(); }
//今回は使ってない// SCI5_RXI5void Excep_SCI5_RXI5(
void){
SCI5_INT_RXI5(); }
//今回は使ってない// SCI5_TXI5void Excep_SCI25_TXI5(
void){
SCI5_INT_TXI5(); }
//今回は使ってないここでもビルドが通ることを確認しておきます。
後はメインのソースファイルへプログラムを書く。
AD、PWM、タイマー、シリアル通信を使ったサンプルプログラムです。
void main(
void)
{
short ad_vale[8];
//AD変換値の格納 short trans_data[10];
//送信データ格納用 short recive_data[10];
//受信データ格納用 unsigned long timer;
//ループ制御用タイマー int i;
//各機能の初期化
HardwareSetup();
//クロックの設定 init_ADC();
//AD変換の初期化 init_CMT0(1);
//タイマー機能初期化 init_MTU();
//PWM機能初期化 init_SCI1();
//シリアル通信初期化 while(1){
//無限ループ開始 check_ai();
//AD変換の実行 analysys_sci(1);
//シリアル通信受信処理 if(timer<getsystime()){
//タイマー設定時刻を経過 timer=getsystime()+50;
//50ms後に設定 set_LED_R((getsystime()/1000)%2==1);
//1秒周期で赤点滅 set_LED_G((getsystime()/1000)%2==0);
//1秒周期で緑点滅 for(i=0;i<8;i++){
ad_vale[i]=get_ai(i);
//AD変換値を取得0-4095 }
recv_data_sci1(ID_OPE,10,recive_data);
//受信データを取得 set_pwm(PWM_PE4,recive_data[2]*4);
//0-255を0-1023に変換して出力 set_pwm(PWM_PE5,recive_data[3]*4);
//0-255を0-1023に変換して出力 set_pwm(PWM_PA0,recive_data[4]*4);
//0-255を0-1023に変換して出力 set_pwm(PWM_PA1,recive_data[5]*4);
//0-255を0-1023に変換して出力 set_pwm(PWM_PA3,recive_data[6]*4);
//0-255を0-1023に変換して出力 set_pwm(PWM_PB1,recive_data[7]*4);
//0-255を0-1023に変換して出力 set_pwm(PWM_PB3,recive_data[8]*4);
//0-255を0-1023に変換して出力 set_pwm(PWM_PB5,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]/16;
//送信データ1AD変換値0、0-4095を0-255へ変換 trans_data[3]=ad_vale[1]/16;
//送信データ1AD変換値1、0-4095を0-255へ変換 trans_data[4]=ad_vale[2]/16;
//送信データ1AD変換値2、0-4095を0-255へ変換 trans_data[5]=ad_vale[3]/16;
//送信データ1AD変換値3、0-4095を0-255へ変換 trans_data[6]=ad_vale[4]/16;
//送信データ1AD変換値4、0-4095を0-255へ変換 trans_data[7]=ad_vale[5]/16;
//送信データ1AD変換値5、0-4095を0-255へ変換 trans_data[8]=ad_vale[6]/16;
//送信データ1AD変換値6、0-4095を0-255へ変換 trans_data[9]=ad_vale[7]/16;
//送信データ1AD変換値7、0-4095を0-255へ変換 send_data_sci1(ID_OPE,10,trans_data);
//専用フォーマットでデータ送信 }
//50ms }
//end while}
//end mainビルドが通れば成功
専用フォーマットで送受信を行っています。
送受信確認用プログラム(VC++)にて動作確認ができます。
データフラッシュは
なんとなく活動記録様が公開されているプログラムが非常に使いやすいと思います。