电路问题,程序问题,开发机的问题----单片机仿真器问题自查
经常接到各类的电话,最开始都是在怀疑开发机出问题了,到最后发现了很大程度上是电路或者编程的问题,当我们对开发机本身的性能并不十分了解的时候,如何来确定呢?
一,IO输出不正常的分析。
经典51以外的RISC架构的MCU,包括一些增强型51 MCU,对IO的操作都是比较复杂的——相对于经典51。
当你发现你的IO不能输出0和1的时候,本着先软后硬的原则,你应该查一下数据手册上所有与IO相关的寄存器,不仅仅是方向寄存器和端口寄存器。
比如一些AD口,就要看看是否设置为数字IO。
当出现问题的时候,强烈建议写最土,最简单,最可靠的测试程序,虽然这看来可能比较耽误时间,但是确实最容易排除干扰的方法。
在有了最简单的测试程序后,首先应该尽量先选择从仿真器供电进行空测,如果空测IO,0,1电平正常,则至少IO的连通性是OK的,也排除了线材老化带来的接触不良的问题。
如果连空测的0,1都不出来,首先还是应该怀疑自己,这时候要认真看数据手册IO部分的说明,结构图,看看是否碰到这个口是OC口等,如果是OC,OD,需要上拉才有0,1输出,直接空测是没有任何结果的。
空测通过后,要做的是找一个LED,看能否正常驱动LED,驱动能力好的单片机,应该直接测试共阴接法的LED驱动是否OK。
如果是驱动能力比较差的,比如经典51,那就老老实实驱动共阳接法LED看是否正常。
二,IO输入不正常的分析。
当IO输入不正常的时候,比如判定一个方波或者脉冲信号,在高或低电平跳转,经常有人打电话投诉,怎么不跳转了。
首先在这个时候自己要冷静。
还是象上面的第一点的,查数据手册,写最简单的测试代码,第三步,应该是先测量一个简单的1和0电平,1电平,一般用上拉一个K级别的电阻,4.7K以上测量,0电平,则应该用下拉一个百欧姆级别的电阻(或者直接对地短路)来测试,下拉K级电阻则不一定都是可靠能拉地的,因为一但不小心某些单片机在某些状态等效于一个10K级别左右的内部弱上拉,你在用一个K级别的电阻去下拉,那输入端就是一个不规范的数字信号,天知道发生什么事情。
如果简单输入OK了,那么至少开发机是OK的,但这时候如果干上了外部信号就是不识别,那么办,外部信号先加上拉电阻,不行就加一个三极管管做驱动电路,这样就OK了。
当然如果简单输入都通不过,如果这个IO可以做输出,可以先做一下输出检测,以确保连接是否有问题。
由于仿真器系统的复杂性以及各芯片厂家仿真芯片的工艺及历史上的遗留问题,某些情况下可能是会出现奇怪的问题,比如PROBE458的CAN管脚,只有在 2004环境下才能正确做为普通输入IO,2002是不行的,不过如果用了PROBE458,确把CAN管脚废除不做CAN 通讯,本身就是比较奇怪的用法,所以2002配合PROBE458,一般在用CAN的这两个管脚如果只是做为CAN管脚使用,那就没有任何异常的感觉。
三,变量观察不到。
如果是C语言,可以先怀疑IDE软件,如果是汇编,请先怀疑自己的代码习惯。
说到代码习惯,本质上是一个问题,各大厂家的软件人员,在做编译器的时候,没有去兼容全部的风格,要兼容也是比较痛苦的,可以理解。
比如,正统的51风格,用16进制表示10,那就是0AH,但是,最正统的PIC是不承认这样的风格,这属于非法非官方的风格,用这样的风格会给工程带来毁灭性的隐患。
不信大家可以装老版本的MPLAB IDE。
由于历史的原因,很多搞PIC 的都是从51过来的,必然身上遗留了很多51的习惯,做PIC的时候要全部改掉,尤其是对进制的书写,直到去年,MCHP的官方汇编编译器是不承认51的16进制风格的,编译通过,但是它会识别错误,后续,他的IDE可能有做过处理,16进制的兼容了,但是比如2进制的书写,绝对还是自己的风格,如果按照51的方式来做,一定会死的很难看。
不论做哪个厂家的芯片,动手之前一定要认真研究厂家提供的最正统的DEMO,按照厂家的规范办事。
尤其遇到第三方工具,一定要注意是否符合厂家的规范,即使第三方强大到通过软件预处理
来兼容风格,这种做过手脚的处理也是很危险的,软件的问题是很复杂的。
另外就附带提一下大小写的问题,以PIC为例子,其他的可以参考。
中国工程师的习惯,写汇编的时候变量是不喜欢去分大小写,至少在国内最流行的51开发环境下,是不区分大小写。
但是PIC的官方IDE是在默认状态下区分的。
虽然一些第三方的IDE可能在默认状态下不区分,比如2002,PICMATEIDE,但是它们本质上保留厂家的这项功能,可以使能大小写区分功能。
一旦不区分大小写的时候,厂家出于软件设计的原因,一般在添加变量观察时,会要求用户强制使用全大写或者全小写名。
这就是有的时候为什么大家会发现内存中直接看,变量在跳,而添加后则似乎不变或者显示错误。
没有按照厂家的风格来进行添加变量。
当然一些高级的功能,比如鼠标悬停在源代码窗的变量名上上先看到变量,还可以按照自己喜欢的进制方式显示,这如果出问题就是厂家IDE的BUG了。
更多阅读:
1.系统设计者应该始终牢记的基本原则【单片机】
2.【单片机解密技术】电子产品的设计工程师必读
3.芯片解密的定义
4.电路板在PC抄板中的清洗技术
何杰与你互勉
扣扣:1994226。