新版简易示波器出炉了(2015-08-15 20:44:08)

新版简易示波器出炉了(2015-08-15 20:44:08)_第1张图片
界面

惯例先上图。

增加了分频功能和频率触发捕获功能。

以前一直以为示波器是不断的捕获数据显示,但是想不通的是如果信号频率极高的话,画面会移动动的飞快。

后来才明白,原来示波器只是捕获一定时间段的数据并进行计算,而不是不停的读数据。

这次终于把AVR单片机的ADC分频功能实现了,这样就能指定特定频率的分频了。就是界面上的X4,X8等按钮的功能。

不过奇怪的是2分频和128分频好像有问题,2分频无法获得正确的数据,而128分频的时间计算很不正确。

这里贴出ADC配置函数,使用的是ADC5脚:(代码中的pin不是脚的代号而是频率)

void AdcInit(int pin)

{

  ADCSRA = 0;

  ADMUX = 0;

  ADMUX = _BV(MUX0) | _BV(MUX2) | _BV(REFS0);

  switch(pin)

  {

    case 0: // 4

      ADCSRA = _BV(ADPS1);

      break;

    case 1: // 8

      ADCSRA = _BV(ADPS0) | _BV(ADPS1);

      break;

    case 2: // 16

      ADCSRA = _BV(ADPS2);

      break;

    case 3: // 32

      ADCSRA = _BV(ADPS2) | _BV(ADPS0);

      break;

    case 4: // 64

      ADCSRA = _BV(ADPS2) | _BV(ADPS1);

      break;

    case 5: // 128

      ADCSRA = _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);

      break;

  }

  ADCSRA |= _BV(ADEN);

}

开始我没有配置REFS0,导致不能正确的读数,另外数据是用阻塞的方式获得,没有使用ADC中断。现在简易示波器能用了,就差搞个信号发生器来试试了。

你可能感兴趣的:(新版简易示波器出炉了(2015-08-15 20:44:08))