Использование АЦП на Teensy 3.6 - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь перенести программу, созданную на Arduino Mega, на Teensy 3.6. Я использовал фрагмент кода, который нашел, чтобы сэмплировать аудиосигнал и затем выполнить быстрое преобразование Фурье по нему, но теперь, когда я его портирую, Teensy не принимает способ, которым они собирали аудиосэмплы на Arduino. Могу ли я использовать AnalogRead, чтобы получить тот же эффект? Как я могу перенести этот код для работы таким же образом? Что делает этот код, когда он говорит, что он «// очищает бит ADIF, чтобы АЦП мог выполнять следующую операцию (0xf5)», и мне нужно также перенести это? Спасибо

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 выдает мне ошибку:

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
               ^

1 Ответ

1 голос
/ 30 октября 2019

MCU Arduino Mega - это ATmega2560, в то время как Teensy 3.6 - это Arm Cortex M4.

ADCSRA и аналогичные сокращения обращаются к регистрам ATmega2560, которые даже не существуют на Arm Cortex M4. Это совершенно другая архитектура.

...