ntwhq 发表于 2013-8-11 11:21:50

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

本帖最后由 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;//
   void setup( ) {}
   void loop( )
   {
       for(x = 0;x < 128;x++)    //信号采样
       Buffer = 63-(analogRead(A0)>>4);
       u8g.firstPage();//清屏
   do               //显示
      {
       for(x = 0;x < 127;x++)
       u8g.drawLine(x,Buffer,x,Buffer);//画相邻两点连线
      }
   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;
void setup( )
{
   analogReference(INTERNAL); //ADC使用单片机内部1.1V基准
}
void loop( )
{
   for(x = 0;x < 128;x++)    //信号采样
   Buffer = 63-(analogRead(A0)>>4);
   u8g.firstPage();//清屏
   do               //显示
   {
       for(x = 0;x < 127;x++)
       u8g.drawLine(x,Buffer,x,Buffer);//画相邻两点连线
       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电子制作》

bmwz1992 发表于 2013-8-11 12:57:36

牛~~~求U8glib.h库文件和一些用法,拜求啊~~~~

fangtaonj 发表于 2013-8-11 12:34:17

:lol:lol:lol

galaxy 发表于 2013-8-11 21:20:19

>>牛~~~求U8glib.h库文件和一些用法,拜求啊~~~~

http://www.geek-workshop.com/thread-2588-1-1.html

zhanggang1971 发表于 2013-8-11 22:17:29

这个一定要顶一下!:)

philhoo 发表于 2013-8-11 23:25:14

实在是高啊!!!

nust_奔跑 发表于 2013-8-12 09:52:52

niubility~

code_asf 发表于 2013-8-12 17:26:42

很简单,先收藏。回去试试

Fortware 发表于 2013-8-12 19:09:26

LZ的库呢?能共享就好了:)

ntwhq 发表于 2013-8-12 20:26:29

Fortware 发表于 2013-8-12 19:09 static/image/common/back.gif
LZ的库呢?能共享就好了

已补充在一楼。

zhujunsan 发表于 2013-8-12 21:11:24

直接Google搜u8glib就有了嘛~在Google Code上,更新的挺快的。

yaoyonghe 发表于 2013-8-13 00:00:14

刷新速度够吗?

yaoyonghe 发表于 2013-8-13 00:02:40

期待完善成一个功能完备,制作简易的示波器:)

ntwhq 发表于 2013-8-13 09:24:27

yaoyonghe 发表于 2013-8-13 00:00 static/image/common/back.gif
刷新速度够吗?

感觉不到刷新速度慢。

ntwhq 发表于 2013-8-14 18:49:52

yaoyonghe 发表于 2013-8-13 00:02 static/image/common/back.gif
期待完善成一个功能完备,制作简易的示波器

最新功能已在一楼补充。
页: [1] 2 3 4 5
查看完整版本: 用arduino做的数字示波器,只要16行代码,你信吗?