发 帖  
原厂入驻New
[分享] 【MM32F103试用体验】家电控制中心设计分享 【已完结】
2016-8-9 17:24:23  4537
分享
本帖最后由 guo8113 于 2016-8-28 11:15 编辑

      是时候回到项目了,花了不少时间移植了ucGUI+ FreeRTOS, 这就为要做的应用提供了一个框架。网上的参考还是比较多的,ucGUI和FreeRTOS都可以找到。由于没怎么用过ucGUI所以使用起来也花了不少时间,同时也要提一个improvement,rtc的hardware demo是没有AlARM设置的,这也导致起初在RTC上讨论了一翻,也测试了一番。
      我会给出我的所有代码,为了倡导开源,代码采用LGPL license,用了此代码,也必须开源。欢迎大家在此基础上进行开发。 当然时间仓促,代码质量很差,将就看看吧。
       我目标是实现一个好用的、界面友好的电器控制中心,说白了就是控制继电器
            1. 万年历,最基本的功能提供时间与多组定时功能。【已完成】
            2. 环境检测,最起码芯片内部的温度可以采集。【很简单,不打算做了】
            3. 多组定时开/关继电。【已完成】
            4. 低功耗 【已完成
      已知的bug: 目前采用alarm.c 里的Alarm_SetOneAlarm()函数设置闹钟,目前的实现对于多个闹钟的设置有问题,也就是说本意想可设多组闹钟,触发后自动重装下一组闹钟,此功能尚不完善。
       在开发过程中还是遇到了一些问题,比如万年历的实现,一开始没有用ucGUI,那叫一个痛苦,检测触摸屏要算坐标;再有用FreeRTOS时多个任务间的同步互斥,也是需要思考。屏幕校准时钟显示、超时息屏。。。。。还有一个很难受的问题是,Flash不够用了,128KBflash用了RTOS和ucGUI 后基本差不多了用的, 还好KEIL可以对不同的文件实行不同优化,MM的驱动优化后就不能跑了,所以只优化ucGUI和FreeRTOS,优化后多了点空间。
      后来优化-O3代码大小不怎么变化了,还是不够用,于是找了KEIL如何优化代码大小,这个帖子可以参考
http://blog.csdn.net/abclixu123/article/details/46923725
      好歹可以放的下代码了,本来想搞个fatfs,留后面有时间搞吧。
       目前终于搭起了框架,实现的功能仅仅是时间设置、闹钟设置功能,但是可以基于此框架继续完善功能。还有UI的设计挺耗时间就不折腾了,下面是运行效果。

IMG_20160806_121848.jpg
IMG_20160806_121911.jpg
IMG_20160807_230111.jpg

周末又是一天折腾,实现了触摸屏校准和控制中心应用选择,如图:
IMG_20160814_182027.jpg IMG_20160814_182033.jpg
最重要的是实现了多组定时控制的功能,目前还没有集成到UI 中,通过串口输出8组定时数据,定时数据会保存在EEPROM中,所以掉电也不会丢失。
termianl.png

继续编程 , 经过一天的努力终于把闹钟显示控制界面搞定了,这个过程中遇到了个问题,我在两个对话框里的控件使用了相同的ID导致了软件莫名其妙的行为,起初以为只有一个对话框里的控件ID不同就可以,看来要所有用到的控件的ID都应该不同,后来调试过程中貌似又不是这个原因,目前仍存在一定的bug,不得而知。下图是 采用ucGUIBuilder创建的对话框:
diaglog.PNG
1.jpg
查找可用的GPIO, 看了下引出来的排针基本上都被LCD之类的占用了。引脚还是有点少,只能使用RF接口的两个pin了:PA4,PC4;这个是最简单的控制GPIO, 在软件中通过了PendSV的形式来控制,RTC闹钟中断后,在中断的下半部实现GPIO控制。
pin.PNG

2.jpg
3.jpg
然后实现了低功耗设计:
1. FreeRTOS低功耗,简单来说就是采用tickless idle,
在FreeRTOSConfig.h里定义
#define configUSE_TICKLESS_IDLE 1
采用FreeRTOS实现的空闲时不进行Systick唤醒来实现基本的低功耗。
2. 关闭外设,耗电最大的应该是屏幕,对屏幕进行超时关闭,一段时间没有操作,会关闭屏幕,通过点击屏幕或按键实现屏幕的唤醒。


更加详细的实现请参考源码(19楼),后面有时间会开贴讲解。
最后感谢灵动,感谢大家能够指出不足或继续开发。

18
2016-8-9 17:24:23   评论 分享淘帖
25 个讨论
源码在此,不知道怎么使用的,参考:
http://bbs.elecfans.com/forum.ph ... p;page=1#pid4975559

smart prj_v0.9.zip

2.07 MB, 下载次数: 35

改进了模拟时钟的显示位置;
重新实现了多组始终的生效方法,多组闹钟可用。

smart prj_v1.0.zip

2.1 MB, 下载次数: 27

do a good job.
2016-8-9 18:11:26 评论

举报

大作已经出现雏形了
2016-8-10 09:17:25 评论

举报


做好还是挺难的。
2016-8-10 09:38:33 评论

举报

MMCU5721167 发表于 2016-8-10 09:17
大作已经出现雏形了

哈哈,自己搞噶玩玩,
2016-8-10 09:39:08 评论

举报

看来大项目就要来了
good job
2016-8-10 14:02:13 评论

举报

新手完全看不懂啊
2016-8-11 18:31:37 评论

举报

guo8113 发表于 2016-8-10 09:38
做好还是挺难的。

是的,做出来很简单但是做稳定很困难。
2016-8-11 18:45:58 评论

举报

zhifubao 发表于 2016-8-11 18:45
是的,做出来很简单但是做稳定很困难。

所以选用了RTOS, 免得自己搞的逻辑出bug。功能做全,界面做美,着实挺耗时间。
2016-8-12 17:08:22 评论

举报

这是谁的板子

上海灵动MM32F103.....
2016-8-15 09:26:15 评论

举报

guo8113 发表于 2016-8-15 09:26
上海灵动MM32F103.....

把代码放出来大家协作搞一下
2016-8-15 09:42:20 评论

举报

上海蓝居 发表于 2016-8-15 09:42
把代码放出来大家协作搞一下

代码会放出来的。准备搞个github,代码整理下再放上去,要不然乱乱的。
2016-8-15 10:18:30 评论

举报

楼主的项目进度很快啊
2016-8-15 14:39:45 评论

举报

MMCU5721167 发表于 2016-8-15 14:39
楼主的项目进度很快啊

只能周末搞搞啊,你们的demo/driver代码能上github么?
2016-8-15 19:11:58 评论

举报

今年毕设就做的这个,谢了个简单的控制界面,一路温湿度采集,简单时间显示,六路继电器,两路电机,没用UCgui,学的不深入,也还勉强实现了控制,还有通过蓝牙的APP,有时间交流交流
楼主好厉害,

只有小组成员才能发言,加入小组>>

12下一页

1441个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表