2011年11月28日

AKI-RX62マイコンで遊ぶ コンペアマッチタイマ(CMT) メモ


RX62マイコンでコンペアマッチタイマを使う.
使ったのはAKI-RX62マイコンボード

HEW+FDT

参考
http://memo--randum.blogspot.com/2011/07/rx.html

まだ検証中だけど動いたのでとりあえずメモ
(周期とかうまくいってない)


#include "iodefine.h"

void intCMT0()
{
static int count = 0;
static int pattern = 0x0f;
static int flag = 0;
//1msec

//CMT0.CMCR.BIT.CMIE = 0;
CMT.CMSTR0.BIT.STR0 = 0; // CMTカウンタ停止
CMT0.CMCNT = 0; // カウントクリア

count= count+1;

if(count > 1000)
{
PORT2.DDR.BIT.B0 = flag;
PORTA.DDR.BYTE = pattern;

flag = ~flag;
pattern = ~pattern;

count = 0;
}

CMT0.CMCR.BIT.CMIE = 1;
CMT.CMSTR0.BIT.STR0 = 1; // CMTカウンタ開始
}


int main(void)
{

long t;



// PORTA
PORTA.DR.BYTE = 0xff; // 出力端子に設定
PORTA.DDR.BYTE = 0x00; // 初期値

// PORT2
PORT2.DR.BYTE = 0xff; // 出力端子に設定
PORT2.DDR.BYTE = 0x00; // 初期値

SYSTEM.MSTPCRA.BIT.MSTPA15 = 0; //モジュールストップ状態の解除 CMTユニット0
//SYSTEM.MSTPCRA.BIT.MSTPA8 = 0; // MTUユニット1
CMT.CMSTR0.BIT.STR0 = 0; // CMTカウンタ停止
CMT0.CMCR.BIT.CMIE = 0; // コンペアマッチ割り込み停止

CMT0.CMCR.BIT.CKS = 0; // φ/8 = 12,500,000
CMT0.CMCNT = 0; // カウントクリア
CMT0.CMCOR = 12500; // 周期設定

ICU.IER[0x03].BIT.IEN4 = 1; // 割り込み要求許可
ICU.IPR[0x04].BIT.IPR = 10; // 割り込み優先レベル

CMT0.CMCR.BIT.CMIE = 1; // コンペアマッチ割り込み許可
CMT.CMSTR0.BIT.STR0 = 1; // CMTカウンタ開始

//set_psw(0x00010000); // #define PSW_init 0x00010000 // PSW bit pattern

//PORT2.DDR.BYTE = 0xff;

while(1)
{
/*
for(t=0; t<6000000; t++); // wait about 1sec
PORT2.DDR.BYTE = 0x01; // LED1
PORTA.DDR.BYTE = 0x01; // LED1

for(t=0; t<6000000; t++); // wait about 1sec
PORT2.DDR.BYTE = 0x02; // LED2
PORTA.DDR.BYTE = 0x02; // LED2
*/
}

return 0;
}


あと,"intprg".c中の


void Excep_CMTU0_CMT0(void){ }


をちょっと書き加えて


// CMTU0_CMT0
void Excep_CMTU0_CMT0(void)
{
intCMT0();
}





Interface の特集読んだ方が楽にできそう

posted by CODE-440 at 21:57| Comment(0) | TrackBack(0) | RX62N | このブログの読者になる | 更新情報をチェックする

2011年11月10日

MATLAB データを保存するクラス メモ


MATLAB データを保存するクラス メモ

オブジェクト指向とは

「ものごとで考えるプログラミング」

ある目的(処理)に関する,「もの(データ)」と「こと(関数)」をまとめて扱う.

このデータと関数をまとめたのがクラス.

という風に解釈した.

本題
まずファイルに保存するクラス
サンプルをいじって足した.
これを "@Filewriter"というフォルダの中に入れておけばよし


%% Filewriter.m
classdef Filewriter < handle
% Property data is private to the class
properties (SetAccess = private, GetAccess = private)
FileID
end % properties

methods
% Construct an object and
% save the file ID
function obj = Filewriter(filename)
obj.FileID = fopen(filename,'wt');
end

function writeToFile(obj,text_str)
fprintf(obj.FileID,'%s',text_str);
end

function writeHeader(obj, header_str)
%ヘッダー作成 エクセルグラフを作るときに便利
[rows,cols] = size(header_str);
for i = 1:rows
fprintf(obj.FileID, '%s\t', header_str{i,1:end-1}); % 文字列の書き出し
fprintf(obj.FileID, '%s\n', header_str{i,end}); % 行末の文字列は、改行を含めて出力
end
end
% Delete methods are always called before a object
% of the class is destroyed
function delete(obj)
fclose(obj.FileID);
end
end % methods
end % class



使うときは
カレントリレクトリに@Filewriterフォルダを置いた状態で以下のように使う


%% FileWriteTest.m
clear;
clc;

x = 0;
y = 0;
z = 0;

FileData1 = Filewriter('data1.txt');
header_str = {'count', 'x', 'y', 'z'};
writeHeader(FileData1, header_str);

sprintf('SIMULATION START')

for count=0:1:100
% 1 2 3 4
text_str = sprintf(' %d\t', count);
writeToFile(FileData1, text_str)
text_str = sprintf(' %f\t', x);
writeToFile(FileData1, text_str)
text_str = sprintf(' %f\t', y);
writeToFile(FileData1, text_str)
text_str = sprintf(' %f\n', z);
writeToFile(FileData1, text_str)
end

sprintf('SIMULATION END')


色々改良すべきところはあるがとりあえず使えるからよしとした
posted by CODE-440 at 17:45| Comment(0) | TrackBack(0) | MATLAB | このブログの読者になる | 更新情報をチェックする

MATLABでデータを保存するメモ 修正版


MATLABでデータを保存するメモ 修正版
修正前のはリンク先で(訂正してあるが)見れる
http://robotics440sblog.seesaa.net/article/232088354.html

%% データ保存プログラム
x = 0;
y = 0;
z = 0;

sprintf('SIMULATION START')
%ヘッダー作成 エクセルグラフを作るときに便利
str = {'count', 'x', 'y', 'z'}; % 文字列(セル配列)
%ヘッダーの書き出し
fid = fopen('data.txt','wt'); % 書き込み用にファイルオープン
[rows,cols] = size(str);
for i = 1:rows
fprintf(fid, '%s\t', str{i,1:end-1}); % 文字列の書き出し
fprintf(fid, '%s\n', str{i,end}); % 行末の文字列は、改行を含めて出力
end
fclose(fid); % ファイルクローズ

[fid, message] = fopen('data.txt', 'a'); %既存ファイルに書き加える
for count=0:1:100
% 1 2 3 4
fprintf(fid,' %d\t', count);
fprintf(fid,' %f\t', x);
fprintf(fid,' %f\t', y);
fprintf(fid,' %f\n', z);
end

status=fclose(fid);
sprintf('SIMULATION END')
ラベル:Matlab
posted by CODE-440 at 16:29| Comment(0) | TrackBack(0) | MATLAB | このブログの読者になる | 更新情報をチェックする