首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Teensy 3.6上使用ADC

在Teensy 3.6上使用ADC
EN

Stack Overflow用户
提问于 2019-10-30 10:57:29
回答 2查看 754关注 0票数 0

我正在尝试将我在Arduino Mega上创建的程序移植到Teensy 3.6上。我使用我找到的一段代码对音频信号进行采样,然后对其运行快速傅立叶变换,但现在我正在移植它,Teensy不接受他们在Arduino上收集音频样本的方式。我可以使用AnalogRead来达到同样的效果吗?我如何移植这段代码才能以同样的方式工作?当代码显示"//清除ADIF位,以便ADC可以执行下一操作(0xf5)“时,它在做什么?我是否也需要将其移植过来?谢谢

代码语言:javascript
复制
void setup() {

    ADCSRA = 0b11100110;      // set ADC to free running mode and set pre-scalar to 32 (0xe5)

    ADMUX = 0b00000000;       // use pin A0 and external voltage reference
}


void loop() {
   // ++ Sampling

   for(int i=0; i<SAMPLES; i++)
    {
      while(!(ADCSRA & 0x10));        // wait for ADC to complete current conversion ie ADIF bit set
      ADCSRA = 0b11110101 ;               // clear ADIF bit so that ADC can do next operation (0xf5)
      int value = ADC - 512 ;                 // Read from ADC and subtract DC offset caused value
      vReal[i]= value/4;                      // Copy to bins after compressing
      vImag[i] = 0;                         
    }
    // -- Sampling
}

这段代码在Arduino Mega上运行得很好,但Teensy给了我一个错误:

代码语言:javascript
复制
Teensy_Version: In function 'void setup()':
Teensy_Version:57: error: 'ADCSRA' was not declared in this scope
     ADCSRA = 0b11100110;      // set ADC to free running mode and set pre-scalar to 32 (0xe5)
 ^
Teensy_Version:59: error: 'ADMUX' was not declared in this scope
     ADMUX = 0b00000000;       // use pin A0 and external voltage reference
 ^
Teensy_Version: In function 'void loop()':
Teensy_Version:106: error: 'ADCSRA' was not declared in this scope
       while(!(ADCSRA & 0x10));        // wait for ADC to complete current conversion ie ADIF bit set
           ^
Teensy_Version:107: error: 'ADCSRA' was not declared in this scope
       ADCSRA = 0b11110101 ;               // clear ADIF bit so that ADC can do next operation (0xf5)
   ^
Teensy_Version:108: error: 'ADC' was not declared in this scope
       int value = ADC - 512 ;                 // Read from ADC and subtract DC offset caused value
               ^
EN

回答 2

Stack Overflow用户

发布于 2019-10-30 21:22:38

Arduino Mega的微处理器是ATmega2560,而Teensy 3.6的微处理器是Arm Cortex M4。

ADCSRA和类似缩写对Arm Cortex M4上甚至不存在的ATmega2560寄存器进行寻址。这是一个完全不同的架构。

票数 2
EN

Stack Overflow用户

发布于 2020-01-17 16:57:56

AnalogRead适用于简单的应用程序。如果您需要对模数转换器进行更多的控制,通常使用pevides ADC library。它不需要你下到寄存器级别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58618133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档