ikm 0 26 октября, 2016 Опубликовано 26 октября, 2016 · Жалоба Задача с двух выходов нужно снимать значения. Раньше с этим успешно справлялись 2 канала АЦП на Атмеге 88. Сейчас на эти выходы нужно поставить более дорогие усилители. И чтобы сэкономить я хочу поставить один на два канала и перед ним простенький мультиплексор на 2 канала. Код был вот такой: $this_var = while (adc_accum_cnt < ADC_ACCUM_TIME) { ADC_ch1_temp = Get_ADC(ADC_CH1); if (ADC_ch1_temp > ADC_ch1_max) ADC_ch1_max = ADC_ch1_temp; if (ADC_ch1_temp < ADC_ch1_min) ADC_ch1_min = ADC_ch1_temp; ADC_ch2_temp = Get_ADC(ADC_CH2); if (ADC_ch2_temp > ADC_ch2_max) ADC_ch2_max = ADC_ch2_temp; if (ADC_ch2_temp < ADC_ch2_min) ADC_ch2_min = ADC_ch2_temp; }; Теперь мне для того чтобы перещёлкивать мультиплексором, как я понимаю, нужно поставить в код между каналами АЦП команду, которая будет дергать ножкой "0" и"1". А входы АЦП обоих каналов просто соединить. Для этого не придется переписывать остальной код. Соответственно, когда я получу значения для ch1 я перешелкну и буду считывать значения для канала ch2. Или второй вариант (более логичный с точки зрения кода): я использую один канал АЦП, и просто в коде определю переменную ADC_ch2_temp = Get_ADC(ADC_CH1). Но главный вопрос как вывести наружу этот внешний такт, с учётом, что необходимо скорее всего после перехода на этой ноге с "0" на "1" делать задержки, чтобы АЦП не считывал данные пока мультиплексор окончательно не переключится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Den64 0 26 октября, 2016 Опубликовано 26 октября, 2016 · Жалоба В чём проблема не понял. Не хватает выводов АЦП у меги88, поэтому добавляете мультиплексор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ikm 0 27 октября, 2016 Опубликовано 27 октября, 2016 · Жалоба В чём проблема не понял. Не хватает выводов АЦП у меги88, поэтому добавляете мультиплексор? Как бы вам так ответить, чтобы понятно было? Ну попробую: В самом начале поста я написал, что хочу с экономить на одном из усилителей. Т.к. раньше на каждый канал АЦП стояли lm358 по 15р штука, а теперь логарифмический по 1т.р. А проблема в том, что надо написать типа $this_var = mult_state_on (); // перевод ножки управления мультиплексором в "1" ... { ADC_ch1_temp = Get_ADC(ADC_CH1); //считывание АЦП первого канала if (ADC_ch1_temp > ADC_ch1_max) ADC_ch1_max = ADC_ch1_temp; if (ADC_ch1_temp < ADC_ch1_min) ADC_ch1_min = ADC_ch1_temp; mult_state_off (); // перевод ножки управления мультиплексором в "0" ADC_ch2_temp = Get_ADC(ADC_CH2); //считывание АЦП второго канала if (ADC_ch2_temp > ADC_ch2_max) ADC_ch2_max = ADC_ch2_temp; if (ADC_ch2_temp < ADC_ch2_min) ADC_ch2_min = ADC_ch2_temp; } ; Но мне кажется должна быть еще задержка чтобы АЦП не считывали пока ключ не переключился. И не уверен, что можно включать эту команду внутри цикла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Den64 0 27 октября, 2016 Опубликовано 27 октября, 2016 · Жалоба Поставьте delay после изменения состояния вывода мк управляющего мультиплексором. я так и не понял зачем Вам мультиплексор. Не хватает выводов АЦП у микроконтроллера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ikm 0 27 октября, 2016 Опубликовано 27 октября, 2016 · Жалоба Поставьте delay после изменения состояния вывода мк управляющего мультиплексором. я так и не понял зачем Вам мультиплексор. Не хватает выводов АЦП у микроконтроллера? Не АЦП даже с излишком. Просто я не вижу другой схемы если у меня два независимых датчика с которых надо считывать данные и всего один усилитель для них. Т.к. поставить второй усилитель дорого. Так понятнее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
АлександрК 0 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба Не АЦП даже с излишком. ...у меня два независимых датчика с которых надо считывать данные и всего один усилитель для них. Т.к. поставить второй усилитель дорого. Если с датчика сигнал поступает на усилитель, то не будет ли слабый сигнал искажать/зашумлять мультиплексор, подключенный к датчику? Может сделать по старой схеме: два дешевых усилителя, без коммутации, а всю обработку возложить на ПО? Раз уж стоимость важнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ikm 0 28 октября, 2016 Опубликовано 28 октября, 2016 · Жалоба Если с датчика сигнал поступает на усилитель, то не будет ли слабый сигнал искажать/зашумлять мультиплексор, подключенный к датчику? Может сделать по старой схеме: два дешевых усилителя, без коммутации, а всю обработку возложить на ПО? Раз уж стоимость важнее. Да я думал об этом, но к сожалению в ДШ не указаны шумы (буду использовать DG419L http://www.vishay.com/docs/71763/dg417l.pdf). Поэтому я пока хочу устранить шумы от переключения программной задержкой. Но может и от них не надо будет ничего придумывать. Т.к. мне нужны среднее значение изменения напряжения, просто на очень большом диапазоне от десятых мВ до десятых В. И раньше в коде приходилось писать таблицу для каждого под диапазона значений, как раз для обработки. Поэтому проще поставить логарифмический (при чем у меня два вида на макет куплено обычный и trueRMS) и уже смотреть что с ними будет получаться. Так что пички при переключениях могут исчезнуть при переходе в RMS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
moon333 0 10 ноября, 2016 Опубликовано 10 ноября, 2016 (изменено) · Жалоба Да я думал об этом, но к сожалению в ДШ не указаны шумы (буду использовать DG419L http://www.vishay.com/docs/71763/dg417l.pdf).S. В ключах обратите внимание на следующий параметр Charge Injection. По сути это можно описать как "впрыскивание" заряда во время коммутации, в вашем случае значение этого заряда достаточно мало, и если вам не важна частота сбора данных, то вы можете после коммутации скажем сделать 10 опросов АЦП и 5 из них откинуть. Ещё многое может зависеть от выходного сопротивления датчика и длины кабеля до датчика. Изменено 10 ноября, 2016 пользователем moon333 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Шнекоход 0 28 января, 2019 Опубликовано 28 января, 2019 · Жалоба Добрый день, вопрос по питанию АЦП Aref от VCC разделены? от другого источника подаю опорное напряжение и подаю напряжение на вход ADC0? при это не закоротит с питанием VCC? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 28 января, 2019 Опубликовано 28 января, 2019 · Жалоба 3 часа назад, Шнекоход сказал: Добрый день, вопрос по питанию АЦП Aref от VCC разделены? Это управляется программно. Читайте внимательно описание битов REFS0, REFS0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться