本帖最后由 刘登辉 于 2015-5-18 20:21 编辑  
 
 
 
 
 
主要参数:         频 率 响 应:  10Hz-50KHz       
电          源:  5V        
LCD液晶屏: 128x64(ST7920)       
测量显示区:96x64       
信息显示区:32x64,显示测试信号的频率、Vpp等内容       
同 步 方 式:上升沿触发          
扫 描 速 度:0.02ms/div~10ms/div,按1-2-5进位分九档          
Hold 功  能:冻结显示波形和参数  
二、基础试验 
 
      使用Arduino 做项目的最大优势就是其丰富的资源,同时也不需要了解太多单片机的知识。我下面的制作就利用了一个LCD的资源库u8glib,使得编程变得简单多了,不然LCD的驱动会花费你好多时间。 
      u8glib 下载:下面是我先用Arduino UNO搭建的试验电路,LCD使用ST7920控制的12864液晶屏。 
 
只要输入法下列代码,编译下载后就能实现数字示波器的基本功能了,是不是很简单? 
- #include <U8glib.h> //声明库 
 
 -  U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 声明液晶屏 SPI Com: SCK =13, MOSI = 12, CS =  11 
 
 -  int x,y; //绘点坐标 
 
 -  int Buffer[128]; //缓存值储存数组 
 
 -  void setup( ) {  }  
 
 -  //采样 
 
 -  void sample( )   
 
 - {   
 
 -  for(x = 0;x < 128;x++)  
 
 -    Buffer[x] = analogRead(A0);  //信号采样 
 
 -  for(x = 0;x < 128;x++)   
 
 -    Buffer[x] = 63-(Buffer[x]>>4); //计算纵坐标值 
 
 - } 
 
 - //显示 
 
 - void draw( )   
 
 - {   
 
 -   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); //画边框  
 
 - }    
 
 - void loop( )  
 
 -  {  
 
 -    sample();         //采样 
 
 -    u8g.firstPage();  //清屏 
 
 -    do  draw( );      //显示 
 
 -    while( u8g.nextPage( )); 
 
 -  }  
 
  复制代码 
显示效果: 
 
 
 
利用这个试验电路,我测量了Arduino 直接使用analogRead() 函数完成一次数模转换的时间约为111微秒,转换速度很慢,因此其带宽只有1KHz多点, 接下来的首要任务就是提高数模转换速度,同时增加其它功能。 
 
三、最新程序 
         下面是最新的源代码,使用时请保留我的开机LOGO,呵呵。 
 
 
 
 上述程序ADC使用片内1.1V基准电压,如果要使用片外5V基准电压,应将程序中 
        ADMUX=0xe0; 改为:ADMUX=0x60;  
        Vpp=(V_max-V_min)*1.1/255;改为: Vpp=(V_max-V_min)*5/255; 
 
四、整机制作 
 
       上面做试验用的是Arduino UNO,实际制作时使用Arduino PRO mini,这样才能有小体积。 
 
        电路图: 
 
 
 
主要元器件清单:         
        名称                                                            数量 
       Arduino PRO mini                                        1 
        LCD12864液晶屏(ST7920)                       1 
        电解电容器(100μ 25V)                              1                 
        电位器(50k)                                             1 
        洞洞板                                                           2 
        按钮开关                                                       3 
        电源开关                                                       1 
        电池盒(配7号充电电池)                            1 
        机壳                                                              1 
 
 
 1、焊接Arduino PRO  mini 插针。 
 
 
 
 
 
2、 焊接电路板元件 
 
 
 
 
3、制作LCD洞洞板 
 
 
 
 
4、组装电路板 
 
 
 
 
 
 
5、制作机壳 
       我用了一个充电宝的塑料包装盒改制机壳,在相应的地方打上孔。 
 
 
6、总装 
      将电路板装入机壳,用厚点的白纸做一个面板,贴在前面板内侧。 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
五、程序下载与测试 
         
      由于 Arduino PRO mini 不自带USB转串口的电路,所以要通过一根USB转串口的下载线才能下载程序。 
      示波器的调试很简单,只要调节50k电位器使水平扫描线居中即可。 
      我用一台信号发生器作信号源。 
 
 
 
 
 
 
 
 
 
几点说明 
 
        1、这是一个最简单的数字示波器,可以在此基础上进一步完善; 
        2、大家可能注意到我没有使用 I/O端口0-7,这正好是AVR单片机的一个8位并口,这是我为后续升级准备的,在使用专用ADC芯片的时候它可以作为数据输入,如果大家对这个示波器感兴趣,以后我会考虑升级; 
       3、作品完成得比较仓促,有什么缺陷和不足的地方,请大家指教,你制作中有什么问题也可以在这里交流。 
       谢谢大家! 
 
 
转自arduino论坛  
 
 |