Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Атмега 88 АЦП и мутиплексор
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
ikm
Задача с двух выходов нужно снимать значения. Раньше с этим успешно справлялись 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
В чём проблема не понял. Не хватает выводов АЦП у меги88, поэтому добавляете мультиплексор?
ikm
Цитата(Den64 @ Oct 26 2016, 19:10) *
В чём проблема не понял. Не хватает выводов АЦП у меги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
Поставьте delay после изменения состояния вывода мк управляющего мультиплексором.
я так и не понял зачем Вам мультиплексор. Не хватает выводов АЦП у микроконтроллера?
ikm
Цитата(Den64 @ Oct 27 2016, 10:11) *
Поставьте delay после изменения состояния вывода мк управляющего мультиплексором.
я так и не понял зачем Вам мультиплексор. Не хватает выводов АЦП у микроконтроллера?


Не АЦП даже с излишком.
Просто я не вижу другой схемы если у меня два независимых датчика с которых надо считывать данные и всего один усилитель для них. Т.к. поставить второй усилитель дорого.
Так понятнее?
Александр1
Цитата(ikm @ Oct 27 2016, 10:16) *
Не АЦП даже с излишком.
...у меня два независимых датчика с которых надо считывать данные и всего один усилитель для них. Т.к. поставить второй усилитель дорого.

Если с датчика сигнал поступает на усилитель, то не будет ли слабый сигнал искажать/зашумлять мультиплексор, подключенный к датчику?
Может сделать по старой схеме: два дешевых усилителя, без коммутации, а всю обработку возложить на ПО? Раз уж стоимость важнее.
ikm
Цитата(Александр1 @ Oct 28 2016, 09:40) *
Если с датчика сигнал поступает на усилитель, то не будет ли слабый сигнал искажать/зашумлять мультиплексор, подключенный к датчику?
Может сделать по старой схеме: два дешевых усилителя, без коммутации, а всю обработку возложить на ПО? Раз уж стоимость важнее.


Да я думал об этом, но к сожалению в ДШ не указаны шумы (буду использовать DG419L http://www.vishay.com/docs/71763/dg417l.pdf). Поэтому я пока хочу устранить шумы от переключения программной задержкой. Но может и от них не надо будет ничего придумывать. Т.к. мне нужны среднее значение изменения напряжения, просто на очень большом диапазоне от десятых мВ до десятых В.
И раньше в коде приходилось писать таблицу для каждого под диапазона значений, как раз для обработки. Поэтому проще поставить логарифмический (при чем у меня два вида на макет куплено обычный и trueRMS) и уже смотреть что с ними будет получаться. Так что пички при переключениях могут исчезнуть при переходе в RMS.
moon333
Цитата(ikm @ Oct 28 2016, 11:43) *
Да я думал об этом, но к сожалению в ДШ не указаны шумы (буду использовать DG419L http://www.vishay.com/docs/71763/dg417l.pdf).S.

В ключах обратите внимание на следующий параметр Charge Injection.
По сути это можно описать как "впрыскивание" заряда во время коммутации, в вашем случае значение этого заряда достаточно мало, и если вам не важна частота сбора данных, то вы можете после коммутации скажем сделать 10 опросов АЦП и 5 из них откинуть.

Ещё многое может зависеть от выходного сопротивления датчика и длины кабеля до датчика.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.