Arduino数字示波器(二)

Arduino数字示波器(二)

一、背景

前面用Arduino结合processing制作了最简单的示波器。那个示波器实际还能完善和提升。

让Arduino离开电脑串口,自带屏幕制作成示波器,也就是稍实用且极简单能实际制作的,在网上搜索一下,至少能见到四、五种方案。这里选择的是很早期的一种方案,稍稍做了一点点改动。

这个方案在Arduino中国等网站上都有发布,署名仲敬、江苏吴汉清,但转载和修改过多,已难找出原作,不再列出链接地址。

二、元件列表

Arduino UNOX1,LCD12864(ST7920主控)X1,电位器X1,面包板、杜邦线等

三、接线图

这个接线图的原始版本,在ArduinoCN上,信号输入上有个100微法隔直电容器,这里去掉了。

另外在8、9、10号脚上有Hold、div调节,图中去掉了。LCD12864的3号脚可以通过另一电位器调节背光,一并去掉。

A0脚提前用电位器拉高电平,有点儿“钳位”的意思,如果去掉了,会因为输入信号与Arduino不共地,噪声和杂波的影响无法去除而不能测量。

这个电路,只能测正电压,若测负电压,可以接ADS115,12864就要把一些脚让出来。

四、代码

#include <U8glib.h> //U8glib库
U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); //SPI接线
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( ));

五、实测

测干电池两端稳恒电压:万用表测量1.18V,Arduino示波器5V分成8行,每行0.625V,测量结果一致。

测杂波信号,把A0前方的电位器VCC和GND断开:

(0)

相关推荐