DAC0832_简易函数信号发生器_按键控制波形and步进

       好久没有写博客了,因为回家休息了三天,哈哈,现在从新恢复正常,恢复正常的第一个任务就是做个简易的函数信号发生器,因为要求不高,呵呵,用勉强用一下DAC0832啦…

       所需要的模块:按键模块,最小系统板,DAC0832模块,电源模块…

CIMG1546

       方案:通过按键控制函数信号发生器输出的波形,有正弦波,三角波,锯齿波,方波…并且控制步进10HZ,100HZ,500HZ..输出最大频率2.5KHZ

       好了,方案想好了,模块也准备好了,那就动手开始写程序吧,嚯嚯,刚刚开始兴致勃勃的我,马上就遇到了问题,怎么用按键来切换波形???

       我们都知道,AVR输出给DAC0832的数据是在一个死循环中不停地输入数据的,根据数据的不同,DAC0832输出的电压也不同,以此产生波形,但是在死循环中加入按键检测的话,会出现断断续续的波形,为什么呢?因为按键检测的时间会占用很长的一段时间,怎么把这段时间省去呢?而且又要时刻刻的通过按键来改变波形?这个是我想了好久,问技术群里的人,都说建立中断或者是查询..灵光一现,按键检测的时间和是否有按键被按下的时间相差很多,按键检测还不如查询是否有按键被按下,所以后来,我就在死循环中加入了检测按键是否被按下的一条语句,嘿嘿,节约了很大一部分时间…输出的波形也是连续的..

       解决了按键切换波形的问题,接下来遇到了更困难的问题,怎么控制步进?改变步进的思路是什么?刚开始,我认为改变扫描数据的时间就可以改变周期,通过改变周期来改变频率,并且简单的以为控制按键来改变延时就可以…但是结果却是随着频率大小不同,改变相同的延时,带来的确实不同的步进,这个就比较郁闷了…怎么办?唉,本人不叫笨,就只能用笨的方法啦,呵呵,通过改变延时来确定对应的频率,然后,将延时作为一个数组存放起来,通过按键来控制数组元素…以达到目的,哈哈,此方法确实比较累人,请高手给予建设性的建议..

       最终,输出的波形还算是比较稳定的:

CIMG1548 CIMG1551

CIMG1554 CIMG1556

如有不足之处,还请高手给以建议..谢谢啦~~~

posted @ 2010-08-12 20:42  Second Life  阅读(3568)  评论(1编辑  收藏  举报