找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7082|回复: 8
打印 上一主题 下一主题
收起左侧

ardunio示波器

[复制链接]
跳转到指定楼层
楼主
      手上资金不足,也没有太多时间写下复杂的示波器程序,所以只能做最简单的,没有办法。                                                        
       别人给了个盒子,用来做了简易的示波器,程序抄袭在ardunio中文社区。
特别说明:
测试本模式是使用本目录下的:
QDtech_Demo_220x176_Serial_ILI9225文件夹QDtech2_2_Demo_220x176_Serial.ino

QDtech_Demo_220x176_Serial_ILI9225_ChineseFont文件夹QDtech2_2_Demo_220x176_Serial.ino
里面的测试源代码直接下载来做测试。

并不是用UTFT库里面的example例子来测试哦,亲们请注意搞清楚。

                  UTFT.zip (2.35 MB, 下载次数: 25)
                  这个压缩包可以用,他们网页上的不知道模搞得,用不了,编译就出错。
                  下面两个是调试程序,效果和优酷视屏的一样。

   QDtech_Demo_220x176_Serial_ILI9225.zip (4.62 KB, 下载次数: 17)
                  下面是介绍文档
2.2寸176X220串口Arduino模块原理图.pdf (46.61 KB, 下载次数: 16)

2.2寸9225_176X220模块说明.pdf (94.95 KB, 下载次数: 11)

2.2寸9225_Arduino代码使用教程Rev1.1(1).pdf (804.65 KB, 下载次数: 9)

2.2寸9225_Arduino代码使用教程Rev1.1.pdf (804.65 KB, 下载次数: 7)

2.2寸串口Arduino模块尺寸图.pdf (6.94 KB, 下载次数: 9)

液晶屏规格书15-12225-17931.pdf (390.9 KB, 下载次数: 15)



                   这个是实际效果图,据说只能测量7k左右波形,还是有点啃的,而且由于ad是atmeage自带,所以精度也不准确,干扰也很大,只能随便测量下,精度和低功耗还算不上。
           
        

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:111475 发表于 2016-3-30 22:55 | 只看该作者
这是楼主的ardunio示波器的程序,给大家省黑币:
  1. /************************************************************************************/
  2. #include <UTFT.h>

  3. // Declare which fonts we will be using
  4. extern uint8_t SmallFont[];
  5. //UTFT myGLCD(Model,SDA,SCL,CS,RST,RS)
  6. //QD220A is for QDtech 2.2inch SPI LCD Module,Driver IC:ILI9225
  7. UTFT myGLCD(QD220A,A2,A1,3,2,A3);   // Remember to change the model parameter to suit your display module!
  8. int Key_add = 8;  //声明按钮引脚
  9. int Key_sub = 9;
  10. int Key_hold = 10;
  11. int Key_a =11;
  12. int x,y; //声明坐标
  13. int i,i1,i2,V_min,V_max,V_mid,t,t0,t1,sta,Key=1,hold=0,yi=88;
  14. long Freq;
  15. float Vpp,Vp_p;
  16. int Y[96]; //声明信号值储存数组
  17. int Buffer[220]; //缓存值储存数组
  18. int buf[220];
  19. //采样
  20. void sample( )  
  21. {  for(i = 0;i <220;i++)
  22.    {  
  23.      Buffer[i] = analogRead(A4);
  24.     switch(Key)
  25.      {
  26.        case 1:
  27.        break;
  28.        case 2:
  29.        delayMicroseconds(4);  
  30.        break;
  31.        case 3:
  32.        delayMicroseconds(10);
  33.        break;
  34.        case 4:
  35.        delayMicroseconds(23);
  36.        break;
  37.        case 5:
  38.        delayMicroseconds(60);
  39.        break;
  40.        case 6:
  41.        delayMicroseconds(123);
  42.        break;
  43.        case 7:
  44.        delayMicroseconds(248);
  45.        break;
  46.        case 8:
  47.        delayMicroseconds(623);
  48.        break;
  49.        case 9:
  50.        delayMicroseconds(1247);
  51.        break;
  52.        default:break;
  53.      }
  54.    }
  55. }

  56. void Measure()
  57. {
  58.   V_max=Buffer[0];
  59.   V_min=Buffer[0];      
  60.   for(i=0;i<218;i++)
  61.   {
  62.     if(Buffer[i]>V_max)
  63.     V_max=Buffer[i];
  64.     if(Buffer[i]<V_min)
  65.     V_min=Buffer[i];
  66.   }
  67.   V_mid=(V_max+V_min)/2;
  68.   Vp_p=(V_max+V_min)/2*0.0049;
  69.   Vpp=(V_max-V_min)*0.0049;
  70.   for(i=0;i<218;i++)
  71.   {
  72.     if(Buffer[i]<V_mid&&Buffer[i+1]>=V_mid)  
  73.     {
  74.       i1=i;
  75.       break;
  76.     }
  77.   }
  78.   for(i=i1+1;i<218+i1;i++)
  79.   {
  80.     if(Buffer[i]<V_mid&&Buffer[i+1]>=V_mid)  
  81.     {
  82.       i2=i;
  83.       break;
  84.     }
  85.   }
  86.   t=i2-i1;
  87.   if(t>0)
  88.   Freq=10000/t;
  89.   else
  90.   Freq=0;
  91. }

  92. void Transform( )  
  93. {
  94.   for(i = 0;i < 220;i++)  
  95.    Y[i] =  yi-(Buffer[i]>>4);     
  96. }

  97. //显示
  98. void draw( )  
  99. {
  100. // Draw crosshairs
  101.   myGLCD.setColor(0, 0, 255);
  102.   myGLCD.setBackColor(0, 0, 0);
  103.   myGLCD.drawLine(109, 15, 109, 160);//画坐标轴
  104.   myGLCD.drawLine(1, 88, 218, 88);

  105.   for (int i=9; i<210; i+=10)//画坐标轴刻度
  106.     myGLCD.drawLine(i, 86, i, 90);
  107.   for (int i=18; i<160; i+=10)
  108.     myGLCD.drawLine(107, i, 111, i);
  109.      
  110.      
  111.   myGLCD.setColor(0, 0, 255);
  112.   myGLCD.drawRect(0, 14, 219, 161);//画边框(矩形函数)
  113. //画网格
  114. for(x=9;x<210;x+=10)
  115. {
  116.     for(y=18;y<160;y+=10)
  117.    myGLCD.drawPixel(x,y);
  118. }
  119. //显示参数

  120.    int a=1;
  121.     for (int x=1;x<218; x++)
  122. {
  123.    
  124.    if( a<219 )
  125.    a++;
  126.     myGLCD.setColor(0,0,0);
  127.     myGLCD.drawLine(x,buf[a],x,buf[a+1]);
  128.     myGLCD.setColor(0,255,255);
  129.     myGLCD.drawLine(x,Y[x],x,Y[x+1]);     
  130. }
  131.    a=1;
  132.     for (int x=1;x<218; x++)
  133. {
  134.    buf[x]=Y[x];
  135.    if( a<219 )
  136.    a++;
  137.     myGLCD.setColor(0,0,0);
  138.     myGLCD.drawLine(x,Y[x],x,Y[x+1]);
  139.     myGLCD.setColor(0,255,255);
  140.     myGLCD.drawLine(x,Y[a],x,Y[a+1]);
  141. }  
  142. buf[218]=Y[218];
  143. buf[219]=Y[219];
  144. myGLCD.setColor(255, 255, 255);
  145. myGLCD.printNumF(Vpp,1, 48, 1);
  146. myGLCD.printNumF(Vp_p,1, 117, 163);
  147. switch(Key)
  148. {
  149.       case  1:
  150.           myGLCD.print("0.02", 50, 163);
  151.           myGLCD.printNumF(Freq*50,1, 172, 1);
  152.       break;
  153.       case  2:
  154.          myGLCD.print("0.05", 50, 163);
  155.          myGLCD.printNumF(Freq*20,1, 172, 1);
  156.       break;
  157.       case  3:
  158.           myGLCD.print("0.10", 50, 163);
  159.           myGLCD.printNumF(Freq*10,3, 172, 1);
  160.       break;
  161.       case  4:
  162.           myGLCD.print("0.20", 50, 163);
  163.           myGLCD.printNumF(Freq*5,1, 172, 1);
  164.       break;
  165.       case  5:
  166.           myGLCD.print("0.50", 50, 163);
  167.           myGLCD.printNumF(Freq*2, 1,172, 1);
  168.       break;
  169.      case  6:
  170.          myGLCD.print("1.00", 50, 163);
  171.          myGLCD.printNumF(Freq, 1,172, 1);
  172.       break;
  173.      case  7:
  174.          myGLCD.print("2.00", 50, 163);
  175.          myGLCD.printNumF(Freq/2,1, 172, 1);
  176.       break;
  177.      case  8:
  178.          myGLCD.print("5.00", 50, 163);
  179.          myGLCD.printNumF(Freq/5, 1,172, 1);
  180.       break;
  181.       case  9:
  182.          myGLCD.print("10.0", 50, 163);
  183.          myGLCD.printNumF(Freq/10,1, 172, 1);
  184.       break;
  185.     default:break;
  186.    }
  187. }

  188. //键盘扫描
  189. void Key_scan()
  190. {
  191.     if(digitalRead(Key_add)==LOW)
  192.         {
  193.           while(digitalRead(Key_add)==LOW);
  194.           Key++;
  195.           if(Key==10)
  196.           Key=9;
  197.         }
  198.         if(digitalRead(Key_sub)==LOW)
  199.         {
  200.           while(digitalRead(Key_sub)==LOW);
  201.           Key--;
  202.           if(Key==0)
  203.           Key=1;  
  204.         }
  205.         if(digitalRead(Key_hold)==LOW)
  206.         {
  207.           while(digitalRead(Key_hold)==LOW);
  208.           hold=~hold;
  209.          
  210.         }
  211.          if(digitalRead(Key_a)==LOW)
  212.         {
  213.           while(digitalRead(Key_a)==LOW);
  214.           yi=yi+5;
  215.           if(yi>160||yi<74)
  216.           yi=74;
  217.         }
  218. }


  219. void setup()
  220. {
  221.    pinMode(Key_add,INPUT);
  222.    digitalWrite(Key_add,HIGH);
  223.    pinMode(Key_sub,INPUT);
  224.    digitalWrite(Key_sub,HIGH);
  225.    pinMode(Key_hold,INPUT);
  226.    digitalWrite(Key_hold,HIGH);
  227.    pinMode(Key_a,INPUT);
  228.    digitalWrite(Key_a,HIGH);  
  229.   
  230.     // Setup the LCD
  231.   myGLCD.clrScr();
  232.   myGLCD.InitLCD();
  233.   myGLCD.clrScr();
  234.   myGLCD.setBackColor(0, 0, 0);
  235.   myGLCD.setFont(SmallFont);
  236.   myGLCD.setColor(64, 64, 64);
  237.   myGLCD.fillRect(0, 0, 219, 13);
  238.   myGLCD.setColor(64, 64, 64);
  239.   myGLCD.fillRect(0, 162, 219, 175);
  240.   myGLCD.setColor(255, 255, 0);
  241.   myGLCD.setBackColor(64, 64, 64);
  242.   myGLCD.print("Vpp(V)", 1, 1);
  243.   myGLCD.print("F(HZ)", 132, 1);
  244.   myGLCD.print("MS/div", 1, 163);
  245.   myGLCD.print("V/div", 141, 163);
  246.   myGLCD.print("Vp-p", 85, 163);
  247.   myGLCD.setBackColor(0, 0, 0);
  248. myGLCD.setColor(255, 255, 255);
  249. myGLCD.print("0.82", 181, 163);
  250. }

  251. void loop()
  252. {
  253.    sample( );
  254.    Measure( );
  255.    Transform( );
  256.    Key_scan( );
  257.    if(hold==0)
  258.     draw();
  259. }
复制代码
回复

使用道具 举报

板凳
ID:117823 发表于 2016-5-1 17:11 | 只看该作者
你们盗我图呀。
回复

使用道具 举报

地板
ID:64913 发表于 2016-10-27 23:14 | 只看该作者
编译错误
回复

使用道具 举报

5#
ID:144037 发表于 2016-10-30 10:22 | 只看该作者
楼主如果想效果好点,可以考虑增加点屏蔽抗干扰措施,比如,用金属外壳;设计模拟输入的部分全部采用屏蔽双绞线;电源采用电池供电。

这三个措施很简单,但效果应该立竿见影。

供参考
回复

使用道具 举报

6#
ID:144917 发表于 2016-10-30 18:27 | 只看该作者
我去,这个强大!感谢楼主分享!
回复

使用道具 举报

7#
ID:24730 发表于 2017-3-2 16:41 | 只看该作者
强,比蓝翔强!
回复

使用道具 举报

8#
ID:185829 发表于 2017-4-20 20:05 | 只看该作者
频谱范围怎么样?
回复

使用道具 举报

9#
ID:199977 发表于 2017-5-12 15:40 | 只看该作者
这个看着好高端的样子
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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