教你如何把Arduino项目做成成品,DDS信号发生器例子
justinpiggy2013/06/05电子技术 IP:浙江
很多人用了其他单片机,说Arduino效率低,说Arduino成本高,一次要用一块板,不能重复使用。

以此教程献给那些热爱Arduino的人。

这个是我DIY的DDS信号发生器例子。

DDS信号发生器使用了成品模块,其实就是AD9850的IC加上输出的滤波器网络。
控制器用了Arduino,连接1602 LCD作为显示。
控制方法是用左右键移动光标控制不同的位,上下键调整该光标所指示的值,并且具有自动进位和快进的功能
(比如1000,光标指示千位上,按住上键,会变成2000,一直按住,马上就会自己快进,快速变成3000,4000...到达9000以后会自动变成10000,然后继续变成11000,12000,13000...以此类推)
受限于AD9850的性能和外围输出网络的带宽,20MHz下还是很稳定的。用这个配合示波器粗略测个电容电感还是没啥压力的。当然还能在低频下作为音频发生器和频闪光源控制器。

这个电路里Arduino就被移植到了洞洞板上。
仔细看图你会发现:
1.  石英振荡器没有电容,只有负载电阻1M。
2.  用PWM功能驱动三极管实现了背光两度可调工恩那个。
3.  按钮都配备了下拉电阻,实际上完全可以用Arduino自带的INPUT_PULLUP功能,把开关变成下拉触发,这样可以节省大量电阻,可惜当时制作这个时候还没有了解到这一点。
4.  用LM7805供电。
5.  配有完整的复位电路。

整机
IMG_4166.jpeg

模块化设计,拆去LCD模块
IMG_4167.jpeg

将ATMega328P藏于LCD模块下,配有复位电路,晶体振荡器,LCD对比度电位器,背光控制三极管
IMG_4168.jpeg

模块化设计,拆去DDS模块
IMG_4169.jpeg

晶体振荡器没有电容,只有1M负载电阻
IMG_4170.jpeg

自己设计走线的背面
IMG_4171.jpeg

开机画面
IMG_4172.jpeg

初始化完成,调到1000Hz
IMG_4174.jpeg

示波器观察输出
IMG_4175.jpeg

调到1MHz
IMG_4176.jpeg

调到10MHz
IMG_4177.jpeg       
+50  科创币    清纯小萝莉    2013/06/05 对arduino大爱啊!
+15  科创币    robbie    2013/06/06
来自:电子信息 / 电子技术
16
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
清纯小萝莉
11年6个月前 IP:未同步
532632
请问如何把东西显示在液晶板上啊?是不是有专门的模块用于驱动液晶板?还是利用自身的函数?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
11年6个月前 IP:未同步
532639
回 1楼(清纯小萝莉) 的帖子
这个1602是字符型液晶,是可以通过命令直接控制的。
在Arduino上控制字符型液晶非常容易,只需要载入LiquidCrystal.h的库就可以
#include <LiquidCrystal.h>

线路上我使用了4线接法
//1602 LCD Pins
int RS_Pin=8;
int EN_Pin=7;
int D4_Pin=6;
int D5_Pin=5;
int D6_Pin=4;
int D7_Pin=2;
int BL_Pin=3;

因此开始时候需要先设定引脚
LiquidCrystal LCD(RS_Pin,EN_Pin,D4_Pin,D5_Pin,D6_Pin,D7_Pin);

然后初始化LCD的行列数
XXXXXXgin(16,2);

这样LCD已经可以使用。
接下来你需要的函数是
XXXXXXear();   //清屏
XXXXXXtCursor(x,y);    //用于把光标移动到y行x列(注意,左上角为0,0)
XXXXXXint(str);  //用于输出字符串
这样你应该已经知道如何用了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
11年6个月前 IP:未同步
532641
回 1楼(清纯小萝莉) 的帖子
可能你还会问那个表示亮度的图标如何表示出来的。

其实还有两个函数。
XXXXXXeateChar(n, c);
LCD.write(n);

第一个是用来创建一个字符,c是一个数组标志
看了下面这个例子你就知道c怎么来了
byte c[8] = {
  B00000,
  B00000,
  B10101,
  B01010,
  B00000,
  B01110,
  B11111,
};

n是这个字符的代号,后面需要调用只要LCD.write(n);就可以了。
似乎最多可以创建8个
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
薛定谔的猫
11年6个月前 IP:未同步
532740
LZ设计能力不错,建议学一下AD 将来做一些简单的基于arduino的小东西可以大量降低成本和时间,有兴趣的还可以制作成套件
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Cirno
11年6个月前 IP:未同步
532749
不错,我觉得楼主既然已经玩到了不需要arduino原型板这一步,完全可以抛掉arduino的库直接学AVR的底层编程了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
11年6个月前 IP:未同步
532758
回 4楼(薛定谔的猫) 的帖子
这个是去年的东西了,今年春节前我买了感光制作PCB的材料,所以都可以自己做PCB了,设计软件当然也都用过了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
11年6个月前 IP:未同步
532760
回 5楼(琪露诺) 的帖子
其实Arduino IDE里可以直接接触AVR底层的东西。
所以如果我继续用Arduino,依然可以用AVR底层的东西,举几个例子:
比如PORTB的IO控制会比Arduino自带的digitalWrite快很多,是直接控制IO的寄存器,Arduino环境里也可以用。
比如WatchDog功能,也可以,我用WatchDog功能成功让Arduino间歇运行,在另外一个闹钟帖子里你可以看到,Arduino本身库里没有专门来弄这个功能,我弄好以后本来闹钟预计半个月要换电池,现在估计可以半年。
比如PWM的频率控制,其实是AVR内置的定时器的包装,我也用过这个来做很多事情。

而在这个过程中,我依然可以用液晶库非常方便地驱动LCD,而不需要像单纯AVR一样准备很多代码。所以我对于低速MCU部分还会选择Arduino。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
pankewen
11年6个月前 IP:未同步
532764
回 楼主(justinpiggy) 的帖子
这叫成品?而且在你做的东西上没看出来Arduino有何优势。g2452能做,attiny能做,51也能做。。。成本都比这十几块的mega低多了。。。而且波形有问题,不知道是否和9850成品板布线有关,我当年做的9850比你的波形好看得多。。。建议好好练下焊功。。。开图片的时候吓死我了。。。[s:225][s:225][s:225]
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
11年6个月前 IP:未同步
532847
回 8楼(pankewen) 的帖子
当然什么都能做,但没有一个能做得像Arduino这么简洁。
成品意思是可以独立使用,不用一堆杜邦线。
成本要低很简单,Arduino IDE同样可以用在Attiny上,原带库基本可用,但是对于我来说,一片ATtiny不见得比Atmega好买。上次想买attiny45还遇到奸商。

还有波形问题是示波器问题,我为了消除高频干扰,开了带宽限制,这个示波器只有20M带宽在测量10M波形。恢复全带宽就可以恢复正常

焊工问题个人觉得已经不错,有PCB当然会更好
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
11年6个月前 IP:未同步
532849
回 8楼(pankewen) 的帖子
请注意示波器左下角的200mV后面有一个BW~ 就是不小心开的带宽限制
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
薛定谔的猫
11年6个月前 IP:未同步
532897
回 6楼(justinpiggy) 的帖子
就我感觉,自己制作PCB不够划算,直接发厂家还比较省钱
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
11年6个月前 IP:未同步
532901
回 11楼(薛定谔的猫) 的帖子
不晓得你那里PCB厂家制版多少钱?
我小学时候做过一片6cm*5cm大小的版,花了我100元,做出来10片。。。之后再也没做个小DIY去厂家做版的想法了。。。。

现在自己做PCB其实还是挺划算的,花了100多元买了很多材料工具,现在做了好多板了,每个我都做2-4片,不会浪费
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小氚
11年6个月前 IP:未同步
532940
有时间我也要去学学Arduino
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
.........
11年6个月前 IP:未同步
532946
性价比还是STM8最高
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
50后大灰狼
11年6个月前 IP:未同步
541901
请问楼主这个最低频率可做到多少?输出的信号功率有多大?比如我想输出50HZ15V1A的正弦波信号,可以吗?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
justinpiggy
进士 专家 学者 机友 笔友
文章
70
回复
1816
学术分
1
2009/06/23注册,4天21时前活动

Harvard Physics

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}