tag 标签: 中颖

相关博文
  • 热度 20
    2016-4-27 16:17
    1512 次阅读|
    0 个评论
    一、 温度处理模块程序: 我们采用模块化编程风格,有利于管理项目工程,也更容易查找BUG,大家千万要形成一个好的代码风格,不要一个main.c文件从头写到尾,各种函数都在main.c里面,这样让人看起来烟花缭乱,程序出现BUG也不利于分析问题。因此,最好是每个模块建立一个.c文件和一个.h文件,这样其他模块通过调用该模块的头文件即可。建议大家有空多看看代码风格方面的帖子,会对大家有个好的帮助的。好了,废话不多说,进入正题吧。 1、首先,我们建立一个temperature.h和一个temperature.c文件,将temperature.c文件添加到项目keil工程,并且在temperature.c文件中包含temperature.h文件; 2、其次,由于我们这个模块是个温度处理模块,因此我们需要定义如下三个模块,以便其他模块使用本模块的变量。所以需要在temperature.c文件中定义如下三个变量;   u16 current_temperature = 0;//用来保存当前温度值 u16 current_AD = 0;//当前温度值对应的NTC的AD值 u16 next_temperature = 0;//上一次采样温度   定义了如上三个变量以后,我们需要在temperature.h文件中声明如上三个变量为外部变量,只有这样,其他模块才能使用temperature.c文件里面定义的变量,因此需要在temperature.h文件中增加如下三行代码。   extern u16 current_temperature; extern u16 current_AD; extern u16 next_temperature;   以上三个变量就是本模块定义的全局外部变量,剩下的一些其他变量就是本模块的静态变量了,只供本模块使用,接下来的工作就是要编写程序,将采集到的值赋值给以上三个全局外部变量了。   、根据第二篇帖子的原理,大家先把NTC阻值表里面,从0到100度对应的电阻值输入EXCEL表,然后把1024和10K电阻输入excel,利用EXCEL工具,可以快速的计算出每个温度对应的AD值,本项目将AD值扩大了10倍。通过计算,得出AD值表如下表: u16 code tab_AD_to_temperature )(tmp tab_AD_to_temperature )){                                        current_temperature = i * 10;//满足if条件,当前温度为i度,并//扩大10倍                                         current_temperature += (((tmp - tab_AD_to_temperature ) * 10) / (tab_AD_to_temperature - tab_AD_to_temperature ));                               }                      }                                           if (tmp tab_AD_to_temperature ){                               current_temperature = 0;                      }                        if (tmp = tab_AD_to_temperature ){                               current_temperature = TAB_TEMPERATURE_NUMBER * (u16)10;                      }                                                    ADC_sum = 0;                      ADC_count = 0;                      process_temperature_statu = 0;//处理完成返回状态0重新采集温度                      break;            default:                      process_temperature_statu = 0;                      break;          }   } 二、 NTC 故障处理部分代码: 由于功能规格书里面要求有NTC故障检测功能,因此我们还需要编写NTC故障报警处理程序。所以我们要新建check_self.h和check_self.c文件作为故障处理模块。由于要记录各种系统故障,所以我们需要在check_self.c文件中定义如下变量: u8 error_num = 0;//错误代码变量;0:正常;1:NTC故障;2:干烧故障;3:初始//奶温过高故障。 由于error_num变量需要供外部模块调用,因此需要在check_self.h头文件中声明为外部变量,方法和温度处理模块一样。 下面直接贴出NTC故障报警处理代码: /*************************************************************************************** 名    称:check_NTC 功    能:检查NTC 参    数:无 返    回:无                                                                           ***************************************************************************************/ void check_NTC(void) {   static u8 process_check_NTC_statu = 0;//静态变量,NTC故障处理状态变量   static u16 process_check_NTC_count = 0;//计时变量     process_check_NTC_count++;//计时变量自加,2ms自加一次   switch (process_check_NTC_statu){            case 0:                      if (process_check_NTC_count = 68){//延时,确保//AD采集完成                               process_check_NTC_count = 0;                               process_check_NTC_statu = 1;//跳到状态1处理                              }                      break;            case 1:                      if (current_AD = 3 || current_AD = 1021){//NTC开路或者短路故障检测,//当前AD值小于4或者大于1020,则判断NTC故障                               set_standy_statu();//恢复所有变量为初始值                               error_num = 1;                                 PIN_LED_BUBBLE_BLUE = 0;//蓝灯亮                               PIN_LED_BUBBLE_RED = 1;//红灯灭                                 process_check_NTC_count = 0;                               process_check_NTC_statu = 2;//跳到状态2处理                              }                      break;            case 2://只有断电才能恢复process_check_NTC_statu为0                      if (process_check_NTC_count = 250){//执行NTC故障报警,500ms翻     //转LED状态                               PIN_LED_BUBBLE_RED = !PIN_LED_BUBBLE_RED;                               PIN_LED_BUBBLE_BLUE = !PIN_LED_BUBBLE_BLUE;                                 process_check_NTC_count = 0;//清楚计时变量                        }                      break;            default:                      break;         }                 } 好了,相信大家看完源代码已经清楚了NTC采集温度的处理方法了,是不是觉得很简单啊。采集到了实际奶温后,上面的逻辑控制,温度控制程序就比较好写了。 大家有没有注意到使用switch-case语句编程很简单啊,这就是传说中所谓的状态机编程,状态机就是把一个任务切割成一个一个小的部分处理,小的处理完成了,综合起来就变成完整的功能了,而且使用状态机编程,程序结构清晰明了,容易找BUG。 下一讲我会讲按键逻辑部分代码,希望大家喜欢。 由于这里面不太好编辑文档,大家可以下载附件阅读。
  • 热度 17
    2016-4-25 23:18
    1483 次阅读|
    0 个评论
    一、 定时器模块程序: 由于中颖单片机也是51内核的单片机,因此对于学校学习过中颖单片机的小伙伴来说,用起来是毫无压力的。所以,datasheet上的东西就不细说了,直接贴上初始化代码吧。 /**********************************************************************           名    称:init_timer1          功    能:初始化定时器          参    数:无         返    回:无         说    明:中颖SH79F084A系统时钟16.6MHz,2ms定时中断初值         为0XF531。                                                                       *****************************************************************************/ void init_timer1(void) {        TMOD |= 0x10;//定时器1工作在方式1        TL1 = 0x31;        TH1 = 0xf5;        TF1 = 0;//清楚定时中断        ET1 = 1;//使能定时器1中断        TR1 = 1;//开启定时器1 } 定时器中断函数源代码如下: /****************************************************************************** 名    称:timer1_isr 功    能:定时器1中断处理 参    数:无 返    回:无                                                                           *********************************************************************************/ void timer1_isr(void) interrupt 3    {        TL1 = 0x31;        TH1 = 0xf5; } 以上完成了定时器模块的程序编写,有了2ms的定时最小时基,那么接下来的所有定时工作,都可以在这个基础上完成了,很简单吧!( ^_^ ) 二、 NTC 温度采集模块软件程序: 整个系统的温度控制是通过单片机AD口采集NTC热敏电阻和10K精密电阻的分压值转化成温度的,进而控制所需的奶温,中颖单片机的AD为10位。 如上图所示,根据AD转换原理,有如下公式: (AD/1024)*Ref = 5*10/(10 + Rntc),由于中颖单片机采用内部参考电压VDD,因此Ref = 5,所以根据上式可以算出单片机所采集到的AD值,公式中Rntc可以根据NTC规格书的阻值表查询到。因此我们可以根据每个温度值对应的阻值计算出该温度所对应的AD值,将所有的温度AD值计算出来,然后建立一个表到单片机里面,从而可以得知此时的奶温。下面贴出源代码: 、 AD 初始化代码: /****************************************************************************** 名    称:init_ADC 功    能:初始化ADC 参    数:无 返    回:无                                                                           *********************************************************************************/ void init_ADC(void) {        ADCH |= (1 6 | 1 6);//规格书Datasheet有说明,请大家查阅//附件规格书的AD部分相关寄存器,此基础器是将相关IO口配置为AD功能        ADT = 0x0f|0xe0;//设置ADC的时钟周期和采样时间        ADCON |= 0x80;//使能ADC功能 } 、获取 AD 值函数: /****************************************************************************** 名    称:get_ADC_val 功    能:获得ADC 转换结果 参    数:需要采集的ADC通道 返    回:返回获取到的AD值                                                                           *********************************************************************************/ u16 get_ADC_val(u8 ADC_channel) {   u16 ADC_val = 0;     ADCON = ~(7 1);//清楚ADC通道   ADCON |= ADC_channel 1;//将需要采集的ADC通道通过参数传入     ADCON |= 0x01;//开始ADC转换     while (ADCON 0x01);//等待ADC转换完成     ADC_val = ((ADDH 2) | (ADDL 0x03));//获取转换的AD值     return ADC_val;//返回采集到的AD值 } 好了,今天就先写到这里了,有了定时器模块和AD模块,再把按键框架程序写好后,基本的程序框架就已经完成了,上层的应用功能就是通过调用这些底层的函数来实现了。下一讲我们会讲怎样通过转换出的AD值来得到实际的温度,并且根据定时器的最小时基2ms来进行一些滤波处理,有什么问题,欢迎来信探讨,兄弟们晚安!
  • 热度 14
    2016-4-24 22:39
    1160 次阅读|
    0 个评论
         一、前言 大家好,从今天开始,我将连载电子打奶器的软件程序编写教程,尽可能的做到手把手的带你从零开始编写软件。有些初学者看到一份功能规格书后,会感到无从下手。那么我在这份连载教程里,带你一行一行的敲出电子打奶器的软件程序,让你学习怎么将功能规格书转化成实际的软件程序,本教程旨在帮助初学者尽快的进入到真正的产品开发中。好了,不多废话了,首先贴出该项目的功能规格书及原理图吧,有兴趣的同学可以试着先编写一下。 二、功能操作说明 1 、概要 冷态起泡 热态起泡 牛奶加热 最大的待机功率 0,5 W  在220V-240V AC 50/60 HZ 420-500W 2 、冷态起泡功能 允许牛奶最大容量:150 ml 起泡完成时间≤120s±10s (没有延时功能) 左键长按1次(2秒)为冷打奶。左指示灯显示篮色。再按一次左键关闭,(正在运行时,需更换功能时要先关闭正在运行的功能,否则操作无效);发热盘不发热,马达快速转动直到时间达到120±10s马达停止转动,电源开关LED灯熄灭,完成冷态起泡功能.起泡完成后把奶泡倒入500ml的容器,马上记录其比例,牛奶最多三分之一,泡沫至少三分之二。 3 、热态起泡功能 允许牛奶最大容量:150 ml 热态起泡完成时间≤150s(包含延时20s±3s) 起泡温度规格:67±5℃ 温度测试距离:感温线距离内胆底部6±1mm. 左键短按1次(=2秒)为热打奶。左指示灯显示红色。再按一次左键关闭,(正在运行时,需更换功能时要先关闭正在运行的功能,否则操作无效);发热盘发热,马达慢到快转速,直到发热盘停止发热,马达延时20s±3s停止转动之后温度达到67±5度时,电源开关LED灯熄灭,完成热态牛奶起泡功能 起泡完成后读取其牛奶温度数据是否符合规格要求,在把奶泡倒入500ml的容器后马上记录其比例,牛奶最多三分之一,泡沫至少三分之二 内胆底部不能出现牛奶变味,烧焦,残留大量奶垢及难清洁现象. 内胆底部不能出现刮花,搅拌头脱落,工作时不能出现搅拌头脱磁现象. 4 、牛奶加热功能 允许牛奶最大容量:250 ml 牛奶加热完成时间≤180s(包含延时20s±3s) 牛奶加热度规格:67±5℃ 温度测试距离:感温线距离内胆底部6±1mm. 右键按1次(不限制时间)为加热。右指示灯显示红色。再按一次右键关闭, (正在运行时,需更换功能时要先关闭正在运行的功能,否则操作无效);发热盘发热,马达慢转速动,直到发热盘停止发热,马达延时20s±3s停止转动之后温度达到67±5度时,电源开关LED灯熄灭,完成牛奶加热功能 牛奶加热完成后读取其牛奶温度是否符合规格要求,在把牛奶倒入500ml的容量马上查看其牛奶与泡沫的比例,泡沫最多占总容量的20%.(例如总量300ml,那泡沫的容量不能超过60ml.) 内胆底部不能出现牛奶变味,烧焦,残留大量奶垢及难清洁现象. 内胆底部不能出现刮花,搅拌头脱落,工作时不能出现搅拌头脱磁现象. 5 、干烧时间 20s±2s 产品在无水状态下进行加热工作(不用放搅拌支架)时间应在20±2s.内实现跳挚切断工作功能同时LED灯出现红蓝灯交替闪烁发出警报现象,预示消费者该产品刚已进入非正常工作状态. 6 、复位时间≤30S 产品工作完成后重新加入5-20度300ml的牛奶或水,产品应在≤30S的时间内实现再次工作功能. 7 、NTC故障报警功能 如若检测到NTC温度传感器发送短路或者开路,则LED灯出现红蓝灯交替闪烁发出警报现象。发送NTC故障时,按键按下无效。 8 、初始奶温过高报警功能 如若检测到初始奶温大于50度,则LED灯蓝灯闪烁发出警报现象,当初始奶温低于50度时,按下按键则行按键功能。发生初始奶温过高报警时,按下所有按键无效。 三、原理图 本方案采用国产中颖单片机SH79F084A单片机作为MCU,具体的功能就不细说了,大家可以去中颖官网下载datasheet。由于公司保密要求,就不贴出全部原理图了,只贴出MCU控制单元。原理图如下: RLY是继电器控制口,高电平打开发热盘,开始加热,反之则停止加热; LED1和RED,BLUE是三个LED指示灯控制口; MOTOR是马达控制端口,通过PWM控制,马达转轴上面安装了一个磁铁,这样马达转动的时候会带动搅拌器转动,从而实现将牛奶搅拌起泡的功能; I_MOTOR是检测马达卡死的AD端口,检测AD值的大小来判断马达是否卡死; NTC端口是温度传感器采集端口,将采集到的AD值转根据NTC规格书中的阻值表转换成实际的温度; NTC 电路如下: 好了,今天就先说这么多了。下一讲我会开始一步一步的教大家开始编写该产品的软件程序,希望能够对大家有帮助。由于字数严重被限制,因此很多东西都不能再这短短的文章里面描述出来,因此特意贴出了附件文档,希望大家喜欢。(∩_∩)。
  • 热度 12
    2013-2-23 11:49
    1071 次阅读|
    0 个评论
    试试 SH88F2051 芯片,以前只是听说,看看到底怎么样。 拭目以待 ……
  • 热度 10
    2009-9-9 10:29
    3433 次阅读|
    0 个评论
    中颖电子 2008 年以来陆续 推出了 1T 8051 内核的 Flash 单片机 SH79/88/89 系列产品,并 在 2009 年在深圳、杭州、北京举办了 8 Bit Flash MCU 产品发布会,得到了众多客户的关注, 300 多人出席了发布会,为了感谢各位朋友的支持,中颖电子拟于 2009 年 10 月 1 日至 12 月 31 日举办“中颖电子 8 Bit Flash MCU 产品论坛试用活动”。   活动详情: l          活动时间 Ø          报名时间:即日起至 2009 年 9 月 30 日 Ø          活动时间: 2009 年 10 月 1 日至 2009 年 12 月 31 日 Ø          评奖时间: 2010 年 1 月 1 日至 2010 年 1 月 31 日   l          活动人数及奖项设置 Ø          活动人数: 30 人(对中颖产品有兴趣、中颖现有代理商及客户均可参与) Ø          奖项设置: ²         一等奖 2 名         中颖代金券 2000 元 ²         二等奖 5 名            中颖代金券 1000 元 ²         三等奖 8 名            中颖代金券 500 元 说明: 中颖代金券可在中颖购买开发工具及样品,不可兑换成现金,有效时间到 2010 年 6 月 30 日 ,过期作费   l          参与方式及活动流程 Ø          在中颖全心论坛( http://bbs.sinowealth.com )注册为会员 Ø          将您的详细信息发送到: webmaster@sinowealth.com 并承诺按活动要求完成此次活动 详细信息包括:姓名、中颖全心论坛上的会员名称、公司、职位、联系电话、详细邮寄地址、开发过的项目 Ø          等待中颖邮件或电话确认活动资格及编号( 10 月 1 日 前 ) Ø          取得活动资格的朋友将 300 元押金汇到中颖确认的指定帐户 说明: 1.          汇款时请注明“参与中颖产品试用活动”字样 2.          如果您不方便汇款,您可找所在地中颖 MCU 产品线的业务代为收取 Ø          中颖收到押金后将 JET51(8 Bit 开发工具 )+SH79F32 目标板 +SH79F32 芯片 1 套寄出 Ø          得到中颖确认参与此次活动的朋友在活动期间( 10 月 1 日 至 12 月 31 日 )至少发表 2 篇试用的文章,内容以自己使用中颖工具及产品的感受、产品应用方案、产品特点分析、产品推广方案等为主 Ø          试用中颖工具及产品期间,如果您觉得还不错,可以推荐给您的朋友,请将您朋友的详细信息发邮件到: webmaster@sinowealth.com ,您的朋友将免费收到中颖产品的相关资料 Ø          评奖期间,将所有的文章汇总,每个人的总分为 100 分,由中颖专家组( 60 分)及用户( 40 分)进行评分,评分结束后以分数高低进行排名,并颁发中颖代金券 Ø          评奖期间,您的 300 元押金将退还到您的手中,活动期间使用的工具赠送给您(如未能按活动要求完成,则收回工具并返还押金)。 l          特别说明 Ø          此次活动的名额有限,并非所有报名人员均可参与,最终名单以中颖邮件或电话确认为准 Ø          每个公司仅限 1 人参与 Ø          中颖电子拥有将此次活动所收集的文章进行修改并发表到相关行业杂志及网站的权力 Ø          此次活动的最终解释权归中颖电子所有   心动不如行动 , 名额有限, 赶快报名参加吧!