LoginSignup
0

More than 3 years have passed since last update.

電子工作LEDちかちか

Posted at

電子工作で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 */

とりあえずはちかちかしてくれましたが
X.gif
もっとワイルドな点滅パターンをエレガントなコードで書いてみたいなあ・・

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0