電子工作でLEDを制御したときのMEMO。
使ったもの
マイコン:R5F100LE(64pin)
開発環境:CS+
デバッガ:E1エミュレータ
その他:ブレッドボード、LED7コ、抵抗7コ、ジャンパ線7本
勘所
・今回割り当てるポートレジスタP00~P07が、マイコンボードのどこに対応するかマイコンのデータシートで確認。
・電子部品たちを組み上げる。
・CS+で今回使用するマイコンの型番を選択し、プロジェクトを作る。
・P00~P07のポートを出力に設定。
(どのポートを使って、どのLEDを光らせるかが重量。ソフトの作りやすさが大幅に変わる)
・使用するデバッグツールをRL78(E1)に設定、プロパティよりE1からマイコンへ電源供給3.3VをON。
・mainの無限ループ内でP0=0x7F;とか書いてLED全点灯するか確認。
(P0=0x03 は P0_bit0=1,P0_bit1=1 と書くのと一緒)
・インターバルタイマ100msくらいで設定。
・ウォッチドッグは止めておく
・ユーザーコードの範囲外に書いたコードは、自動生成時に消えてしまう
・マイコンボードはプチプチの上に置いておくべし。
r_cg_timer_user.c
/***********************************************************************************************************************
* File Name : r_cg_timer_user.c
* Version : CodeGenerator for RL78/G13 V2.04.00.03 [05 May 2017]
* Device(s) : R5F100LE
* Tool-Chain : CCRL
* Description : This file implements device driver for TAU module.
* Creation Date: 2019/09/14
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_timer.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"
/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
#pragma interrupt r_tau0_channel0_interrupt(vect=INTTM00)
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
static signed long loopcnt = 0;
static unsigned char sts = 0;
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
* Function Name: r_tau0_channel0_interrupt
* Description : This function is INTTM00 interrupt service routine.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_tau0_channel0_interrupt(void)
{
/* Start user code. Do not edit comment generated here */
#if 0 /* タイマ使った点滅 */
if((loopcnt % 2) == 0){P0 = 0x7F;}
else{P0 = 0x00;}
loopcnt++;
#endif
#if 0 /* 左右にウェーブ */
if(loopcnt < 6){
P0 = (P0 >> 1);
}
else{
P0 = (P0 << 1);
}
loopcnt++;
if(loopcnt > 11)loopcnt=0;
#endif
#if 0 /* 中央から広がる */
switch(loopcnt % 4){
case 0: P0=0x08;break;
case 1: P0=0x1C;break;
case 2: P0=0x3E;break;
case 3: P0=0x7F;break;
}
loopcnt++;
#endif
#if 0 /* 中央から広がるPart2 */
switch(loopcnt % 7){
case 0: P0=0x08;break;
case 1: P0=0x1C;break;
case 2: P0=0x3E;break;
case 3: P0=0x7F;break;
case 4: P0=0x3E;break;
case 5: P0=0x1C;break;
case 6: P0=0x08;break;
}
loopcnt++;
#endif
switch(sts){
case(0):if(loopcnt < 6){
P0 = (P0 >> 1);
}
else{
P0 = (P0 << 1);
}
loopcnt++;
if(loopcnt > 11){
loopcnt=0;
sts=1;
}
break;
case(1):loopcnt++;
switch(loopcnt % 10){
case 0: P0=0x08;break;
case 1: P0=0x1C;break;
case 2: P0=0x3E;break;
case 3: P0=0x7F;break;
case 4: P0=0x3E;break;
case 5: P0=0x1C;break;
case 6: P0=0x08;break;
case 7: P0=0x10;break;
case 8: P0=0x20;break;
case 9: P0=0x40;sts=2;loopcnt=0;break;
}
break;
case(2):loopcnt++;
switch(loopcnt % 10){
case 0: P0=85;break;
case 9: P0=0x00;sts=3;loopcnt=0;break;
default: P0=~P0;break;
}
break;
case(3):loopcnt++;
switch(loopcnt % 50){
case 49: P0=0x40;sts=0;loopcnt=0;break;
default: P0 = rand() % 127;break;
}
break;
}
/* End user code. Do not edit comment generated here */
}
r_main.c
/***************************************************************************************
/***********************************************************************************************************************
* File Name : r_main.c
* Version : CodeGenerator for RL78/G13 V2.04.00.03 [05 May 2017]
* Device(s) : R5F100LE
* Tool-Chain : CCRL
* Description : This file implements main function.
* Creation Date: 2019/09/14
***********************************************************************************************************************/
/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_timer.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"
/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
long i = 0;
/* End user code. Do not edit comment generated here */
void R_MAIN_UserInit(void);
/***********************************************************************************************************************
* Function Name: main
* Description : This function implements main function.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void main(void)
{
R_MAIN_UserInit();
/* Start user code. Do not edit comment generated here */
R_TAU0_Channel0_Start();
P0=0x40;
while (1U)
{
#if 0 /* タイマなしで点滅 */
for(i=0;i<300000;i++)
{
P0=0x7F;//P0のbit0~P0のbit6を"1" (P00~P06を"1")
}
for(i=0;i<300000;i++)
{
P0=0x00;
}
#endif
}
/* End user code. Do not edit comment generated here */
}
/***********************************************************************************************************************
* Function Name: R_MAIN_UserInit
* Description : This function adds user code before implementing main function.
* Arguments : None
* Return Value : None
***********************************************************************************************************************/
void R_MAIN_UserInit(void)
{
/* Start user code. Do not edit comment generated here */
EI();
/* End user code. Do not edit comment generated here */
}
/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */