|
MSP430单片机ADC的功耗隐藏任务和LCD外接电阻问题
[复制链接]
MSP430的定时器很给力,以前官网的选型表会写出Capture/Compare Register的个数,而弱化了Timer的概念,当然现在不会了。这个CCR是啥呢?就是捕获比较寄存器,当你看到CCR的个数有3~5个的时候,你是否很兴奋?我草,那你就悲剧了!真相就是大多数的430定时器就1个,尼玛,最普通的51都有两个!!
最典型的CCR是有三个。一般情况下,TAR(或者TBR)是计数寄存器,它负责计数。其实说穿了也就是同步用的,当开启比较模式的时候,CCR0是被用来做周期寄存器的,而CCR1和CCR2是在CCR0的范围内与TAR(或者TBR)进行比较。其实比较一般也就是为了得到一个好的pwm模式,有了这样的一种定时器机制,寄存器简单,使用起来也很方便,可以随意更改占空比和周期,将CCR0修改即可修改周期,将CCR1或者CCR2修改即可修改占空比。定时器up模式下,产生的就是avr中所言的快速pwm,up/down模式则是相位修正pwm。虽然430定时器操作简单,但不可否认它比avr的定时器灵活得多,avr没有专门的周期寄存器,它并不能灵活的修改pwm的频率,只有在特定的几种模式下可以。
很重要的一点,430的定时器CCR的修改都是及时更新的,并不像avr一样是下个周期更新或者像stm8或者stm32一样可以选择更新方式,更没有重装载寄存器。所以想要用430做spwm的朋友请注意了,如果想要得到正确的spwm波,更新CCR的时候一定要选择CCR0中断的时候。
说到中断,又有一个比较纠结的问题了,呵呵,一个定时器有两个中断向量,以TA0为例
TIMER0_A1_VECTOR
TIMER0_A0_VECTOR
TIMER0_A1_VECTOR是比较中断1~4,还有溢出中断。也就是说当不操作CCR的时候,也就是没有启用比较捕获的时候,单纯想要使用TAR计数计到0xffff溢出,会触发的中断,会进到这个中断,当然一般也就是刚从51转过来,大脑还沉浸在51快乐时光里的犯2的人才会这么做。CCR1~CCR4的比较捕获中断也是进这个中断。而CCR0是进到TIMER0_A0_VECTOR,所以做spwm的朋友要开启这个中断。一般情况下比较模式也就是PWM模式有7种,而只开启CCR0不开启其他CCR的时候,只能用四种,常用一般也就三种,set强制拉到有效,toggle扳机也就是翻转,reset强制拉到无效。
ADC的功耗隐藏任务问题。
想要低功耗,那就别用ADC,这个隐藏的功耗杀手,会不经意间给你来那么一下。当你进去深度睡眠的时候,想要测一下功耗却发现测出来的功耗与电气特性表上标明小于1uA相差了几百uA正要大骂TI坑爹的时候,你看看你的ADC关了木有~~~DC关了木有~~~C关了木有~~~关了木有~~~了木有~~~木有~~~有~~~(这是肥音)
ADC开启的时候会消耗将近200uA的电流,和深度休眠的差了200倍!!所以最好在使用完ADC之后,将其寄存器全部清空。哦,对了,不小心插一句,AVR有硬件模拟比较器,这个默认是打开的,为了节省功耗你可以每次上电都将ACSR寄存器的ACD置位。每个使用430的ADC的孩纸上辈子都是折翼的天使,而且掉下来都是脑袋先着地的,伤不起啊~
|
|