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

界面

惯例先上图。

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

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

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

这次终于把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中断。现在简易示波器能用了,就差搞个信号发生器来试试了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,828评论 19 139
  • 1 综述 1.1 时钟源 在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL。 HSI...
    hackvilin阅读 8,972评论 0 6
  • 也许生命就是不断失去的旅程,同样的事情发生多了,肯定就是自己的原因。 人生还是要学会控制和管理自己的情感。
    青澜阅读 2,463评论 0 1
  • 昨晚女儿睡起来后裹着被子就跑到我房间,我提醒她穿上裤子再来跟我和儿子聊无,她依旧坐在我的床上迟迟不肯,这...
    利利lili阅读 2,755评论 0 7
  • 今天周五,周四的晚上听说一个好朋友周末要回家,四五年没见,最近电话一直聊的很嗨,我也想着好久没回家了,当既在...
    水天双月阅读 1,873评论 0 2

友情链接更多精彩内容