由于最近两天一直在策划粉丝付费群的事务,由于是刚开始,很多事情不够熟悉,故不能抽出时间来写原创,故今天翻译一篇国外的佳作,虽然只是翻译,但我这里也是经过了严格的筛选的(其实主要是有道翻译的,当然我这里也付出了很多,哈哈^_^)。

这是我早期基于ATtiny85的微型函数生成器项目的PCB版本。它使用直接数字合成产生正弦、三角、锯齿、正方形和矩形波、脉冲序列和噪声。频率可采用1Hz~5kHz的旋转编码器,以1Hz为步长进行调整,所选波形及频率显示在OLED显示屏上。

最开始波形发生器包含7种波形,后续波形发生器正弦波增加了正弦波。
波形波形发生器提供以下10种波形,你可以按下旋转编码器按钮,在这10种波形之间进行切换:

对于每个波形(除了噪声),你可以通过旋转编码器来调整频率。OLED显示屏上显示一个图标,表示当前选择的波形和频率(Hz)。
电路这是微型功能发生器PCB的电路:

因为PB1的输出在0V和+5V之间变化波形上有一个+2.5V的直流偏置。偏移量避免通过输出相对于一个虚拟的地面由两个10kΩ电阻。
►零件清单虽然我是surface-mount的粉丝,但是旋转式编码器和OLED显示器都是通孔的,所以在这个例子中,我决定从头到尾使用通孔元件,这样在不需要SMD经验的情况下更容易构建电路。

我用Eagle设计了一块板材,寄给PCBWay制作(电路板厂家)。如果你想制作一个电路板,在文章的最后有一个到Eagle文件的链接(如果大家需要可以私信我,我特意注册了账号,把源文件下载到我的电脑上)。
我把ATtiny85焊接到电路板上,然后在上面装上一个8针的IC插座,再把电线从我的AVR编程板上插进去。或者,你也可以在焊接之前在AVR编程板的插座上编程ATtiny85,或者使用IC插座。
程序关于这个项目的源程序,我这里也为大家进行了打包,需要的可以找我们要。
voidSetupDDS(){//Enable64MHzPLLanduseassourceforTimer1PLLCSR=1PCKE|1PLLE;//SetupTimer/Counter1forPWMoutputTIMSK=0;//TimerinterruptsOFFTCCR1=1PWM1A|2COM1A0|1CS10;//PWMA,clearonmatch,1:1prescalepinMode(1,OUTPUT);//EnablePWMoutputpin//SetupTimer/=3WGM00;//FastPWMTCCR0B=1WGM02|2CS00;//1/8prescaleTIMSK=1OCIE0A;//Enablecomparematch,disableoverflowOCR0A=60;//Divideby61}