как увеличить разрядность аналогового ввода на ARDUINO DUE

ffilin
Offline
Зарегистрирован: 19.10.2018

Обычные атмеговские ардуины  функцией analogRead возвпащает число от 0...до 1023 т.к там  стоит10бит АЦП

в ARDUINO DUE стоит 12 разрядное АЦП, а возвращает теже значения от 0...до 1023  , как увеличить разрядность?

kalapanga
Offline
Зарегистрирован: 23.10.2016

Говорят так analogReadResolution()

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Отказаться от IDE  и писать в Keil

mixail844
Offline
Зарегистрирован: 30.04.2012

mykaida пишет:

Отказаться от IDE  и писать в Keil

угу, только Keil это тоже IDE

ffilin
Offline
Зарегистрирован: 19.10.2018

kalapanga, спасибо. Ещё вопрос как увеличить скорость оцифровки? Задача такая по внешнему прерыванию заполнить массив данных, обработать в другой масив и вывести на индикатор. 

должна получится такая картинка.

Это нужно для импульсных металодетекторов. 

 

 

 

http://acdc.foxylab.com/node/47

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ffilin пишет:

kalapanga, спасибо. Ещё вопрос как увеличить скорость оцифровки? Задача такая по внешнему прерыванию заполнить массив данных, обработать в другой масив и вывести на индикатор. 

Насколько я понимаю, нужно вообще отказаться от прерываний, настроить ADC на срабатывание по внешнему сигналу, а DMA - по сигналу от ADC. И, собственно, прерывание использовать один раз - когда весь буфер DMA будет заполнен.

Если внешний сигнал - единственный импульс, а не на каждый отсчет, то настроить ADC на оцифровку по таймеру, а таймер настроить на нужную частоту дискретизации.

ffilin
Offline
Зарегистрирован: 19.10.2018

то есть чтобы увеличить частоту АЦП, нужно обработчик повесить на прерывание от таймера, частота которого равна частоте дискретизации?

Можно быстрее,  есть прерывание по завершению цикла работы АЦП?, чтобы реализовать максимально возможную частоту дискпетизации. как програмируется DMA ?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ffilin пишет:

то есть чтобы увеличить частоту АЦП, нужно обработчик повесить на прерывание от таймера, частота которого равна частоте дискретизации?

Нет.

Вход в прерывание - это дополнительное время, которое будет снижать максимальную частоту преобразования.

АЦП нужно настраивать непосредственно на срабатывание от внешнего сигнала (или таймера).

Собственно, мне кажется, Вы неправильно ставите вопрос. Нужно не "увеличивать частоту", а "добиваться максимальной частотоы, указанной в дэйташите". Кстати, может оказаться, что для достижения максимально возможной частоты оцифровки нужно будет снизить рабочую частоту процессорного ядра.

Цитата:

Можно быстрее,  есть прерывание по завершению цикла работы АЦП?, чтобы реализовать максимально возможную частоту дискпетизации. как програмируется DMA ?

Есть. Но оно Вам тоже не нужно: АЦП должен давать сигнал ПДП, чтобы тот забрал данные и занес их в массив. Участие процессора на этом этапе тоже не нужно. Имеет смысл инициировать прерывание только после того, как буфер будет либо полностью, либо наполовину (при непрерывном преобразовании) заполнен.