论坛» 企业专区» Renesas

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

高工
2012-08-27 11:52 1楼

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

序号 实验 楼层
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 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 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 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 5楼
占广告位三号
工程师
2012-08-27 16:19 6楼

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

助工
2012-08-28 23:24 7楼
貌似楼主没有用仿真器吧?如果不用的话,IAR又没有设置应该只是软件仿真看不到效果的吧?
高工
2012-08-29 09:38 8楼
,呵呵,我申请的是RL78G13的开发板,,,不需要仿真器啊。。难到你没有申请这个开发板吗?免费的咧!
高工
2012-08-29 09:41 9楼
,呵呵,我申请的是RL78G13的开发板,,,自带仿真器啊。。难到你没有申请这个开发板吗?免费的咧
高工
2012-09-05 14:13 10楼

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

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

回复

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