[经验] 瑞萨R7F0C80212开发自行车风火轮手记2

xsunset   2014-9-7 15:49 楼主
在第1篇(https://bbs.eeworld.com.cn/thread-446581-1-1.html)中有介绍风火轮的基本设计思想和最终效果图 本篇继续来详细说明下设计原理和遇到一些问题总结 详细设计其他比较简单: 设计图 注:图中省略了霍尔开关和各芯片的的VCC和GND连线) 工作流程: 1.用TIMER1计量两个霍尔低电平的间隔时间(TDR01的计数值),设若为T1 2.T1等分成72份(份数越多越精细,但是越有可能发生中断嵌套导致出图失败,越小的话图越粗糙,这里取72) 写入计时器TIMER0的TDR00,TIMER0作为间隔定时计数器。这样,轮子每转一圈,TIMER0会产生72个中断,让我们来控制LED灯组。 3.每个TIMER0的中断发生时,打入一串数据给LED组写入颜色 4.一圈下来,LED组写入了72组颜色,显示成图案。 其中,步3中: LDP6803的时序如下,DCLK接6,DIN连7。每个TIMER0中断发生时,写入32bit的起始帧,再根据LED灯组的LED个数,写入16*LEDCOUNT的数据。 每个三色LED由16bit数据控制,RGB分别为6,5,5bit。 5.jpg 可改进的地方: 1. LED灯组用的是8个,但其实真实场景下32个或48个LED组成的图片更炫目。只用8个的原因有二,一是手工焊太累了,二是担心太多LED会产生嵌套中断导致出图失败,即一组LED的数据还没写完,下一组中LED数据又该写了。 2. 一圈只有一个LED组的出图速度是30Km/h, 这个速度对骑手的要求较高,可以再接出两个GPIO,控制两组LED,这样的出图速度降为15Km/h 3. LDP6803的成本较高(0.47RMB PCS),功能也很牛B, 可以控制3色LED产生全彩效果, 而实际上限于R7F0C80212的存储能力和工作频率,我 人为地将它限制成了多彩(即只有RGB三种颜色),浪费了LDP6803的能力。 4. 通过手机,用蓝牙控制风火轮,感觉会更拉风,当然这更远超R7F0C80212的 能力范围了,如果要考虑实现这点,可以考虑自带蓝牙的其他芯片。 问题总结: 1. TDR0nH 和TDR0nL的读写顺序不对会导致读写出错,这点在DATASHEET里有明确的说明,如果不慎忽略掉会导致抓狂的结果。另外,需要注意的是在调试时在Watch中添加TDR0n也相当于读取,可能会出错。 2. 虽然DATASHEET里说flash的0x0000被向量中断表占用,但是如果先定义的是const常量并不超过一定空间是会从0x00C0前面 分配flash的. 这在DATASHEET中好像没有说明 3.变量在内存中分配,常量在flash中,but若先定义了变量再定义常量,const常量也会分配到ram中 4.变量定义要在函数体内提前,这跟原先我个人学的C99不同,导致很纠结。 5.有一段时间写Pn老会引起栈中的变量变化,不懂原因。 项目总结: R7F0C80212就不一块不错的低成本的MCU,虽然说并没有提供类似其他MCU的函数式调用, 但基于寄存器的调用效率高。 不过因此而导致初线学习曲线过陡(我曾经花了好几天光看DATASHEET,当然可能跟我初次接触嵌入式能力不够有关),较低人的学习兴趣。 另外,鉴于R7F0C80212的256/512Byte的内存和1K/2K的flash, 不适合用于需求变化多端的消费类电子,而更适合于需求比较固定的产品,比如电饭煲?洗衣机? 通过这次比赛学到了嵌入式的基本知识,巩固了CS的知识,感谢舍友mars4zhu和管理员nmg的热心指导、回应。 --2014.09.07于深圳 本帖最后由 xsunset 于 2014-9-7 17:10 编辑

回复评论 (1)

代码
HotWheel.zip (19.08 KB)
(下载次数: 16, 2014-9-7 17:12 上传)

点赞  2014-9-7 17:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复