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

3天以来,已经有52位粉丝加入了付费群(电子类资料分享与技术分享),如果想进群可以私信或者评论,我们这里会一一对接。
这是我早期基于ATtiny85的微型函数生成器项目的PCB版本。它使用直接数字合成产生正弦、三角、锯齿、正方形和矩形波、脉冲序列和噪声。频率可采用1Hz ~ 5kHz的旋转编码器,以1Hz为步长进行调整,所选波形及频率显示在OLED显示屏上。
最开始波形发生器包含7种波形,后续波形发生器正弦波增加了正弦波。
波形
波形发生器提供以下10种波形,你可以按下旋转编码器按钮,在这10种波形之间进行切换:
对于每个波形(除了噪声),你可以通过旋转编码器来调整频率。OLED显示屏上显示一个图标,表示当前选择的波形和频率(Hz)。
电路
这是微型功能发生器PCB的电路:
因为PB1的输出在0V和+5V之间变化波形上有一个+2.5V的直流偏置。偏移量避免通过输出相对于一个虚拟的地面由两个10 kΩ电阻。
►零件清单
虽然我是surface-mount的粉丝,但是旋转式编码器和OLED显示器都是通孔的,所以在这个例子中,我决定从头到尾使用通孔元件,这样在不需要SMD经验的情况下更容易构建电路。
我用Eagle设计了一块板材,寄给PCBWay制作(电路板厂家)。如果你想制作一个电路板,在文章的最后有一个到Eagle文件的链接(如果大家需要可以私信我,我特意注册了账号,把源文件下载到我的电脑上)。
我把ATtiny85焊接到电路板上,然后在上面装上一个8针的IC插座,再把电线从我的AVR编程板上插进去。或者,你也可以在焊接之前在AVR编程板的插座上编程ATtiny85,或者使用IC插座。
程序
关于这个项目的源程序,我这里也为大家进行了打包,需要的可以找我们要。
void SetupDDS () { // Enable 64 MHz PLL and use as source for Timer1 PLLCSR = 1<<PCKE | 1<<PLLE; // Set up Timer/Counter1 for PWM output TIMSK = 0; // Timer interrupts OFF TCCR1 = 1<<PWM1A | 2<<COM1A0 | 1<<CS10; // PWM A, clear on match, 1:1 prescale pinMode(1, OUTPUT); // Enable PWM output pin // Set up Timer/Counter0 for 20kHz interrupt to output samples. TCCR0A = 3<<WGM00; // Fast PWM TCCR0B = 1<<WGM02 | 2<<CS00; // 1/8 prescale TIMSK = 1<<OCIE0A; // Enable compare match, disable overflow OCR0A = 60; // Divide by 61 }


还没有评论,来说两句吧...