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

Атмега 88 АЦП и мутиплексор

Задача с двух выходов нужно снимать значения. Раньше с этим успешно справлялись 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" делать задержки, чтобы АЦП не считывал данные пока мультиплексор окончательно не переключится?

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


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

В чём проблема не понял. Не хватает выводов АЦП у меги88, поэтому добавляете мультиплексор?

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


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

В чём проблема не понял. Не хватает выводов АЦП у меги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; 
    }
;

 

Но мне кажется должна быть еще задержка чтобы АЦП не считывали пока ключ не переключился.

И не уверен, что можно включать эту команду внутри цикла.

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


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

Поставьте delay после изменения состояния вывода мк управляющего мультиплексором.

я так и не понял зачем Вам мультиплексор. Не хватает выводов АЦП у микроконтроллера?

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


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

Поставьте delay после изменения состояния вывода мк управляющего мультиплексором.

я так и не понял зачем Вам мультиплексор. Не хватает выводов АЦП у микроконтроллера?

 

Не АЦП даже с излишком.

Просто я не вижу другой схемы если у меня два независимых датчика с которых надо считывать данные и всего один усилитель для них. Т.к. поставить второй усилитель дорого.

Так понятнее?

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


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

Не АЦП даже с излишком.

...у меня два независимых датчика с которых надо считывать данные и всего один усилитель для них. Т.к. поставить второй усилитель дорого.

Если с датчика сигнал поступает на усилитель, то не будет ли слабый сигнал искажать/зашумлять мультиплексор, подключенный к датчику?

Может сделать по старой схеме: два дешевых усилителя, без коммутации, а всю обработку возложить на ПО? Раз уж стоимость важнее.

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


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

Если с датчика сигнал поступает на усилитель, то не будет ли слабый сигнал искажать/зашумлять мультиплексор, подключенный к датчику?

Может сделать по старой схеме: два дешевых усилителя, без коммутации, а всю обработку возложить на ПО? Раз уж стоимость важнее.

 

Да я думал об этом, но к сожалению в ДШ не указаны шумы (буду использовать DG419L http://www.vishay.com/docs/71763/dg417l.pdf). Поэтому я пока хочу устранить шумы от переключения программной задержкой. Но может и от них не надо будет ничего придумывать. Т.к. мне нужны среднее значение изменения напряжения, просто на очень большом диапазоне от десятых мВ до десятых В.

И раньше в коде приходилось писать таблицу для каждого под диапазона значений, как раз для обработки. Поэтому проще поставить логарифмический (при чем у меня два вида на макет куплено обычный и trueRMS) и уже смотреть что с ними будет получаться. Так что пички при переключениях могут исчезнуть при переходе в RMS.

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


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

Да я думал об этом, но к сожалению в ДШ не указаны шумы (буду использовать DG419L http://www.vishay.com/docs/71763/dg417l.pdf).S.

В ключах обратите внимание на следующий параметр Charge Injection.

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

 

Ещё многое может зависеть от выходного сопротивления датчика и длины кабеля до датчика.

Изменено пользователем moon333

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


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

Добрый день,

вопрос по питанию АЦП Aref от VCC разделены? от другого источника подаю опорное напряжение и подаю напряжение на вход ADC0? при это не закоротит с питанием VCC?

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


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

3 часа назад, Шнекоход сказал:

Добрый день,

вопрос по питанию АЦП Aref от VCC разделены?

Это управляется программно. Читайте внимательно описание битов REFS0, REFS0.

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


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

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

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

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

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

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

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

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

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

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