首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

单片机应用编程技巧100问(七)

单片机应用编程技巧100问(七)

61. 在嵌入式开发中软件抗干扰有哪些问题?如何解决?
答:关于软件抗干扰问题和策略,如果在实际应用中能很好的遵循这些原则,再配合硬件电路的抗干扰措施,基本上可以消除干扰影响。但有时往往因为程序本身的复杂度和芯片资源的限制,再加上编程人员本身的能力限制,不能做到十分完善。所以我们只能给出一些建议,至于具体的实现,就需要各位在平时的项目实践中不断的摸索和积累经验。以下是之前有关软件抗干扰的问题答复,谨供参考:
防止干扰最有效的方法是去除干扰源、隔断干扰路径,但往往很难做到,所以只能看单片机抗干扰能力够不够强了。单片机干扰最常见的现象就是复位;至于程序跑飞,其实也可以用软件陷阱和看门狗将程序拉回到复位状态;所以单片机软件抗干扰最重要的是处理好复位状态。
一般单片机都会有一些标志寄存器,可以用来判断复位原因;另外也可以自己在RAM中埋一些标志。在每次程序复位时,通过判断这些标志,可以判断出不同的复位原因;还可以根据不同的标志直接跳到相应的程序。这样可以使程序
运行有连续性,用户在使用时也不会察觉到程序被重新复位过。
62. 语音识别会不会是单片机下个消费热点?
答:语音识别在多年前即开始应用在低阶玩具上,如遥控车的左右前后控制,教育玩具利用发语音方式,依记忆体大少能容纳的长度经压缩编码采集后储存各字词,日后再发相同语音经单片机处理辨识后,即可作出相应动作。依成本不同,影响相关的MCU资源和速度,以及所利用的辨识技术algorithm (运算法则)的优劣,记忆体大少等,所设计出的产品其辨识率和字词长度亦有很大差异。此低阶市场在现今芯片价格下降应有可为,就看产品创新应用是否吸引人!高阶的语音识别应用是在PC(个人计算机)上,有CPU等级的资源速度和硬盘大少的记忆容量, 但此市场和硬件(单片机)无关!
另一个语音识别应用是嵌入式系统,如目前的手机大都配备语音辨识电话簿,其实一般的嵌入式系统如PDA,DSC,MP3……等都有能力builtin此功能,就看需占用多少硬件资源和所能作出的效果。产品的功能定位很重要,语音识别是否必需要评估实际使用率!
63. 如何设计实现一个共模范围在0 - 120V 之间的低成本测量电池组电压的装置?
答:这里所谓高共模输入电压,是指高范围的同相输入电压,下面先说明运放一些概念:
运放有所谓的dynamic range是指运放(OP)未饱和时,正常动作时的输出、入电压范围。一般而言dynamic range越大,电源电压的有效利用率越高,例如处理同等级的信号时,就不需刻意提高电源电压也获得省能源效应。尤其是可携式消费性电子产品要求低电压低耗电量的场合,高效率的电源电压始终是备受重视的焦点,尤其是运放的ground电位,若是设于Vcc~VEE正负电源电压的中点(亦即动作点)时,就可获得极宽广的dynamic range。有鉴于此设计人员通常会在不减损输出dynamic range的前提下,使输入dynamic range大于输出dynamic range。
输入信号的电位为VEE(电源电压)时,有些OP它的极性会造成反转,虽然Output允许因过大输入造成的饱和,不过大部份的情况却不允许极性反转,所以两单电源用在运放输入信号到达VEE之前输出会反转。需注意的是即使是单电源使用运放,如果超越VEE下0。5V亦即VEE-0。5V 时,输出的极性也可能会反转。
所谓的同相输入电压范围VICM(共模输入电压)是指两个输入端子与ground之间,可施加的同相电压范围。虽然施加的同相电压超过该范围时,并不会造成元件损坏等问题,不过却会使运放的功能停止。只要差动输入电压作为增幅器时的动作正常基本上是0伏特。同相输入电压范围VICM与正负电源电压相同是属于理想状态。
一般运放会利用差动放大器的CMR(共模信号消除比)来做相同成份的去除时,在有必要将同相范围扩大的情况,可用增益(Game)1/10的反相放大器A2 之输入Vs2讯号,另外用加法方式再加入一级也是增益(Game)1/10反相放大器A1之输入Vs1讯号,这样就可以达到同相输入范围扩大之差动放大。
如果要设计共模范围在0 - 120V 之间,其上述反相放大器A1,可用R1=100K,Rf=10K,而反相放大器A2,也是用R1=100K, Rf=10K,并且反相
放大器A1输出串一10K电阻到反相放大器A2的负端输入口即可。
64. 在使用单片机控制LCD的时候,利用T1的溢出中断显示刷新时钟信息,在主程序循环时中为了显示浮点数,不断调用了spritf()函数,可是时钟信息不在刷新了,把这个函数屏蔽后,就恢复正常,请问调用这个函数会不会影响定时/计数器的中断?
答:这应该与程序有关,一般来说sprintf()函数,不会影响定时/计数器的中断,因为没看到具体程序,所以猜测原因可能是程序里面对定时器初始化的部分与sprintf()使用的buffer有些冲突,造成了定时器初始化的错误。
65. LM4915是什么IC?
答:LM4915是一款音频功率放大器,常用于带单听筒的手机、PDA和其他的便携式音频装置等低电压的应用场合,在外接极少的元器件情况下,为其提供高质量的功率输出以驱动发声装置。
66. 现在RISC架构的单片机应用很广,它的主要特点是什么?优越性在哪里?还有处理器中哈佛结构有什么特点?
答:在MCU开发方面,以架构而言,可分为两大主流;RISC(Reduced Instruction Set Computer)与CISC(Complex Instruction Set Computer), RISC代表MCU的所有指令都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳化,而提高执行速率,相对的使得一个指令所需的时间减到最短。HOLTEK的一系列MCU便是采用 RISC 结构来设计。
再说RISC因为指令集的精简,所以许多工作都必须组合简单的指令,而针对较复杂组合的工作便需要由『编译程式』(compiler) 来执行,而 CISC MCU因为硬体所提供的指令集较多,所以许多工作都能够以一个或是数个指令来代替,compiler 的工作因而减少许多。以一个数值运算程式来说,使用 CISC 指令集的MCU运算对于一个积分运算式可能只需要十个机器指令,而 RISC MCU在执行相同的程式时,却因为CPU 本身不提供浮点数乘法的指令,所以可能需要执行上百个机器指令 (但每一个指令可能只需要 CISC 指令十分之一的时间),而由程式语言转换成机器指令的动作是由程式语言的 Compiler 来执行,所以在 RISC MCU的Compiler 便会较复杂。因为同样一个高阶语言 A=B*C 的运算,在 RISC MCU转换为机器指令可能有许多种组合,而每一种组合的『时间/空间』组合都不尽相同。所以 RISC 与 CISC 的取舍之间,似乎也是MCU硬体架构与软体(Compiler) 的平衡之争,应该没有绝对优势的一方,只能说因应不同的需求而有不同的产品,例如工作单纯的印表机核心 MCU,便适合使用效能稳定,但单位指令效率较佳的 RISC MCU。
对单片机处理方式而言,目前单片机的系统结构有两种类型:一种是将程式和资料记忆体分开使用,即哈佛(Harvard)结构,当前的单片机大都是这种结构。另一种是采用和PC机的冯。诺依曼(Von Neumann)类似的原理,对程式和资料记忆体不作逻辑上的区分,即普林斯顿(Princeton)结构。
67. 在很多情况下,以单片机为主控制器的测量系统要长时间保持无故障运行,因此其自诊断就成为关键。请介绍一下有关单片机系统的故障自诊断的一些知识?
答:要保证系统可以长时间故障运行,防止干扰是很重要的。最有效的方法是去除干扰源、隔断干扰路径,但往往很难做到,所以只能看单片机抗干扰能力够不够强了。单片机干扰最常见的现象就是复位;至于程序跑飞,其实也可以用软件陷阱和看门狗将程序拉回到复位状态;所以单片机软件抗干扰最重要的是处理好复位状态。
一般单片机都会有一些标志寄存器,可以用来判断复位原因;另外也可以自己在RAM中埋一些标志。在每次程序复位时,通过判断这些标志,可以判断出不同的复位原因;还可以根据不同的标志直接跳到相应的程序。这样可以使程序运行有连续性,用户在使用时也不会察觉到程序被重新复位过。
68. MCU的功能只有在ROM中写入程序代码后才能显现出来。测试MCU时都是向ROM写入程序后并向输入管脚提供相应的测试矢量的情况进行的,然后对于OTP型MCU,只能一次编程,所以每次对封装后成品测试时,测试一个就废掉一个。据我所知,Holtek的MCU多为OTP版本单片机,Holtek是如何解决这个测试问题?
答:如果是IC生产厂商的测试人员,以HOLTEK的经验来说测试分两个步骤。一、对裸片的ROM烧入 Code测试,看IC是否能正常写入程序。如果测试通过,则使用紫外线擦去裸片的ROM Code,进行封装。二、使用外部测试电路来测试封装IC的逻辑电路。
如果是从厂商处拿到封装片后自行测试销售,那么所能做的就只是通过测量I/O口电阻,二极管值等参数,来测量IC的逻辑电路。无法测试ROM code是否能写入正确,除非是IC的原设计者,知道如何对IC预留的Test Rom(如果有预留的话)进行测试。
69. 作为IC生产厂商的测试人员,是在整个Wafer上进行的,还是将Wafer切割成Die后对单个Die进行?
答:裸片烧ROM Code是使用针压机器来烧录,所以必须是整个Wafer一起烧,单个Die无法排列整齐供烧录。
70. “裸片烧ROM Code是使用针压机器来烧录,所以必须是整个Wafer一起烧,单个Die无法排列整齐供烧录。” 这个阶段测试仅用来测试OTP本身,还是写入有针对性的程序代码并在输入管脚施加相应测试矢量来测试整个MCU的功能是否正确?
答:在芯片还未经分割的wafer阶段,在测试时当然要把DC test, Function test……等完成。如果是OTP 型式的芯片还需把烧code工作也一并解决。切割后就处理困难了!Probe Tester其实分两部份,Probe(针压)是机械部份,有位置对准和芯片排测功能。可把芯片上各端口引出至后部的Tester,Tester基本上是个特别配套的计算机装置,经编写不同的测试程序便可测试不同的芯片。
返回列表