工作の2S(Seiri/Seiton)

工作やプログラムでやったことをまとめていきます

TWELite 無線マイコン入門 TWEトライ1 書き込みからLチカする

●こんにちわ

無線マイコンモジュールを手に入れたので遊ぶことにします。
別に何かを咽んで制御したいとかは思ったことないので具体的な案件はないです(ツン)

なんとかだましだましLチカまでできたので、トラブルファイティングなど含めてまとめていきます

●導入

Cドライブに一式解凍して「eclipse.cmd」を実行するだけです
(構成ファイルの一部に長いファイル名のものがあり、Cドラ直下でないとうまくいかないようです。なんでそんな長いんじゃ)

●プロジェクトの新規作成

サンプルプロジェクト「App_Twelite」をコピーしていじくることにします
今回は App_ABC にしました

プロジェクトをダブルクリックで開きCtrl+C -> Ctrl+Vとおす
f:id:kt-marshal:20161008220824j:plain
コピーのダイアログが出るので新しいプロジェクト名を入力してOK
f:id:kt-marshal:20161008220458j:plain

●受信プログラムの編集

サンプルプログラムは「vReceiveIoData」関数で受信ともに、IOやPWMの設定を行っています
その処理を無効にし、メインループ内で強制的にLチカをするというものです

/** @ingroup MASTER
 * IO状態パケットの受信処理を行います。
 *
 * - 受信したデータに格納されるIO設定要求に従いIO値(DO/PWM)を設定します。
 * - 受信したデータを UART に出力します。
 * - 中継機の場合、中継パケットを送信します。
 * - 低遅延で送信されてきたパケットの TimeStamp の MSB には1が設定される。
 *   このパケットは、タイムスタンプによる重複除去アルゴリズムとは独立して
 *   処理される。
 * - IOの設定は本受信関数でのみ行われる。
 *
 * @param pRx 受信データ
 */
static void vReceiveIoData(tsRxDataApp *pRx) {
 // *** 以下、処理が続く ***

この関数の一部を下記のようにコメントアウトします(3400行あたりかな)

// ボタンの状態をグローバル変数に格納
	u8BtnState = u8ButtonState;
	// ポートの値を設定する(変更フラグのあるものだけ)
//	for (i = 0, j = 1; i < 4; i++, j <<= 1) {
//		if (u8ButtonChanged & j) {
//			vPortSet_TrueAsLo(au8PortTbl_DOut[i], u8ButtonState & j);
//#ifdef USE_I2C_LCD_TEST_CODE
//			if ((u8ButtonState & j) && sAppData.sIOData_now.au8Output[i] == 0) {
//				// 押し下げ時に限って処理する
//				bDraw2LinesLcd_ACM1602(astrLcdMsgs[i][0], astrLcdMsgs[i][1]);
//				bDraw2LinesLcd_AQM0802A(astrLcdMsgs[i][0], astrLcdMsgs[i][1]);
//			}
//#endif
//			sAppData.sIOData_now.au8Output[i] = u8ButtonState & j;
//		}
//	}

これでIO情報を受信しても勝手に制御されなくなります

次にメインループに相当する関数「cbToCoNet_vMain」にLチカのピログラムを記述します

/** @ingroup MASTER
 * 本関数は ToCoNet のメインループ内で必ず1回は呼び出される。
 * ToCoNet のメインループでは、CPU DOZE 命令を発行しているため、割り込みなどが発生した時に
 * 呼び出されるが、処理が無い時には呼び出されない。
 * しかし TICK TIMER の割り込みは定期的に発生しているため、定期処理としても使用可能である。
 *
 * - シリアルの入力チェック
 */
void cbToCoNet_vMain(void) {
	vHandleSerialInput(); // シリアルポートの処理

	static int c = 0;
	// 点滅
	if (c++ < 500){
		vPortSetHi(18);
		vPortSetHi(9);
	}else if(c < 1000){
		vPortSetLo(18);
		vPortSetLo(9);
	}else{
		c = 0;
	}
}

f:id:kt-marshal:20161008224616p:plain
DO1(18)とDO4(9)にLEDをシンク接続しました

●書き込み

Ctrl+Sで保存します。デフォルトだとビルド時に自動保存してくれないみたいですね
f:id:kt-marshal:20161008223444j:plain
f:id:kt-marshal:20161008223452j:plain

問題なく完了あたらしいバイナリファイルができています
f:id:kt-marshal:20161008223608j:plain


TWE-Lite プログラマで書き込みます
f:id:kt-marshal:20161008224120j:plain
f:id:kt-marshal:20161008224126j:plain

●うごき

youtu.be


ちかちかしてますね
周期は4ms * 500 = 2secくらいかと思ったんですがそうでもないですね
ほかのイベントでも入ってしまうからですかね?

ちょっとなれてきたので本でも買っていじってみようと思います

●トラブルファイティング

書き込み時に「TWE-Lite用のファームウェアちゃいます」と
大阪のおっちゃん(らしき人)にいわれる
f:id:kt-marshal:20161008225241j:plain

プロジェクトのプロパティを開き「C/C++ ビルド」「ビルダー設定」タブ
赤枠のJN5148 → JN5164 に変更でうまくいきました
f:id:kt-marshal:20161008225408j:plain

追記:はじめからビルド構成が用意されていました
f:id:kt-marshal:20161009220225j:plain
おそらく上記でTWELiteDIPやMonoStickの書き込みができるはずです。JN5148はTWEPower?というようなほかのものみたいです