Перейти к содержанию
    

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, Darius_ said:

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, k155la3 сказал:

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 minutes ago, Darius_ said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то так

 

запуск одного преобразования, вначале вызвать для 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);
}    

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...