打印

[有奖征文活动]我的风扇调试经历

[复制链接]
8930|65
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
     我入职刚一个月,在做一个小项目开发时遇到了如下的问题,今天贴出来,与大家分享,同时也是对我的鞭策。希望大家能够不惜笔墨,畅所欲言。电路图在下面贴着。
发现问题:
     前几天在做一个风扇的小项目,我在仿真器上边写边测……,两天后,我感觉全部功能已经都实现了,而且效果也比较好,于是烧了芯片准备测试,这一烧片测试,问题来了:除了能用power键开机完,其他按键功能全部没用(按其他键根本没反应)
分析问题:
  1.由于是新手(7月份刚毕业,没有完整的产品开发经验),当发现这个问题后,我的想法是:在仿真器上运行良好,烧到芯片里不正常,可能是芯片质量太差了,于是连烧了好几个,但都不行。
  请教了前辈后,他们告诉我这种问题一般还是程序的问题,跟芯片没关系。
2.然后,我的第一反应是修改 code option(sonix 8 bit mcu编程软件里的东西) 里的一些相关选项,改了后再烧片子测试问题还是没解决,连续改了好几次code option 烧出来的片子还是同样的问题.
3.反正还找不出问题,于是我拿着有问题的样机在那试。(开机后有个定时关机的动作,我为了测试方便把2 hour关机改成了20 s)发现开机后20s 就自动关机了。这给我了一个提示:其他程序模块运行正常。结合 按键没反应的现象,我把问题的重点集中在按键扫描模块了(其实根据除了power键其他键根本没反应,我早都应该检测按键程序了,但是因为在仿真器上运行正常,就忽略了)
经过仔细的检测按键程序,我终于找到了按键程序中的一个错误(@20 处):@20 处少了等待。在扫描按键前要把端口设为输入上拉模式,然后等待一段时间(20us左右)待数据稳定后 再读取端口信息,由于在读p2口时少了这个等待时间p2口的信息没有正确读取 于是导致后面程序判断错误,没能把按键信息存入event fifo 。
解决问题:
当加上@20 处的等待时间后 ,再烧片子测试,功能恢复正常!


经过此次问题后,我的自我检讨:
1.写程序一定要仔细,不能马虎。我在@10 处都有等待,但在@20 处却少了这个等待,说明我知道这个等待的重要性,只是太慌张了给忘了。
2.端口在输入模式下读取按键信息时一定要经过等待 等端口状态稳定后在读取,这个问题一定要牢记。特别是在I/O口复用时。
3.前事不忘,后事之师。其实在前面写暖风机的时候,我已经发现在I/O口复用时,扫描按键如果等待时间处理不好,就会出现很多问题。这次也是 I/O口复用 我却没在按键扫描那里多做检查。下次应该不会忘了。
4.仿真成功并不能代表程序没有问题,烧出来片子测试成功才代表程序没有问题。

HH-32300  按键扫描程序
key_scan:
mov a,#00001110b
mov p2ur,a  ;上拉
mov     a,#00110000b
or     p2,a;mov
mov a,#11110001b
mov p2m,a  ;输入模式
b0mov   r,#30  ;@10
decms   r
jmp     $-1
mov a,p2
and a,#00001110b
mov new_key,a
mov a,#00110000b
mov p2ur,a  ;上拉
mov a,#11001111b;0001
mov  p2m,a  ;输入模式
mov a,#11110001b
and p2,a
b0mov   r,#30  ;@20问题所在
decms   r
jmp     $-1
mov a,p2
and a,#00110000b
or new_key,a
bts0 f_key_rel
jmp key_scan10 ;检测放键
jmp key_scan20 ;检测按键
key_scan10:
mov a,new_key
cmprs a,#00111110b
jmp key_scan30
incms key_cnt
mov a,key_cnt
cmprs a,#5  ;20ms放键检测
jmp key_scan90
bclr f_key_rel
jmp key_scan30
key_scan20:
mov a,new_key
cmprs a,old_key
jmp key_scan21
incms key_cnt
mov a,key_cnt
cmprs a,#8  ;32ms消抖
jmp key_scan90
clr key_cnt
jmp key_scan40
key_scan21:
mov_ old_key,new_key
key_scan30:
clr key_cnt
jmp key_scan90
key_scan40:
mov a,new_key ;cleaner键3s长按
cmprs a,#00011110b
jmp key_scan40_0
incms key_cnt0
mov a,key_cnt0
cmprs a,#80
jmp key_scan90
clr key_cnt0
jmp key_scan44
key_scan40_0:   ;replace键3s长按
clr key_cnt0
mov a,new_key  
cmprs a,#00111010b
jmp key_scan40_1
incms key_cnt1
mov a,key_cnt1
cmprs a,#80
jmp key_scan90
clr key_cnt1
jmp key_scan45
key_scan40_1:
clr key_cnt1
mov a,new_key  
cje a,#00111110b,key_scan90 ;无键按下不作处理
cje a,#00111100b,key_scan41
cje a,#00101110b,key_scan42
cje a,#00110110b,key_scan43
;cje a,#00011110b,key_scan44
;cje a,#00111010b,key_scan45
;cje a,#00100110b,key_scan46
jmp key_scan90  
key_scan41:
mov_ event_buf,#1  ;POWER键键值1
jmp key_scan80
key_scan42:
mov_ event_buf,#2  ;speed键键值2
jmp key_scan80
key_scan43:
mov_ event_buf,#3  ;timer键键值3
jmp key_scan80
key_scan44:
mov_ event_buf,#4  ;cleaner键值4
jmp key_scan80
key_scan45:
mov_ event_buf,#5  ;replace键键值5
jmp key_scan80
;key_scan46:
; mov_ event_buf,#6  ;speed+timer键键值6
; jmp key_scan80
key_scan80:
bset f_key_rel
call wrt_FIFO  ;将键值写入event_FIFO
key_scan90:
ret

相关帖子

沙发
zhang123| | 2009-8-6 20:18 | 只看该作者
鼓励一下

使用特权

评论回复
板凳
戒指320|  楼主 | 2009-8-6 20:23 | 只看该作者
think you !

使用特权

评论回复
地板
ningling_21| | 2009-8-6 22:19 | 只看该作者
松翰的MCU,比较强......

使用特权

评论回复
5
戒指320|  楼主 | 2009-8-6 22:24 | 只看该作者
4楼也用过 松翰的?

使用特权

评论回复
6
程序匠人| | 2009-8-6 23:42 | 只看该作者
鼓励,再接再厉哦

使用特权

评论回复
7
yewuyi| | 2009-8-7 08:47 | 只看该作者
坚决不用台湾的2流MCU

使用特权

评论回复
8
sz_kd| | 2009-8-7 09:18 | 只看该作者
yewuyi,为什么不用台湾的MCU,很便宜啊,性价比也可以啊,对于应用一般的场合没有什么问题啊

使用特权

评论回复
9
yewuyi| | 2009-8-7 09:26 | 只看该作者
吃亏上当太多,即使如HOLTEK、华邦等,产品质量也是问题多多,更别说那些2流小厂,不要钱我也不用,太操心了。

使用特权

评论回复
10
sz_kd| | 2009-8-7 09:33 | 只看该作者
呵呵,下次用sonix的吧,包你满意~~~~~~~~~~~~~~~~~~~~

使用特权

评论回复
11
救火车| | 2009-8-7 09:38 | 只看该作者
延时问题,非常有代表性。很多人都败在延时上。大家吸取教训。:)
另外我建议大家在设计产品时尽量不要复用管脚,这样安全一些。

使用特权

评论回复
12
yewuyi| | 2009-8-7 10:28 | 只看该作者
不复用那还怎么玩?!


嘿嘿,我是能复用则复用。

使用特权

评论回复
13
古道热肠| | 2009-8-7 10:49 | 只看该作者
写得不错,主次分明
哈哈,有些场合不复用都不行,当单片机的GPIO口有方向寄存器控制方向时,换向时,一定要注意延时后再操作GPIO口的数据寄存器,否则会不可靠.原理楼主已作描述.

使用特权

评论回复
14
古道热肠| | 2009-8-7 10:52 | 只看该作者
给楼主提个问题,您这SONIX单片机IO口直接驱动双可可控硅,可靠性如何?我看洗衣机电路大都用ULN2003A来缓冲和放大.电源部分如何处理的,是电容降压还是变压器?

使用特权

评论回复
15
戒指320|  楼主 | 2009-8-7 20:36 | 只看该作者
回复14楼 古道热肠 版主
电源部分用的是阻容降压;
SONIX单片机IO口直接驱动双可可控硅,可靠性我还不敢肯定是好还是不好。电路使客户给的。在学校没接触过可控硅。
之前做过一个小东西,用双向可控硅做调光灯,直接取220v交流电的同步信号,感觉还比较可靠,毕竟通过的电流不是很大。
版主对这个问题怎么看?

使用特权

评论回复
16
思考| | 2009-8-8 10:34 | 只看该作者
楼主,你的程序写得很好.能把你的写EVENT_FIFO,和读EVENT_FIFO的程序贴出来给我们看看吗?

使用特权

评论回复
17
古道热肠| | 2009-8-8 10:59 | 只看该作者
呵呵,可控硅没深入研究过,可靠性是设计的重点.电感负载在可控硅的两端通常要加阻容保护电路.单片机驱动通常是加了一级推动电路.

使用特权

评论回复
18
badbird1234| | 2009-8-8 13:16 | 只看该作者
LZ为什么用3个可控硅
难道你的风扇有3个电机
2501用过

使用特权

评论回复
19
戒指320|  楼主 | 2009-8-8 21:52 | 只看该作者
回复16楼:
下面是我的wrt_FIFO和rd_FIFO。
用到的变量:event_FIFO(7位长度,占用的ram空间连续)
                writep
                readp
用到的常量:FIFO_len  (equ  7)
;----------------------------------------
wrt_FIFO:
        b0mov        y,#event_FIFO$m               
        b0mov        z,#event_FIFO$l                ;取首地址
        mov        a,writep                ;计算当前地址
        b0add        z,a                        ;写表的高位地址
        mov        a,event_buf
        mov        @yz,a                        ;存键值
        incms        writep
        mov        a,writep
        cje        a,#FIFO_len,wrt_FIFO10        ;到底部writep清0
        jmp        wrt_FIFO90                ;没有到底部退出       
wrt_FIFO10:
        clr        writep
wrt_FIFO90:
        ret
;---------------
rd_FIFO:
        mov        a,writep                ;读写指针相等没有数据写入,退出
        cje        a,readp,rd_FIFO90        ;读写指针不等,读event_FIFO
        b0mov        y,#event_FIFO$m               
        b0mov        z,#event_FIFO$l                ;取首地址
        mov        a,readp                        ;计算当前地址
        b0add        z,a                        ;读表的高位地址
        mov_        r,@yz                        ;存键值
        incms        readp
        mov        a,readp
        cje        a,#FIFO_len,rd_FIFO10        ;到底部readp清0
        jmp        rd_FIFO90                ;没有到底部退出       
rd_FIFO10:
        clr        readp
rd_FIFO90:
        ret

使用特权

评论回复
20
戒指320|  楼主 | 2009-8-8 22:01 | 只看该作者
回复18楼:
为什么用了三个可控硅?呵呵,其实 我也不知道。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

290

帖子

2

粉丝