NO.22 基于Arduino的数字示波器(完成)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: ntwhq

NO.22 基于Arduino的数字示波器(完成)

  [复制链接]
发表于 2017-4-4 13:03 | 显示全部楼层
很好,感谢楼主的分享,我会持续关注。
发表于 2017-4-4 17:03 | 显示全部楼层
示波器的时间扫描档放置到

200ms ,电压扫描档 2V 示波器探头为直流耦合(DC) 程序里要怎么设置?
发表于 2017-4-16 10:52 | 显示全部楼层
本帖最后由 supercaby 于 2017-4-16 10:56 编辑

请教下楼主,我做好之后,测量的时候,波幅相当相当小,几乎就跟直线差不多少,这个怎么解决?
如果不加50电位器直接进A0脚波幅就会非常明显。
发表于 2017-4-19 17:07 | 显示全部楼层
ntwhq 发表于 2013-8-19 20:39
您的建议很好,我这次就是想尽量做得简单点,可以根据需要再加入输入电路。5V的电压用运放效果不是 ...

谢谢UP主的无私分享。正在学习DUE,希望可以在楼主的基础上更进一步,共勉。
发表于 2017-5-7 02:14 | 显示全部楼层
这个屏带字库吗?
发表于 2017-5-8 23:39 | 显示全部楼层
LCD带字库不
发表于 2017-6-28 17:21 | 显示全部楼层
我用oled 的u8g库不行显示乱,改成u8g2的库oled正常了,附上oled用u8g2的代码
/*  
    arduino数字示波器  
    作者:�ntwhq@tom.com
    2013 08
*/
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 12, /* cs=*/ 11, /* dc=*/ 10, /* reset=*/ 9);

int Input = A5;  //声明输入引脚
int Key_add = 5;  //声明按钮引脚
int Key_sub = 6;
int Key_hold = 7;
int x,y; //声明坐标
int i,i1,i2,V_min,V_max,V_mid,t,t0,t1,sta,Key=1,hold=0;
long Freq;
float Vpp;
int Y[96]; //声明信号值储存数组
int Buffer[192];

void setup( )
{
  
   pinMode(Key_add,INPUT);
   digitalWrite(Key_add,HIGH);
   pinMode(Key_sub,INPUT);
   digitalWrite(Key_sub,HIGH);
   pinMode(Key_hold,INPUT);
   digitalWrite(Key_hold,HIGH);
   ADMUX=0xe0;  
   ADCSRA=0xe2;
   
   u8g2.begin();
   u8g2.setFont(u8g2_font_5x7_tr);
    u8g2.firstPage();
   do {
    u8g2.drawStr(0,24,"Hello World!");
    } while( u8g2.nextPage() );
   delay(5000);
}

void loop( )
{
   sample( );
   Measure( );
   Transform( );
   Key_scan( );
   if(hold==0)
   {
     u8g2.firstPage();
     do
     {
       draw( );
     }
     while( u8g2.nextPage() );
   }
}

void sample( )  
{  for(i = 0;i < 192;i++)
   {  
    Buffer = ADCH;
    switch(Key)
     {
       case 1:
       break;
       case 2:
       delayMicroseconds(4);  
       break;
       case 3:
       delayMicroseconds(10);
       break;
       case 4:
       delayMicroseconds(23);
       break;
       case 5:
       delayMicroseconds(60);
       break;
       case 6:
       delayMicroseconds(123);
       break;
       case 7:
       delayMicroseconds(248);
       break;
       case 8:
       delayMicroseconds(623);
       break;
       case 9:
       delayMicroseconds(1247);
       break;
       default:break;
     }
   }
}

void Measure()
{
  V_max=Buffer[0];
  V_min=Buffer[0];      
  for(i=0;i<192;i++)
  {
    if(Buffer>V_max)
    V_max=Buffer;
    if(Buffer<V_min)
    V_min=Buffer;
  }
  V_mid=(V_max+V_min)/2;  
  Vpp=(V_max-V_min)*1.1/255;
  for(i=0;i<97;i++)
  {
    if(Buffer<V_mid&&Buffer[i+1]>=V_mid)  
    {
      i1=i;
      break;
    }
  }
  for(i=i1+1;i<98+i1;i++)
  {
    if(Buffer<V_mid&&Buffer[i+1]>=V_mid)  
    {
      i2=i;
      break;
    }
  }
  t=i2-i1;
  if(t>0)
  Freq=8000/t;
  else
  Freq=0;
}

void Transform( )  
{
  for(sta=0;sta<96;sta++)
  {
    if(Buffer[sta]<128&&Buffer[sta+2]>128)  
    break;
  }
  for(i = 0;i < 96;i++)  
  Y =  63-(Buffer[i+sta]>>2);     
}

void draw( )  
{  
for(x = 0;x < 95;x++)  
  u8g2.drawLine(x,Y[x],x,Y[x+1]); //画线  

//画边框
u8g2.drawFrame(0,0,97,64);
// 画坐标轴
u8g2.drawLine(48,0,48,63);
u8g2.drawLine(0,32,96,32);
for(x=0;x<96;x+=8)
   u8g2.drawLine(x,31,x,33);
for(y=0;y<64;y+=8)
   u8g2.drawLine(47,y,49,y);
//画网格
for(x=8;x<96;x+=8)
{
    for(y=8;y<64;y+=8)
    u8g2.drawPixel(x,y);
}
//显示参数
u8g2.drawStr(98,7,"MS/div");
u8g2.drawStr(98,23,"V/div");
u8g2.drawStr(98,30,"0.324");
u8g2.drawStr(98,40,"Vpp");
u8g2.setCursor( 98, 47);
u8g2.print(Vpp);
u8g2.drawStr(118,47,"V");
u8g2.drawStr(98,55,"F(HZ)");
switch(Key)
{
      case  1:
      u8g2.drawStr(98,14,"0.02");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq*50);
      break;
      case  2:
      u8g2.drawStr(98,14,"0.05");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq*20);
      break;
      case  3:
      u8g2.drawStr(98,14," 0.1");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq*10);
      break;
      case  4:
      u8g2.drawStr(98,14," 0.2");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq*5);
      break;
      case  5:
      u8g2.drawStr(98,14," 0.5");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq*2);
      break;
     case  6:
      u8g2.drawStr(98,14,"  1");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq);
      break;
     case  7:
      u8g2.drawStr(98,14,"  2");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq/2);
      break;
     case  8:
      u8g2.drawStr(98,14,"  5");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq/5);
      break;
      case  9:
      u8g2.drawStr(98,14," 10");
      u8g2.setCursor( 98, 62);
      u8g2.print(Freq/10);
      break;
    default:break;
   }
}

//键盘扫描
void Key_scan()
{
    if(digitalRead(Key_add)==LOW)
  {
    while(digitalRead(Key_add)==LOW);
    Key++;
    if(Key==10)
    Key=9;
    delay(10);
  }
  if(digitalRead(Key_sub)==LOW)
  {
    while(digitalRead(Key_sub)==LOW);
    Key--;
    if(Key==0)
    Key=1;
    delay(10);
        }
        if(digitalRead(Key_hold)==LOW)
  {
    while(digitalRead(Key_hold)==LOW);
          hold=~hold;
    delay(10);
        }
}




发表于 2017-7-12 15:24 | 显示全部楼层
新手学习中,遇到了问题:用1.8.3Arduino IDE编译代码时无法成功,总是显示libraries\U8glib\U8glib.cpp.o (symbol from plugin): In function `U8GLIB::initSPI(_u8g_dev_t*, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)':

(.text+0x0): multiple definition of `U8GLIB::initRW8Bit(_u8g_dev_t*, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'

sketch\U8glib.cpp.o (symbol from plugin).text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
为开发板 Arduino/Genuino Uno 编译时出错。

在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。

请问该怎么办?
发表于 2017-9-24 10:20 | 显示全部楼层
你好,想仿制您的arduino示波器  还有就是想连接电脑,同步波形,需要怎么调整代码  能指点一下么
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 15:12 , Processed in 0.105337 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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