这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 试验十一:正在进行中移植,以前没做过。加油!

共31条 1/4 1 2 3 4 跳转至

试验十一:正在进行中移植,以前没做过。加油!

高工
2012-08-27 11:52:54     打赏

湖南长沙 [灿烂的牛头] 开发进程

序号 实验 楼层
1 7月24号收到板子  
2 上论坛学习别的人起步,计划第一步点亮灯P77口  
3 下载相关软件和资料  
4 IO口输出测试  
5 定时器的使用 2楼
6 按键的测试 3楼
7 蜂鸣器的测试 3楼
8 AD采样 3楼
9 串口实验(有下载) 3楼
10 液晶测试(未完成) 27楼
11 呼吸灯(定时器方式)(有下载) 3楼
12  呼吸灯(PWM方式)(有下载)  4楼
13  串并转换PCF8574  21楼
14    
15    
16    
17    
18    
19 问题贴子 问题


三、相关软件资料
     下载代码生成软件Applilet3(下载里面搜),如何使用请看veiko的贴,http://forum.eepw.com.cn/forum/main?url=http%3A%2F%2Fforum.eepw.com.cn%2Fforum%2F288%2F1
    下载RL78G14中文说明书(在下载里面找)
     安装IAR(安盘里有,要在网上注册下有点麻烦,不过没办法)


   四、IO口输出测试
完全参考Veiko 的贴子,
  生成完代码后只要在while(1U)里加东东就可
  while (1U)
 {
     P7=_00_Pn7_OUTPUT_0;//把P77=0;
     P7=_80_Pn7_OUTPUT_1;//把P77=1;
 }
点击下载右上角的绿色箭头可以了,按F10测试是否点亮灯。

 实验扩展在while中加入延时,函数为。
void delay()
{
  unsigned int i,j,k;
  for(i=0;i<1000;i++)
  {
    for(j=0;j<1000;j++)
      k++;
  }
}

完整的代码为:
 while (1U)
    {
        P7 = _00_Pn7_OUTPUT_0;
        delay();
        P7 = _80_Pn7_OUTPUT_1;
        delay();
    }

复位   停止 单步                               全速  退出

5.计划用中断方式实现灯的点亮。



关键词: 试验     十一     正在     进行中     移植     以前     没做     加油    

高工
2012-08-27 13:05:40     打赏
2楼
五、用定时器方式实现灯的闪烁
打开Applilet3,OPen你上次保存的文件(我的是time.cgp)
点击Timer 如下图

在Channel 0中选择:Interval Time (间隔时间),下一步如下图


在Channel 0的选项卡里将时间改成上图。
保存后,成生代码。。。还没完,见下面程序代码

1.打开r_cg_timer.c文件,复制R_TAU0_Channel0_Start(中断开始初始化函数)
2. 复制到r_systeminit,c中
     void R_Systeminit(void)
   {
       PIOR = 0x00U;
       R_CGC_Get_ResetSource();
       R_PORT_Create();                  //IO口初始化。
       R_CGC_Create();
       R_TAU0_Create();              //
    // R_WDT_Create(); //暂时关狗。
    
       R_TAU0_Channel0_Start();      //复制到这里。
       CRC0CTL = 0x00U;
       IAWCTL = 0x00U;
   }
3.去掉while中的点灯代码(如果不去掉,测试就不知道中断是否打开)
   while (1U)
    {
     // P7=_00_Pn7_OUTPUT_0;
     // P7=_80_Pn7_OUTPUT_1;
    }
4.在main 的上面定义一个全局变量
   unsigned char led_illume;

5.打开r_cg_timer_user.c文件,加入以下代码
        extern unsigned char led_illume;;//申明一下全局变量,在中断外面。
      #pragma vector = INTTM00_vect
      __interrupt static void r_tau0_channel0_interrupt(void)
    {
       /* Start user code. Do not edit comment generated here */
       led_illume++;       //计数值累加。
       if(led_illume==5)
             P7=_00_Pn7_OUTPUT_0;//当计数到了0.5秒时开灯
       if(led_illume>=10)//当计数到1秒时灯灯,并清计数值。
       {
            P7=_80_Pn7_OUTPUT_1;
           led_illume=0;//清计数值。
       }
 
        /* End user code. Do not edit comment generated here */
   }

6.OK。可以测试哒。。看灯是否闪烁。

高工
2012-08-27 14:27:35     打赏
3楼

六、按键试验(这个试验只是将IO口的输入设置好,读IO就可,很简单我就不贴代码了)
        深入学习:按下识别、松开识别、长按识别、短按识别、
       硬件电路:不提供,要的人可跟我联系。

七、蜂鸣器试验(我只有一直流蜂鸣器,所以给个信号就响(用了一个三个极9014做开关管控制)
       深入学习:下次买个交流的玩下,
       硬件电路:不提供,要的人可跟我联系。

八、AD采样(anananjjj的试用进程贴

8月27日 调试5:温度测定,AD数据采集 39楼

九、串口试验(测试通过,请参考wangku001wei写的串口测试程序http://forum.eepw.com.cn/thread/219928/2#12  )
     串口通讯测试通过上传打包文件
 下载:  time.zip
   注意事项: 
       1.程序使用定时器闪烁灯
       2.串口采有现有口
       3. 波特率为9600
       4.通讯要求为发送两个字符“ww”后返回“Hello!”后换行
       5.硬件设置参考wangku001wei写的串口测试程序,地址见上面。

十、液晶试验(手上有个240*160的液晶,如果试验没有问题的话准备定个一百片小批(串口的))

十一、老看别人做了呼吸灯,自己也写了一个,我也没有参考别人的,所以写的乱。
下载:
huxi_led.zip

算法我想了一中午,最后用主循环+定是器实现,不知道效果是不是想像中一样,等下我去参考下别人的。
 刚看了别人的没看仔细,我先说下我的思路吧:
1. 用了个定时器(1ms)
2.在主程序加了一个呼吸控制(就是呼吸一次一个循环)
while (1U)
    {
       if(led_sign)    /// 呼一次
        {
          led_illumesub++;
          if(led_illumesub==20)led_sign=0;//这里的为什么写20,大家可以改下试试,
                                                              ///我开始是随手写的一个
        }
        else         //吸一次。
        {
          led_illumesub--;
          if(led_illumesub==0)led_sign=1;           
        }
        delay();     //写个延时控制呼吸的速度
    }

延时函数:
void delay(void)
{
  long int i,j;
  for(i=0;i<100;i++)
    for(j=0;j<80;j++);
}
中断函数:
#pragma vector = INTTM00_vect
__interrupt static void r_tau0_channel0_interrupt(void)
{
       led_illume++;                               //写这个是做占空比控制。
       led_illumeadd=led_illume%20;   //这里20取余与主循环一样的,为什么也请大家试试
       if(led_illumeadd>led_illumesub)P7=_80_Pn7_OUTPUT_1;/////P77写高
       else  P7=_00_Pn7_OUTPUT_0;////////////////P77写低
      if(led_illume>=200)led_illume=0;/////////////////这里要不要清零?我也说不清
  }
整个程序还是容易看明白吧,只是有几个地方我也还没有搞得特明白,功能是实现了。
程序还有改进的地方,别人是用PWM做的,我还没有看到那里,还不会用。。
有哪位兄弟有更好实现方式,请留个下载的地址给我看看。


高工
2012-08-27 14:28:06     打赏
4楼

PWM方式下的呼吸灯
一、设置在Applilet3,中设置P77口为输出,设置TIME如下图。

在Channel0中选择上图的选项。
然后设置Channel 0 中的选择项如下图。

这里的时间大家可以去改下试度效果,具体情况大家试试,呵呵。。


这个80%,也请大家改改试试效果,情况保密!

二、设计思路:
1.我已经用定时器写过一个呼吸灯,所以思路上差不多,请大家参考下楼上的。
2.程序
unsigned char Led_add;    //
unsigned char Led_on;
unsigned int Led_count;
unsigned char Led_sign;

/* 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
***********************************************************************************************************************/
#pragma vector = INTTM00_vect
__interrupt static void r_tau0_channel0_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
    TMIF00 = 0U;
    Led_count++;
    if(Led_count>300)          //大于设定值进去,与我的定时器方式中的主函数中的定义类拟
   {
      Led_count=0; 
      if(Led_sign==0)    //反转标志位。
        {
          Led_on++;
          if(Led_on>=100)
          {
            Led_sign=1;
          }
        }
        else
        {
          Led_on--;
          if(Led_on<=1)
          {
            Led_sign=0;
          }
        }
    }
    Led_add++;
    if(Led_add>100)
    {
        Led_add=0;
    }
    if(Led_add>Led_on)
    {
        P7=_80_Pn7_OUTPUT_1;                                       //led off
    }
    else
    {
       P7=_00_Pn7_OUTPUT_0;                                      //led on
    }  
 
      //if(led_illumeadd>led_illumesub)P7=_80_Pn7_OUTPUT_1;
      // else  P7=_00_Pn7_OUTPUT_0;
    //if(led_illume>=200)led_illume=0;
    /* End user code. Do not edit comment generated here */
}


主函数中只有个清狗的空延时。
如下:
void  main(void)
{
    /* Start user code. Do not edit comment generated here */
    //led_illumesub=0;
R_TAU0_Channel0_Start(); //这个必须加的,不然定时器不会起动,呵呵有朋友没加这个哟!
    //led_sign=1;   
   
    while (1U)
    {
        R_WDT_Restart();
        /*
        if(led_sign)
        {
          led_illumesub++;
          if(led_illumesub==20)led_sign=0;
        }
        else
        {
          led_illumesub--;
          if(led_illumesub==0)led_sign=1;           
        }
        */
        delay();
    }
    /* End user code. Do not edit comment generated here */
}

OK。可以仿真了,,全步运行一下。调下时间重新生成代码再试下效果。

也提供个下载吧
下载:huxi_led_PWM.zip
OK,我就不上视屏了,视屏只能看效果还不如下载自己试试


高工
2012-08-27 14:36:29     打赏
5楼
占广告位三号

工程师
2012-08-27 16:19:47     打赏
6楼

收藏了,该学的东西太多了。


助工
2012-08-28 23:24:18     打赏
7楼
貌似楼主没有用仿真器吧?如果不用的话,IAR又没有设置应该只是软件仿真看不到效果的吧?

高工
2012-08-29 09:38:31     打赏
8楼
,呵呵,我申请的是RL78G13的开发板,,,不需要仿真器啊。。难到你没有申请这个开发板吗?免费的咧!

高工
2012-08-29 09:41:33     打赏
9楼
,呵呵,我申请的是RL78G13的开发板,,,自带仿真器啊。。难到你没有申请这个开发板吗?免费的咧

高工
2012-09-05 14:13:48     打赏
10楼

上传呼吸灯程序了。。在三楼


共31条 1/4 1 2 3 4 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]