Jump to content

    

Настройка АЦП

Добрый день, дорогие Форумчане!

Пришел к вам с вопросом касательно настройки каналов АЦП. У меня задание читать сразу с 3 каналов и, как понимаю, последовательно. Понимание, как настроить эти каналы у меня есть, но вот как читать их последовательно - с этим большие проблемы. 

Пытался через подпрограммы rcall, что б контроллер перескакивал между ними для чтения, но препод сказал,  что бред полный и нужно как-то по другому. Или же загвостка в том, что у меня еще и счётчики стоят и они как влияют на все это. 

Надеюсь, кто-нибудь сможет подсказать.

P.S. Код пишу на ассемблере.

Share this post


Link to post
Share on other sites
18 minutes ago, Darius_ said:

. . . У меня задание читать сразу с 3 каналов и, как понимаю, последовательно. . . . .

Ваше "последовательно" противоречит "сразу". Если это, конечно, существенно.

 

Share this post


Link to post
Share on other sites
16 минут назад, k155la3 сказал:

Ваше "последовательно" противоречит "сразу". Если это, конечно, существенно.

 

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

Share this post


Link to post
Share on other sites
23 minutes ago, Darius_ said:

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

я поэтому и уточняю, насколько принципиально "сразу". В неспециализированных контроллерах один АЦП, одно УВХ и возможно только последовательно оцифровывать входные каналы, переключая АЦП на требуемый канал. Чтобы обеспечить "одновременность", используют на каждом входе УВХ, в вашем случае 3 шт., управляемые одним сигналом. Это аналоговая память для входной величины. Делаем одновременно 3 "фотографии", а затем последовательно-не торопясь, рассматриваем (АЦП). https://en.wikipedia.org/wiki/Sample_and_hold  Эконом-решение, с недостатками.

Share this post


Link to post
Share on other sites

На AVR же? Читать документацию.

Share this post


Link to post
Share on other sites

Настраиваем режим измерения в бесконечном цикле, и в прерывании по окончанию измерения переключаем каналы. Как это всё сделать есть в даташите.

Share this post


Link to post
Share on other sites

Три АЦП не нужно переключать, только мультиплексор.
Если шина AHB то за один такт можно загрузить в буфер сразу три ацп.

Share this post


Link to post
Share on other sites

"Шина AHB"? Раздел про AVR. Промазали вы. )

Но мультиплексоры конечно же нужно переключать. Как это сделать уже написали. Но т.к. ТС студен - видимо как обычно надеется на готовое решение. )

 

Share this post


Link to post
Share on other sites

Как-то так

 

запуск одного преобразования, вначале вызвать для 1-го канала  start_ADC(0);
start_ADC(int channel)
{
  ADMUX = channel&0x07;
  ADCSR|=ADEN|ADSC|ADIE;
}


функция обработки прерывания АЦП
void ih_ADC()
{
 BYTE channel_ADC=reg_ADMUX&0x7;
 uniWORD value;

 value.B.L      = ADCL; // обязательно первым
 value.B.H      = ADCH;
 ValuesADC[channel_ADC]= value.W;
 channel_ADC++;
 if(channel_ADC>=3) channel_ADC=0;
 start_ADC(channel_ADC);
}    

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now