基于LaunchPad的【低功耗时钟】我的DIY~~~~【【技术讨论帖】】
[复制链接]
东西的视频照片在这个帖子里: https://bbs.eeworld.com.cn/viewthread.php?tid=309715&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D66 这次DIY其实已经计划了好长时间了,自从买了LaunchPad就一直想做点什么。 后来论坛里有朋友开始做低功耗时钟,我就想着也做一个,正好看到手边有一个废弃的电子表,就拿来拆掉改装咯 关于这次DIY最早的讨论在这个帖子里: https://bbs.eeworld.com.cn/viewthread.php?tid=308482&extra=page%3D2%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D66 好了,废话就这么多,这个帖子只讨论技术问题~ ====================很有技术含量的分割线===================== 这次DIY涉及到的内容: GPIO操作,时钟的操作,中断应用,看门狗作定时器,段式液晶的直接驱动,触摸按键的操作 我认为比较有用的资料汇总: 这个是一个很详细的数据手册,官网上貌似有2011版的,但是不知怎么下不下来,这个是08版的
MSP430x2xx_Family_Users_Guide.pdf
(2.26 MB, 下载次数: 450)
这个是关于IO口驱动段式液晶的,看起来比较复杂,但是从我实际的实验来看并不算很难
用普通IO口驱动LCD显示.pdf
(188.14 KB, 下载次数: 695)
这几个是关于触摸按键的,有原理性的也有具体TI的库的介绍,比较方便
CapTouch_BoosterPack_UserExperience.rar
(103.94 KB, 下载次数: 296)
Capacitive Touch Library.pdf
(572.54 KB, 下载次数: 323)
通过 MSP430 进行 PCB 电容触摸感应.pdf
(1.57 MB, 下载次数: 652)
这个是我的工程,虽然可能不能拿来就用,还是希望能对大家有所帮助,编程风格不是很好,大家理解一下哈
430clock.rar
(66.48 KB, 下载次数: 599)
关于GPIO、时钟和中断的操作我看到论坛里已经有不少朋友总结过了,也都给出了相应的代码,我就不多说了,主要还是说一下关于段式液晶和触摸按键的心得体会吧 段式液晶的驱动: 之前我想大家用的最多的显示器件大体可以分为两类:带控制器的液晶和LED数码管。数码管的原理我想很容易理解,就是在某一段的两段通上电压就会亮。段式液晶其实也是这样,只是它需要的不是直流电,而是交替变化的电压。举个例子,假如某一个公共端的时序是0-1-0-1,那么若想让该公共端控制的一个段显示,则在另一端上要加的时序就是1-0-1-0,不显示就是0-1-0-1。 但是同时问题也来了,由于IO口只有两个状态,当一个公共端正在使用的时候,别就不能起作用,但是它的状态要么和正在使用的相同,要么就相反。相同肯定不行,但是如果相反的话,原来不想显示的段就会显示出来了。所以要想个办法给不使能的公共端找个位置,这就是“1/2 Bias”的目的了。让不使能的公共端的电压保持在0.5,这样别的段不管是0还是1,和它的压差只有0.5,虽然理论上还是会有显示,但是相对于压差为1的就不明显了,实际的结果也说明这种方法是有效的。当然还有1/3、1/4的驱动方法,但是用普通的IO口已经不可能做到了 那么最关键的,如何用一个IO口产生1/2电压呢?其实说起来也简单,只要把IO口设为输入,然后在外部用两个电阻分压就行了。 还有就是频率,段式液晶一般在30~60Hz,这个说的是全部扫描一遍的时间。 就实际应用来说,我的液晶有两个公共端,11个段选,所以用了四个电阻,其他的都直接接到了单片机的IO上。 在程序执行时,用看门狗做定时器,每8ms产生一个中断,这样四个中断完成一个显示周期,频率是31Hz,勉强可以。本来我是用TimerA做5ms中断的,这样频率是50Hz,比现在的效果要好。但是后来开始做触摸按键才发现竟然要用两个定时器,TimerA和看门狗,这不就没办法计时和显示了吗...后来在资料里找来找去才找到一个只用TimerA的,但是看门狗只能产生固定周期的中断,所以就只好用31Hz的了。 具体在程序里,每一个显示周期分成了四个节拍,两个公共端的时序分别是1-0-1/2-1/2和1/2-1/2-1-0;在第1、3节拍里各个段选根据要显示的内容输出0(显示)或1(不显示),在第2、4段选只要简单的把使能的位选和各个段选取反就可以了。 关于驱动段式液晶的就先说这么多吧,我实在是不太擅长这些文字的工作..看起来有点混乱,但愿能说清楚.... 触摸按键的使用: 触摸按键估计是这次LaunchPad最吸引人的地方了吧,当初有多少人是冲着那块触摸板才买的啊....嘿嘿。那么这次既然是用LaunchPad做DIY,不做一下触摸按键恐怕有点说不过去吧,所以就照着触摸板的原理图加了三个触摸按键。 硬件上很简单,就是三块覆铜直接连到了P2口的IO口上。看技术文档介绍在背面应该做一些敷铜接地,但是不做好像问题也不大。 触摸按键的使用主要是在软件上做文章,这也是我这次DIY花费时间最多的地方....唉 首先说一下原理吧,其实原理也不复杂。当激活了P2口某个引脚的第二功能后,该引脚立即就会产生1M左右的震荡,这个频率是和该引脚上的电容直接相关的。而触摸与该引脚相连的覆铜就足以产生使频率改变的电容变化。所以我们需要做的就是测量出频率的变化值。 具体的应用上TI已经提供了详细的Capacitive Touch Library,里面有很多做触摸感应的方案,以及操作的API函数。 我们需要做的就是现在structure.c和structure.h里定义好我们要使用的元件(element)和传感器(sensor),传感器指的是种类,比如button、weel等,同一个传感器可以包含多个元件,比如button1、button2等。 同时在定义传感器的时候也需要定义要使用的测量方案,针对不同的方案还有一些参数需要设置,比如用TimerA做计数,看门狗做门限的话需要设置看门狗的溢出周期,如果是用软件做门限计时的话就要设置软件技术的计数值。 在定义元件的时候也有针对各个元件的参数设定,主要是最大计数和门限计数。这两个参数是给API函数判断是否按下用的。 具体的信息在Capacitive Touch Library都有很详细的介绍,只是要耐下心来一点一点看。内容上没有什么难度,关键的是耐心。 还有如果碰到问题的话可以多参考一下TI提供的触摸板的例程,看一下他操作的方法和各个部分定义的顺序也会很有帮助。再一个就是头文件,单片机上所有的资源都会在头文件里提到,仔细找一找也会很有收获。 关于低功耗: 毕竟是主打低功耗的单片机嘛,低功耗还是要看一看的。 说实话最近还没来得及仔细研究低功耗方面的问题,只是直接测了一下工作的电流,一开始没加休眠,主函数里的while(1)是一直在空转着的,测的电流大概在500uA左右。 然后我在里面加了一句__bis_SR_register(CPUOFF); 不执行中断的时候就把CPU关掉,再一测,电流直接掉到200uA左右了...看来确实还有很大水分可以压出来啊。 ======================我是结束的分割线======================== 好了,这次DIY差不多就总结到这里了,有什么疏忽了的地方欢迎跟帖提出来,大家一起讨论讨论
[ 本帖最后由 anqi90 于 2011-11-5 18:45 编辑 ]
|