Psoc3开发日记---SIO的电压比较器功能及接口组件的 BUG
本帖最后由 mengyun2801 于 2013-9-8 22:57 编辑最近一直在做Psoc3的开发,项目不大,但是基本上把所有功能都用到了,正所谓麻雀虽小五脏俱全呀!通过这个小项目,已经有很多经验可以跟大家分享了,接下来我尽量会每周一帖,把我遇到的问题和大家分享,只是需要腾出时间去整理一下,如果大家觉得有必要,我争取每周更新一帖,看下大家的反馈了。言归正传,下面介绍SIO的电压比较器功能的设置方法和实现方式:
在这个小项目中,为了能够对资源的充分利用,我将SIO的电压比较器功能加了进去,利用它来做一个动态的电压比较器。
对于SIO引脚的功能,我发现很少有人去用,也没有什么可以参考的,只能自己捉摸着去实验,在实验过程中也发现了一个软件BUG,通过与艾睿的FAE沟通,也没有能够解决,但是知道问题所在就可以避免,只能坐等原厂更新此BUG。下面将对SIO模块的电压比较器功能的使用方法进行说明一下:
在这里提醒大家一下的是,SIO的使用主要有两点需要注意:一是,只能连接数字信号。二是,在使用SIO的电压比较器功能时,每对SIO共用一个电压基准源。
下面我们就进入正题,先将实现此功能的基本原理图展示给大家,如下图所示,要想实现此功能,必不可少的就是电压基准源,我采用内部的VDAC组件来提供,这样就可以通过程序时时调整基准源电压:
下面,我们按步骤进行设计,首先从右侧的库中拉入一个Digital Bidirectional Pin组件,然后双击PIN模组。配置如下图:
注意,此功能随时模拟比较器,但千万注意引脚类型要选择“Digital Input”。
在“General”的选项卡中,选择“High Impedance Digital”;
关键就在此处,在“Threshold”(阈值)一项中,我们可以选择不同的阈值电压,而如果采用VDAC作为电压阈值的控制输出,就要选择“Vref”,此模组就会出现一个“Vref”的输入引脚,我们就可以把VDAC与此脚相连接。
为了能够时时监控此引脚的电压翻转,我们需要设置一个中断,如上图所示,我们可以选择不同的终端类型。在本实验中,我选择了“Falling Edge”模式。
到此我们已经设置后一个具有中断,并且可调节的电压的SIO比较器。接下来我们拉入一个VDAC组件(命名为“VDAC_SIOREF”),将其输出与此比较器的Vref相连,因为VDAC的设置比较容易,在这里就不多提及了;然后,再拉入一个Interrupt组件(命名为“DET”),这里要注意的是此组件的设置,其终端类型一项,可以默认或是选择“LEVEL”,如下图所示:
为了能够将变化状态直观的看到,我们可以加一个输出引脚接到开发板的LED上,我们不对此接口的配置进行详细说明了。到此为止,我们已经将SIO的电压比较器功能电路搭建完毕,下面就是代码的编写了。下面介绍一下,这里需要注意的问题。
主程序中只需要对中断和VDAC进行声明,可以随便为VDAC设置一个输出值,然后开启中断即可。
#include <device.h>
void main()
{
VDAC_SIOREF_Start();
DET_Start();
VDAC_SIOREF_SetValue(170);
CyGlobalIntEnable; /* Enable all interrupts by the processor. */
while(1)
{
;
}
}
下面介绍“DET”中断程序中需要注意的,在此程序中掉入了“AIN_B”和“LED”的库文件,如下图所示。当中断触发时,我们先是执行停止中断命令,再清除中断标志位,让LED闪烁,此处最好加一个延时,为了初步验证,就没有加入。提醒大家千万注意的是,千万不要忘记清楚中断标志位,不然程序将会死在此中断中。之前看过有些中断按键的程序中少了这一句,按键就只能检测一次,然后就没有反应了。
到此为止,我还未提到BUG的问题,因为只有在你编译后才能发现,如果你的SIO引脚可能不会生成库函数,但是编译过程中没有错误,这究竟为什么?这也是我在清中断标志时发现的,我想找下此引脚的清中断标志位命令,这时才发现根本没有找到此引脚生成的库函数。下面请看下我的截图就知道原因了,请大家对比一下就明白了。
开始的时候我选用的是右侧的组件,不能生成库函数,但是我看了一下其他的例程,粘贴过来一个引脚(左侧),同样设置,就能生成库函数,对比之下才发现,这两个引脚只有版本号不同,也就是说最新版本1.9中有BUG存在,导致不能生成库函数,具体原因原厂还没有回复我,估计是要等组件更新了。如果大家需要此功能,可以从例程中找一个低版本的引脚,目前来说,我用的是1.7版本的,这个没问题。这种遭雷劈的概率被我赶上了,看来急于升级并非好事,而是抓住了做小白鼠的机会~~~
如果你要使用此功能,你可以看下你的组件是不是最新的?作为其他功能使用都可以正常生成库函数。反正我的已经是1.9了,不管你信不行~~~
由于篇幅和时间原因,此篇文档比较简单,随后我会把动态调整阈值电压的程序加上来,还有利用内部电压比较器实现动态电压调整程序也贴出来,两种方案让大家交流~~~
沙发自己坐吧~ 给力贴,顶一下,期待后续的更新~~~~~~~~~ 这个必须可以。日记日记,天天得有哟!{:soso_e112:} 给你加颜色又加精喽哟!满意不。:loveliness: 期待期待连载,正玩psoc3呢。。。:lol QQ哥 发表于 2013-9-9 09:17 static/image/common/back.gif
期待期待连载,正玩psoc3呢。。。
可以呀,有问题一起探讨~~~~~~~~ fj1161 发表于 2013-9-9 08:09 static/image/common/back.gif
给力贴,顶一下,期待后续的更新~~~~~~~~~
谢谢啊~~~~~~~~~~~~~~ GY@艳 发表于 2013-9-9 08:22 static/image/common/back.gif
这个必须可以。日记日记,天天得有哟!
日记是天天有,时间有限,慢慢整理,把精华的和大家一起分享~~~ 本帖最后由 mengyun2801 于 2013-9-9 09:36 编辑
GY@艳 发表于 2013-9-9 08:25 static/image/common/back.gif
给你加颜色又加精喽哟!满意不。
谢谢了,你们给力,我就更给力~~~~~~~~~~~~
页:
[1]
2