Darius_ 0 8 мая, 2020 Опубликовано 8 мая, 2020 · Жалоба Добрый день, дорогие Форумчане! Пришел к вам с вопросом касательно настройки каналов АЦП. У меня задание читать сразу с 3 каналов и, как понимаю, последовательно. Понимание, как настроить эти каналы у меня есть, но вот как читать их последовательно - с этим большие проблемы. Пытался через подпрограммы rcall, что б контроллер перескакивал между ними для чтения, но препод сказал, что бред полный и нужно как-то по другому. Или же загвостка в том, что у меня еще и счётчики стоят и они как влияют на все это. Надеюсь, кто-нибудь сможет подсказать. P.S. Код пишу на ассемблере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 8 мая, 2020 Опубликовано 8 мая, 2020 · Жалоба 18 minutes ago, Darius_ said: . . . У меня задание читать сразу с 3 каналов и, как понимаю, последовательно. . . . . Ваше "последовательно" противоречит "сразу". Если это, конечно, существенно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darius_ 0 8 мая, 2020 Опубликовано 8 мая, 2020 · Жалоба 16 минут назад, k155la3 сказал: Ваше "последовательно" противоречит "сразу". Если это, конечно, существенно. Вообще, нужно вроде как одновременно считывать с 3 каналов, но я столько облазил разных форумов по этому вопросу и везде написано, что если у ацп несколько каналов, то их можно читать только последовательно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 8 мая, 2020 Опубликовано 8 мая, 2020 · Жалоба 23 minutes ago, Darius_ said: Вообще, нужно вроде как одновременно считывать с 3 каналов, но я столько облазил разных форумов по этому вопросу и везде написано, что если у ацп несколько каналов, то их можно читать только последовательно. я поэтому и уточняю, насколько принципиально "сразу". В неспециализированных контроллерах один АЦП, одно УВХ и возможно только последовательно оцифровывать входные каналы, переключая АЦП на требуемый канал. Чтобы обеспечить "одновременность", используют на каждом входе УВХ, в вашем случае 3 шт., управляемые одним сигналом. Это аналоговая память для входной величины. Делаем одновременно 3 "фотографии", а затем последовательно-не торопясь, рассматриваем (АЦП). https://en.wikipedia.org/wiki/Sample_and_hold Эконом-решение, с недостатками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 8 мая, 2020 Опубликовано 8 мая, 2020 · Жалоба На AVR же? Читать документацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 1 8 мая, 2020 Опубликовано 8 мая, 2020 · Жалоба Настраиваем режим измерения в бесконечном цикле, и в прерывании по окончанию измерения переключаем каналы. Как это всё сделать есть в даташите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aldec 0 10 мая, 2020 Опубликовано 10 мая, 2020 · Жалоба Три АЦП не нужно переключать, только мультиплексор. Если шина AHB то за один такт можно загрузить в буфер сразу три ацп. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NStorm 0 10 мая, 2020 Опубликовано 10 мая, 2020 · Жалоба "Шина AHB"? Раздел про AVR. Промазали вы. ) Но мультиплексоры конечно же нужно переключать. Как это сделать уже написали. Но т.к. ТС студен - видимо как обычно надеется на готовое решение. ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба Как-то так запуск одного преобразования, вначале вызвать для 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); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться