查看:
35096
回复: 39 |
参赛作品《可用C代码快速开发的液晶屏人机控制器》完成
|
|||
|
发表于2018-06-19 16:20:48
|
显示全部楼层
1#
电梯直达
【报名阶段需要填写的内容】 1. 参赛者姓名(必填项): 李工 2. 单位或学校名称(选填项): 北京艾博智电子科技有限公司 3. 当前职务或职称(选填项): 总工 4. 参赛作品的名字(必填项): 可用C代码快速开发的液晶屏人机控制器 5. 简要陈述您的idea和作品(必填项): 随着物联网大趋势的推进,很多电器都升级为智能电器,而智能电器就需要一块屏幕,能显示更复杂的信息和控制,这就出现了一个特殊的行业,也就是UI体系;但是目前的UI体系要么成本非常高,要么开发起来非常费劲,为此我们着手解决这个问题;大家可以理解为把以前的486电脑整合成一个非常小型化的设备,有良好的开发体系和非常便宜的价格,这样才能切入产业链量产; 这个产品的核心是需要找一个脚本解释器,同一块屏幕,用户上传不同的脚本,即可展现不同的应用;配合相对应的量产程序,即可迅速制作复杂界面的产品; 开始以为做这么一个产品不难,毕竟有lua、miniPython等脚本语言,如果我们定位使用类似stm32f429系列的芯片,可以很容易实现,但是那没有商用价值,顶多算科研研发项目,因为这样这款屏幕量产后生产成本导致的最后售价也会将近200元;因此,我们的目标是在10元以内的MCU上完成这样的功能;(若压缩掉SDIO驱动TF卡,文件读写类,可以压缩到5元左右的芯片上跑) 我们的产品定位于工控,也就是说,必须解决MCU内存不停分配回收导致的碎片问题,否则不可能长期工作;其次,对内存(RAM)的苛刻要求,也就造就了没有先例,我们主要的一个要求,就是不管你写的程序如何复杂,代码如何长,或者说有一个界面,还是有100个界面,要求的RAM内存必须是一定的,不能说界面数量大,就要求RAM需求大,为此我们费了前面的4个版本,历时4年的开发,才有了现有的内核版本,在这中间我们深刻的理解“没有核心技术”就没有产品 这个道理; 好了,我们来说说产品:首先整个模块对外,有2个串口和6个IO口,带一块3.5寸480*320的触摸屏(也可以有其他尺寸的屏),其中一个串口连用户的单片机或PLC,可以进行输入输出数据的传递和对各种协议进行脚本解析;另一个串口接ESP8266或NBiot;6个IO可以自行设置输出,输入,AD输入,可由代码控制; 在软件书写上,我们提供上位机开发,可以直接基于上位机开发,代码非常简单,比如: class b1=loadcom(button); //加载按钮的控件 void b1.onclick() //按钮被按下的事件 { gpio(1,1); //1号GPIO 开,输出高电平 } start(); //界面启动,开始运行 在开始,我们提供了大量的,包括按钮,图标,菜单,动态GIF ,选择项,等大量的UI组件,可以供用户使用,更关键的是,所有的UI组件也是由脚本直接开发而来的,并支持编译后非源码交付使用,这样可以在整个生态上大家迅速制作出大量的控件,也就是说任何有不满足的需求,就可以自行设计控件,控件的开发也很简单,基本就是使用GD语句完成静态显示和数据的动态显示,以及处理鼠标事件的显示而已,非常方便; 软件开发上,用户只需要将所需的控件拖拽到屏幕上,设置相应的属性,然后写相应操作后事件的处理代码,既可;对外的串口协议进行了封装,也变成可某个控件的事件;对于需要扩展IO控制的,只需上传数据包即可,界面通过数据绑定逻辑会自动刷新显示,无需写代码; 这个项目在设计上,考虑了所有的商业因素,比如量产、代码编译加密、防拷贝等因素,而且成本控制的比较好,大约3.5寸的屏最终成品模块可能100元(最新的测算,如果找到资金,进行SIP级别的封装,10K级别的产量,就可以做到销售价70元左右)出头,非常适合应用到各种产品的产业链条中;真正做到“开发板的方便,核心板的价格“; 6. 拟用到的立创商城在售物料(必填项): https://item.szlcsc.com/142738.html GD32f303rct6 https://item.szlcsc.com/175500.html 25Q64 https://item.szlcsc.com/19779.html xpt2046 7. 拟用到的非立创商城物料或其它补充(必填项): 一块3.5寸液晶屏 8. 拟用到的EDA工具软件名称(必填项): 绘制PCB 力创EDA 【作品正式发表(报名成功后进入设计阶段)需要填写的内容】 一、作品简介 例如,可以包括但不局限于以下内容: 1.作品的整机外观图片或焊接组装好的PCBA图片; 2.作品的研究背景、目的和功能、市场应用前景; 见立项陈述; 3.作品在创新性、趣味性、实用性甚至公益性方面,有哪些亮点可体现? 立项陈述中已经讲了,这里再强调一下,我们主要的创新点在于在生态上的技术创新,也就是说,软硬件设备的普及难度很大主要因为要求用户起点水平较高,如果能大幅度降低使用用户的门槛,那将是一个不朽的产品,比如 Micro:Bit 开发板,拥有海量的用户基础,但是他的缺点也很暴露,就是价格太贵,定义市场为教学市场,在实际产品设计中没有人会采用micro:bit;而我们的方法不同,首先使用产业链整合降低成本,3.5寸70元的售价,可以迅速切入用户的产品产业链中,同时把用户分为两种,写控件的和用控件的,这样可以覆盖更多的不同层次的用户,如果我们加大投入,再设计出不少与之匹配的模块,比如AD,电压电流表、电机、温湿度、PM2.5、WIFI、NBIOT、LORA.....那将对教学用户产生根本性质的影响,相信将来,不再有学生在写什么“万年历”程序,因为,用此系统可以在数分钟之内搭建一套; 在语言上,我们丢弃了C语言中比较难理解的指针概念(这是很多单片机开发者学习C语言的拦路虎),相比我们引入了直接的str变量,可以直接操作字符串;进一步降低学习难度; 二、系统构架图 用流程图或思维导图等形式,描述您的作品的组成构架,即方案图。
本系统的原理并不复杂,观看上图基本都可以理解,但是难度在于软件的工作量相当的大,图上的每一个小块分类都是一个海量的代码体系,且必须是高质量的代码; 说实话,如果代码现在丢了的话,不知道还有没有勇气再重新搞一次,太累了; 三、硬件部分的描述 1.附上原理图&PCB实物图的图片或者源文件(官方建议大家尽量用源文件上传),如果是图片,请确保图片是清晰可辨的;
上传的图只是示意图,详细,请直接访问: 在硬件实现上,电路并不复杂,中间一块GD32F303RCT6,通过SPI连接flash psram存储器和25Q64的存储器,通过GPIO端口连接液晶屏,以及触摸屏IC 2046,剩下的就是串口以及扩展引出等;屏幕的背光通过PWM端口进行调制; 2.用文字把该作品的实现原理、系统的工作过程大致讲解一下。 工作原理其实没有什么可以讲的,基本上就是大学教材《编译原理》的翻版,这里就不再重复了,我们主要讲一下UI层面的选型: 大家知道,如何快速的驱动MCU接口的液晶屏是一个难点,尤其是在MCU选型上是个问题,开始我们考虑选型stm32F0 或F1 系列,但是此系列的SPI接口速度太低,只有18M,这样SPI 就成了整个系统的瓶颈,而F401系列,居然把PB11给搞丢了(我们需要PB0~~PB15 接MCU16位总线),而再往上的STM32就基本用不起了;然后我们考察了其他型号的MCU,发现GD32F303系列的SPI主频可以上到60M,且支持QSPI,价格10元左右,带SDIO,基本满足我们需求,这点上,比STM32强多了; 但是在实际研发过程中,也产生可很多意想不到的问题,比如官方GD32F303的库带的样例代码根本上不到60M,后来找到GD官方的技术支持,解决了这个问题,但是却发现QSPI的DMA仍然调不稳定(也不是不通,就是连续工作数小时候几率卡死),费了2~3个月去解决这个不稳定,那真是噩梦,最后还是决定选择普通SPI模式,因为发现GD32的AHB实际也达不到60MQSPI,因此60M QSPI其实意义不大,降低为SPI后,A2 A3 管脚腾出,可以变为第二个串口,看来有得必有失; 不过鉴于gd的具体情况,我们也在考虑是否有更好的选择; 现在,一副整屏图(480*320)刷新到屏幕上大约30ms左右,有了这个优良的参数,为屏的使用效果奠定了良好的基础; 硬件驱动的秘密就在于大量使用DMA来提速,以及双buf乒乓方案等等........ 剩下的就是各种语句的绘制,这些倒是不难,就是代码量非常的大;
3.注明所用到的EDA工具软件名称并附上设计链接。 立创EDA: https://lceda.cn/editor#id=|95c6f8ca348c4088a7d6d4664bfd7767|9fef2ce659574c60b76706734d75aa92 四、材料清单(BOM列表) 列出您这个作品所用到的主要器件(关键器件即可),比如单片机&ARM芯片、专用集成芯片(ASIC)、传感器、功能模块等。 如果所列出的芯片是来自我们立创商城上的,最好能写出该器件的商品编号或附上对应购买链接。 https://item.szlcsc.com/142738.html GD32f303rct6 https://item.szlcsc.com/175500.html 25Q64 https://item.szlcsc.com/19779.html xpt2046 还有一块外采购的3.5寸液晶屏,带TP的五、软件部分的描述(选填) 如果您的作品涉及到软件,请列出作品对应的软件工作流程图,及关键部分的例程、源码(如果您想开源的话请上传全部源码)。 内部的算法基本参考大学教材《编译原理》,这里不再讲述,这里我们来讲述三大机制: 1)控件机制: 控件是UI的核心,在各大编程语言UI界面中都有控件的概念,控件的概念来源于类的概念,有属性和方法的概念; 首先,我们来看一下一个控件的模板: //-------声明控件的基础属性,基础属性不可以修改,也不可以调整顺序 int x1=10;#defattr(x1,int,"左上角X1坐标"); int y1 = 10;#defattr(y1,int,"左上角y1坐标"); int x2 = 110;#defattr(x2,int,"右下角X2坐标"); int y2 = 50;#defattr(y2,int,"右下角y2坐标"); int status=0x00008080;#defattr(status,status,"状态寄存器"); int status2 = 0x0000; //--------开始在此定义控件的用户属性,比如以下常用属性:---------- //str text="演示系统";#defattr(text,str,"显示字符串"); //int dotm = 16;#defattr(dotm,select,"显示汉字的点阵大小","16:16点阵;24:24点阵;32:32点阵;48:48点阵;64:64点阵"); //int cc = 15;#defattr(cc,color,"显示汉字的颜色"); //int bc = 63;#defattr(bc,color,"背景颜色"); //int pic = 0;#defattr(pic,pic,"选择图片"); //--------开始定义内部属性,不加#defattr,即控件内部变量,在上位机属性列表中不出现 //比如: //int a=0; //---create():控件的初始化,可以在此书写有关默认参数的初始化 void create() { //在此书写当前页的初始化,比如根据图片的大小,重新计算x2,y2 } //---draw():绘制背景,所有不变的东西,不随数据变化的东西都称之为背景界面 void draw() { //在此书写绘制背景的语句 //automode(bc); or tranmode(n);//选择显示模式,具体讲解请参见语句说明书 } //---show():刷新前景数据,也就是自定义属性发生变化时,界面跟着变得部分 void show() { //在此书写刷新前景的语句 //automode(bc); or tranmode(n); //选择显示模式,具体讲解请参见语句说明书 } //----onmouse方法,用户点击触摸屏上的热区,会调用此方法,其中: //t:触摸模式: t=0 按下鼠标按钮,相当于触摸屏点击 ;t=1 鼠标移动 ;t=2鼠标抬起 //rn:热区编号,允许一个控件对应多个热区,多个热区靠rn变量识别,对于按钮等整个控件一个热区,可以忽视rn void onmouse(int t,int rn) { //在此书写有关热区处理方法的代码 } //----ontimer方法:status中设置的定时器会调用此方法 //当本控件有属性数值发生变化后,系统会自动调用show方法显示,定时器代码中无需操作界面 void ontimer() { //在此书写有关定期器对数据的修改代码 } //----在此书写其他的控件方法 //某个方法加: #defattr(方法名,function,"方法说明");语句后,在界面编辑时双击控件,可以在页面程序中立即继承此方法 首先,我们定义一些控件的属性和方法,如上例,属性就是变量,并使用#defattr 宏定义,定义描述,然后书写控件的create事件,绘制背景draw事件,刷新数据的show事件,还有鼠标事件,定时器事件等,于是一个控件就做好了,可以在页面(实际就是窗体)程序中隔离的重复引用,且属性隔离; ------------------------------------------- 2)CMD机制 由于是编译系统,系统最后以微码的方式发行(非源码),并最终提供量产加密方案,防止用户写的程序被非法复制; 但是考虑到实际使用,我们增加了CMD语句的解译: 即支持: l1.text="启动";l1.show(); 这样的语句解释执行,但不支持变量和表达式; 其中:l1.show();只是表示可以执行控件的方法示例,如果只是l1.text修改内容,修改后,屏幕会自动完成刷新显示,无需调用l1.show(); CMD机制用于屏幕和其他的单片机通信,当然也可以传输二进制数据包,到屏端使用代码进行协议翻译; 3)数据绑定机制 系统命令中支持 : $"电压"="5.0V"; bind(l1.text,"电压”); 就可以实现数据绑定,当单片机通过串口传入:$"电压"="5.0V";语句设置绑定变量后,所有绑定的控件属性会自动更新(所有界面,无需代码);同时我们可以指定一些绑定变量进行实例化存储,断电不丢失; 六、作品演示 请上传您的作品的功能演示到腾讯视频,并编辑到本楼(或附上视频链接)。按要求上传视频可获得10分,具体详见活动规则。 软件界面参见 8楼 截图 硬件屏幕操作视频: https://v.qq.com/x/page/w0757an3rcp.html 上位机操作视频: https://v.qq.com/x/page/e0761y489yy.html 七、总结 例如您在完成该作品过程中的一些体会、碰到的技术问题或调试经验、作品的未来规划,及对我们主办方的建议和意见等。 这个项目深深感觉到使用通用器件的痛,在各大MCU选型中徘徊不定,感觉真正产业级别的发展,应该从芯片的ASIC级别的来设计产品,可以大幅度降低成本,而通用器件就是通用器件,你能做,别人也能做,完全束缚产品经理的想象; |
|||
|
发表于2018-06-19 23:50:33
|
显示全部楼层
5#
|
|||
|
发表于2018-06-20 14:23:59
|
显示全部楼层
6#
已经主动传播,请审核
|
|||
|
发表于2018-07-23 16:27:59
|
显示全部楼层
8#
终于做的差不多了,好累啊
|
|||
|
发表于2018-07-30 16:08:48
|
显示全部楼层
10#
完全自己的内核,为了考虑效率,采用编译模式,类似java的虚拟机体系,编译成微码(编译也更适用于用户产品,商业发行方案中不可复制也是大要求);脚本解译不太实用,因为脚本的文本会占用过多的内存,而单片机最缺的就是ram; 当然,所有控件化的体系是支持cmd的,比如cmd 可以传入命令串 :l1.text="启动";l1.show(); 这种命令是支持解析的,只是cmd命令解析不能有变量和表达式而已 |
|||
|
发表于2018-08-18 11:04:32
|
显示全部楼层
15#
更新了一部分内容
|
|||
|
发表于2018-08-19 09:58:19
|
显示全部楼层
16#
项目已经阶段性完成,已经按要求填写完一楼的全部内容,剩下就是对产品的商品化包装,以及多做一些控件,目前已经准备小批量量产测试,大家有疑问,欢迎讨论
|
|||
|
发表于2018-08-21 12:53:26
|
显示全部楼层
17#
这两天,不少项目都完成了帖子,仔细拜读了一下,发现很多项目都可以用到我们这种屏来减少开发代价,或者降低成本;还有不少相当牛X的项目功能上很牛X,但是显示UI缺很单纯,希望能够项目间横向协作,完成更多产品的商品化
|
|||
|
发表于2018-08-25 10:25:34
|
显示全部楼层
20#
这个只是一个串口屏,只能写简单的语句表达,但并不是一门真正的语言,比如: 是否支持变量? 是否可以自己书写函数? 是否可以自行制作控件? 是否可以脱离单片机完全自主运行? 实际上,大多数的串口屏都能实现一部分的UI定制,但是复杂的UI逻辑和处理逻辑便做不到了,这反而起了副作用,导致最初的学习曲线陡峭和功能天花板; 上面的哪种屏幕从开始就关注过,最早的连if语句都是不支持嵌套的,后续虽有改善,但是实在做不了复杂应用(举个例子,比如一个输入界面,要求用户输入多个下拉选择,一个日期,一个时间;估计这个屏就得拼死才能完成了吧,而我们的方案就不会,可以轻松制作出上百个控件,满足各种需求); 实际上这就是功能级产品和生态级产品的区别,生态级产品更强调的是生态,也就是产业链上的上下游,把做控件的和用控件的分离是生态级的重点,也就是说产品的生命力是在用户积累中进行用户自发的自我完善和成长,而并非完全的厂商推进,毕竟一个厂商的能力是有限的; 另外,生态级产品通过产业链整合压缩成本会产生更好的性价比,在功能增强的同时,价格也有所下降; ================== 再简单的举例说明一下,上面那个串口屏如果厂商不给你月历控件,你拿那个屏幕显示一个可以随月度自动变化的月历表试试,没有外部单片机根本不可能实现,就算有单片机,也是相当的复杂; |
|||
|
发表于2018-08-25 11:06:20
|
显示全部楼层
22#
我们很多客户也是做美容仪器的,这好像也是一个大产业
|
|||
|
发表于2018-09-03 13:38:33
|
显示全部楼层
25#
市场定位就是定位于低端mcu的,非常清晰,未来价格也表明了整个系统 3.5吋的70元左右,清晰明确 高端mcu是可以直接驱动TFT的,但是我们的项目不是硬件堆叠,主要是软件体系,比如说vct6 价格15元左右的mcu,是可以直接fsmc驱动TFT,但是点阵,存储,图形都得自己搞,开发周期长; 而再贵一些的,比如linux级别的芯片(大约价格30元左右),又得需要各种GUI软件体系,复杂度自己评估吧; 就算大家常用的emwin,复杂度也可以评估一下,我相信,到最后你会发现,自己整理出来的小批量量产(200套级别)会发现比买我们的成品还贵,这就是产业链整合的优势;更别说在软件开发上节约的时间 |
|||
|
发表于2018-09-11 14:22:29
|
显示全部楼层
29#
肯定会商品化的,定制的芯片下周到货,先进行各小批试产,然后量产; 生态需要慢慢建立的,一口吃不成胖子,这个项目起源于论坛,回归于论坛,这次得的奖金,计划用于小批量试产,试产的产品补贴给论坛,目前有个想法还没有成熟,就是对于在论坛立贴开项的项目或者第4届大赛(不过这个时间有些久)做补贴,只要不是放那吃灰就可以 |
|||
|
发表于2018-09-12 11:56:18
|
显示全部楼层
32#
多谢,不过用的都是TFT的屏,OLED的没玩过,估计用不了
|
|||
|
发表于2018-10-08 16:12:41
|
显示全部楼层
35#
我们主要集中在小屏,不是RGB接口的方案,5寸这个概念大多数是RGB的屏,可能我们最大出4.5吋的854*480的IPS屏,估计可能100出头
|
|