本帖最后由 zhaoxia101 于 2020-5-22 20:14 编辑
一只穷X的入门电子爱好者,猛然回忆起自己没有合适的信号发生器,于是他点开了某宝-----
一些看起来可以用的Signal Generator
学生党要饿死自己换来一个信号gen吗。。。况且饿死了买有了啥用,难道送到阴间去吗
算了,他打算先看看OSHWHub上有什么
[他看到了这个----]https://oshwhub.com/Qstorey/DDS9833_Shared
https://oshwhub.com/Qstorey/DDS9833_Shared
再一想,他自己不是还有赢得的打样券&商城元件券吗
咳咳装的正经一点
好的,这里是Link。
前一段时间我在OSHWhub上投了一个DIY的信号Gen,并且想法源于Cezar Chrilla的AD9833的版本,这里跟大家进行一下这个项目的介绍(顺便白**一张券)
首先要介绍的就是程序部分---因为时间紧迫,程序不完美之处有很多,并且直观度比较差,如果大家有更好的想法可以自己进行新的设计
代码
因为方案具体在OSHWHub已有展示,这里主要跟大家分享代码部分的思路。
首先,引用了第三方Encoder库,因为主要还是赶进度,如果想做的更细更精,可以自己进行编库之类的操作。
程序初始化,之后,Encoder库内置一个counter,当连接好Rotary Encoder并且程序前期配置好,它的counter会因顺时针或逆时针旋转进行增减。而我使用的电位器每一个click在引脚CLK和DATA会有4次符合的脉冲,所以我们再添加一个变量用来每4次触发之后返回一个位置值,并且在变量DataReadyEnc亮true,提示程序取值。
之后是菜单界面部分,我们主要使用了变量menuState来决定每一个界面,其中特别提醒的是频率设置中那个$hit一般的增减算法,成这样是因为arduino处理浮点数的能力有限,当然大家也可以摸索进行更简洁的方法。
$$$$hhhiiittttt
按键部分我的设计是可以检测长按或者短按均可以检测到,通过对millis和按键事件差别进行对比 longPressActive变量状态 ,进而进行类似编码器的flag检测操作,并且进行按钮事件触发是Timer1来检测
按键刷新
还有这个奇怪的四个主屏print,后边的true和false是为了选择是否给光标符号预留空格的参数
硬件部分关于AD8232这个小IC
AD9833简介
这款DDS IC具有极低功耗,+2.3v-5.5v的电源轨,使用一个24MHz的有源晶振提供时钟信号,SPI通信,带有掉电模式,窄带信噪比 > 72dB 同时我们可以看到它的主要应用可以是Test Equipment, perfect !
amplifier部分
最后希望大家在制作这个工程有所收获,同时这个项目因为赶时间肯定不会特别完美,所以希望大家若是有兴趣可以进行fork操作并且进行重置。
作者:Link不务正业ww
[url=https://www.bilibili.com/read/cv6080314]https://www.bilibili.com/read/cv6080314
出处: bilibili
|