极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 98211|回复: 70

用arduino做的数字示波器,只要16行代码,你信吗?

  [复制链接]
发表于 2013-8-11 11:21:50 | 显示全部楼层 |阅读模式
本帖最后由 ntwhq 于 2016-10-11 10:01 编辑

      本坛FoieDEEEE_仲敬  同学用arduino做的示波器是一个创新,对我很有启发,仔细学习和研究了他的程序,发现有一缺陷:采集一个数据,就把数组所有数左移一下,并把整个屏幕刷新一次,这样两次采集数据之间的时间很长,所以速度很慢,只能显示几Hz的信号。因此我决定自己写一下代码,我采用先把所有一屏所需数据全采集好再作处理的方法,明显提高了工作速度,最简洁的代码如下:

     #include <U8glib.h> //声明库
     U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 声明液晶屏  13=SCLK, 12=SID, 11=CS
     int x,y; int Buffer[128];//
     void setup( ) {  }
     void loop( )
     {
       for(x = 0;x < 128;x++)    //信号采样
       Buffer[x] = 63-(analogRead(A0)>>4);
       u8g.firstPage();  //清屏
     do               //显示
      {
       for(x = 0;x < 127;x++)
       u8g.drawLine(x,Buffer[x],x,Buffer[x+1]);  //画相邻两点连线
      }
     while(u8g.nextPage( ));
    }

     用arduino代码,完成一次AD转换约需112微秒,这样显示频率在1500Hz以下的输入信号的波形。



如果想在程序上加坐标轴和边框,代码如下:

  #include <U8glib.h> //声明库
  U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 声明液晶屏  13=SCLK, 12=SID, 11=CS
  int x,y; int Buffer[128];
  void setup( )
  {
     analogReference(INTERNAL); //ADC使用单片机内部1.1V基准
  }
  void loop( )
  {
     for(x = 0;x < 128;x++)    //信号采样
     Buffer[x] = 63-(analogRead(A0)>>4);
     u8g.firstPage();  //清屏
     do               //显示
     {
       for(x = 0;x < 127;x++)  
       u8g.drawLine(x,Buffer[x],x,Buffer[x+1]);  //画相邻两点连线
       u8g.drawLine(64,0,64,63);  // 画坐标轴
       u8g.drawLine(0,32,128,32);
       for(x=0;x<128;x+=8)        //画坐标轴刻度
       u8g.drawLine(x,31,x,33);
       for(x=0;x<64;x+=8)
       u8g.drawLine(63,x,65,x);   
       u8g.drawFrame(0,0,128,64); //画边框  
    }
   while( u8g.nextPage( ));
}


下载后显示的波形:





可在此基础上对程序不断进行完善,增加其它功能。

最近版本的功能如下图:



接线图:



U8G库

本制作在我写的这本书里有详细介绍《玩转Arduino电子制作》

  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-8-11 12:57:36 | 显示全部楼层
牛~~~求U8glib.h库文件和一些用法,拜求啊~~~~
回复 支持 1 反对 0

使用道具 举报

发表于 2013-8-11 12:34:17 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2013-8-11 21:20:19 | 显示全部楼层
>>牛~~~求U8glib.h库文件和一些用法,拜求啊~~~~

http://www.geek-workshop.com/thread-2588-1-1.html
回复 支持 反对

使用道具 举报

发表于 2013-8-11 22:17:29 | 显示全部楼层
这个一定要顶一下!
回复 支持 反对

使用道具 举报

发表于 2013-8-11 23:25:14 | 显示全部楼层
实在是高啊!!!
回复 支持 反对

使用道具 举报

发表于 2013-8-12 09:52:52 | 显示全部楼层
niubility~
回复 支持 反对

使用道具 举报

发表于 2013-8-12 17:26:42 | 显示全部楼层
很简单,先收藏。回去试试
回复 支持 反对

使用道具 举报

发表于 2013-8-12 19:09:26 | 显示全部楼层
LZ的库呢?能共享就好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-12 20:26:29 | 显示全部楼层
Fortware 发表于 2013-8-12 19:09
LZ的库呢?能共享就好了

已补充在一楼。
回复 支持 反对

使用道具 举报

发表于 2013-8-12 21:11:24 | 显示全部楼层
直接Google搜u8glib就有了嘛~在Google Code上,更新的挺快的。
回复 支持 反对

使用道具 举报

发表于 2013-8-13 00:00:14 | 显示全部楼层
刷新速度够吗?
回复 支持 反对

使用道具 举报

发表于 2013-8-13 00:02:40 | 显示全部楼层
期待完善成一个功能完备,制作简易的示波器
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-13 09:24:27 | 显示全部楼层
yaoyonghe 发表于 2013-8-13 00:00
刷新速度够吗?

感觉不到刷新速度慢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-14 18:49:52 | 显示全部楼层
yaoyonghe 发表于 2013-8-13 00:02
期待完善成一个功能完备,制作简易的示波器

最新功能已在一楼补充。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 16:12 , Processed in 0.049318 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表