freebits

Atmega16 - значения с АЦП "пляшут"

32 posts in this topic

freebits    1

Добрый день.

Реализовал получение и обработку аналогового сигнала как в данной статье -> ссылка. Т.е. используется внутреннее опорное напряжение 2,56 Вольта, прием через прерывания, а на дисплее выводится числовое значение напряжения, которое присутствует на входе АЦП - нога ADC6.

В обработчике прерывания считываются значения из регистров ADCL и ADCH, из которых формируется значение переменной adc_value. В теле программы данное значение АЦП преобразуется в значение напряжения, посредством деления adc_value на 400. Затем полученный результат выводится на дисплей.

Проблема в том, что выводимое значение не стабильно и скачет в диапазоне +/- 300 мВ. Т.е. если к аналоговому входу приложено напряжение 1,4 вольта, то на дисплее значения будут хаотично меняться в диапазоне от 1,1 Вольт до 1,7 вольт, т.е. весьма ощутимый разброс в сотни милливольт. При этом если смотреть сигнал на входе осциллографом, то по факту нет такой картины - максимальный разброс (Vpp) составляет несколько десятков милливольт, но никак не сотен. Даже если этот вход посадить на землю, все равно на дисплее будут хаотичные значения доходящие до 0.4 вольта. Откуда он берет такие цифры на понятно.

Подскажите, в чем может быть проблема и как получить стабильные показания, хотя бы до сотен милливольт?

unsigned int adc_value;

char high_adc=0, low_adc=0;

ISR(ADC_vect) //обработчик прерывания ADC_vect
{
	low_adc = ADCL;
	high_adc = ADCH; //Верхняя часть регистра ADC должна быть считана последней иначе не продолжится преобразование
	adc_value = high_adc * 256 + low_adc; //значение АЦП
}

void ADC_Init(void) //инициализация АЦП
{
	ADCSRA |= (1<<ADEN) // Разрешение использования АЦП
		|(1<<ADSC)	//Запуск преобразования
		|(1<<ADATE)	//Непрерывный режим работы АЦП
		|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)//Делитель 128 = 64 кГц
		|(1<<ADIE);	//Разрешение прерывания от АЦП

	ADMUX |= 0b11000110; //Внутренний Источник ОН 2,56В вход ADC6
}

void main(void)
{
	float n = 0;
	while(1)
	{		

		n = (float) adc_value / 400; // преобразование значения АЦП в напряжение

		/*
			Отправка на дисплей
		*/

		_delay_ms(2);
		
	}
}

 

Share this post


Link to post
Share on other sites
Alex    590

Попробуйте частоту семплирования уменьшить. Я плохо знаком с АВРами, но сдаётся мне, что 64 КГц - это весьма немаленькая частота для подобных камушков.

А так, посоветую сделать усреднение за n-ное количество семплов.

Share this post


Link to post
Share on other sites
_abk_    161
32 минуты назад, freebits сказал:

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

Короткие помехи, которые вы не видите осциллографом (на питании, в измеряемом источнике), отсутствие конденсатора на Vref, плохое AVcc.  

Убрать помеху,  применить усреднение. Батарейку попробуйте мерять, другой источник питания, Li, например. Попробуйте свой код в Протеусе. Если дело в коде, вылезет и там. 

Частота 64кГц - нормальная. Upd.  Заодно проверьте, не требует ли использованный  вами пример деления CLK на 8 (фьюз CLKDIV)? 

Edited by _abk_

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Создание беспроводных устройств на системах-на-кристалле семейства SimpleLink компании TI»

Компания Компэл, совместно с Texas Instruments приглашают 26 июня принять участие в вебинаре, где инженер по применению беспроводных технологий компании TI расскажет, как на новых беспроводных системах можно реализовать несколько полезнейших в повседневной жизни функций для ваших устройств. С развитием элементной базы TI становится возможной реализация более удобных, функциональных и безопасных систем, недоступных ранее. Вебинар проводит инженер по применению беспроводных технологий в TI Мари Хернес(будет дублированный перевод).

Подробнее...

freebits    1
20 минут назад, Alex сказал:

А так, посоветую сделать усреднение за n-ное количество семплов.

Ок, спасибо, попробую внедрить усреднение.

13 минуты назад, _abk_ сказал:

Короткие помехи, которые вы не видите осциллографом (на питании, в измеряемом источнике), отсутствие конденсатора на Vref, плохое AVcc.  

Убрать помеху,  применить усреднение. Батарейку попробуйте мерять, другой источник питания, Li, например. Попробуйте свой код в Протеусе. Если дело в коде, вылезет и там. 

Частота 64кГц - нормальная.

Спасибо, попробую поставить конденсатор 0,1 мкФ на Vref.

Вот с проверкой кода в Протеусе именно для данного случая есть загвоздка - в Протеусе отсутствует тот цифровой индикатор, который я использую - 10-пиновый трехразрядный led-индикатор. У него индикация реализована не как у стандартного нидикатора поразрядно, а посегментно, т.е. в единицу времени можно зажечь только 1 сегмент, и соответственно отрисовка цифр идет совершенно по другому. Т.е. я не смогу никак увидеть какие именно показания измеряет АЦП.

Share this post


Link to post
Share on other sites
_abk_    161

Усреднение надо вводить в последнюю очередь, когда будет устранен такой разброс. 

0,1 мкФ на Vref обязан быть при использовании внутренней "опоры". Не забудьте про AVCC.

Для проверки в Протеусе не нужен индикатор: сделайте вывод в терминал (через UART).

 

 

Share this post


Link to post
Share on other sites

Видео вебинара «Уникальный подход MORNSUN к разработке DC/DC-преобразователей. Что на выходе?»

На сайте КОМПЭЛ доступны материалы вебинара, посвященные последнему поколению DC/DC преобразователей с фиксированным входом R3 от MORNSUN. Вы можете посмотреть видеозапись, ознакомиться с презентацией и ответами на вопросы.

Подробнее...

_abk_    161
37 минут назад, freebits сказал:

10-пиновый трехразрядный led-индикатор.... в единицу времени можно зажечь только 1 сегмент

Очень интересно. Что это за индикатор? Наименование его?

Share this post


Link to post
Share on other sites
freebits    1
27 минут назад, _abk_ сказал:

Усреднение надо вводить в последнюю очередь, когда будет устранен такой разброс. 

0,1 мкФ на Vref обязан быть при использовании внутренней "опоры". Не забудьте про AVCC.

Для проверки в Протеусе не нужен индикатор: сделайте вывод в терминал (через UART).

 

 

Ок, понял, спасибо. AVCC у меня подключено к выводу VCC, а VCC запитывается от стабилизированного источника питания (БП от принтера). Проверю осциллографом форму напряжения, но думаю что там напряжение должно быть без скачков. Про  UART погляжу сейчас.

10 минут назад, _abk_ сказал:

Очень интересно. Что это за индикатор? Наименование его?

Наименование отсутствует. Он от китайского цифрового вольтметра, заказывал через алиэекспресс, т.к. они уже были с внешней оправкой и цена не сильно большая.

Электрическую схему зарисовал, даже пытался выводить что-то в протеусе.

LED.thumb.png.72ecd979dc1d97a606446bd1a3fb79f3.png

Таблицу истинности тоже зарисовал. Когда заказывал, думал что будут стандартные, но пришло то что пришло

1.png.6604f09a90d9627021e3f6100f5244ad.png

 

 

Share this post


Link to post
Share on other sites
_abk_    161
26 минут назад, freebits сказал:

AVCC у меня подключено к выводу VCC

Не пойдет :)  

AVCC надо подключить к выводу VCC через LC фильтр (0,1 мкФ, 10...47 мкГн). А лучше не к VCC, а к точке подачи VCC на плату отдельным проводком, чтобы исключить влияние неправильной разводки.  Через LC фильтр, конечно. Фильтр - непосредственно у вывода.

Про индикатор понятно.

Моделька-то работает?

Share this post


Link to post
Share on other sites
freebits    1
51 минуту назад, _abk_ сказал:

AVCC надо подключить к выводу VCC через LC фильтр (0,1 мкФ, 10...47 мкГн). А лучше не к VCC, а к точке подачи VCC на плату отдельным проводком, чтобы исключить влияние неправильной разводки.  Через LC фильтр, конечно. Фильтр - непосредственно у вывода.

Ммм, про данные тонкости я был вообще не вкурсе. Спасибо!  Тогда вначале переделаю аналоговое питание и добавлю фильтры!

 

51 минуту назад, _abk_ сказал:

Моделька-то работает?

Вы имеете в виду схему в протеусе выше? Если да, то да - она работает, но только на замедленной скорости можно что-то увидеть.  На той скорости, на которой сейчас работает отрисовка реального дисплея, в протеусе совершенно другой эффект, и лишь видно как иногда, почти в хаотичном порядке зажигаются светодиоды. Я использовал эту модель для отладки отрисовки.

Edited by freebits

Share this post


Link to post
Share on other sites
kotwlf    11
6 часов назад, freebits сказал:

n = (float) adc_value / 400; // преобразование значения АЦП в напряжение

Я бы сделал эту операцию атомарной, т.к. она выполняется не за один такт и в процесс деления может вклинится прерывание, которое изменит переменную adc_value (тут можно посмотреть ассемблерный листинг):

#asm("cli");

n = (float) adc_value / 400;

#asm("sei");

Share this post


Link to post
Share on other sites
_abk_    161
4 минуты назад, kotwlf сказал:

Я бы сделал эту операцию атомарной

и без float :D

Share this post


Link to post
Share on other sites
freebits    1
14 часа назад, proekt07 сказал:

Питание для АЦП.

 

Снимок.JPG

Спасибо! Оказывается про это есть в даташите. Надо даташит внимательнее изучить.

 

16 часов назад, kotwlf сказал:

Я бы сделал эту операцию атомарной, т.к. она выполняется не за один такт и в процесс деления может вклинится прерывание, которое изменит переменную adc_value (тут можно посмотреть ассемблерный листинг):

#asm("cli");

n = (float) adc_value / 400;

#asm("sei");

Ясно, спасибо! Действительно в программе еще обрабатывается  прерывание переполнения таймера , поэтому запросто оно может вклиниться, учту и этот момент.

Как появится время, реализую все переделки, потом отпишусь о результатах.

Edited by freebits

Share this post


Link to post
Share on other sites
Starichok    1422

переменную adc_value может изменить только прерывание от АЦП. и никакое другое прерывание эту переменную изменить не может.

это же сколько должен длится процесс деления, чтобы опоздать к следующему прерыванию от АЦП?

а ведь, кроме деления, МК должен еще успеть сделать кучу другой работы до наступления следующего прерывания от АЦП, в том чисде и вывести результат измерения на индикатор.

Share this post


Link to post
Share on other sites
ARV    761
В 1/22/2019 в 06:02, freebits сказал:

ISR(ADC_vect) //обработчик прерывания ADC_vect { 
	low_adc = ADCL; 
	high_adc = ADCH; //Верхняя часть регистра ADC должна быть считана последней иначе не продолжится преобразование 
	adc_value = high_adc * 256 + low_adc; //значение АЦП 
}

 

Почему сразу не написать adc_value = ADC; - пользуйтесь тем, что вам уже предоставляет компилятор, а именно доступ к двум 8-битным регистрам АЦП (кстати, и счетчикам таймеров тоже) как к одной 16-битной переменной.

Поскольку АЦП всегда дает шум в младшем бите результата, да и всякие уже описаные проблемы с землями и т.п. "помехами" имеют место быть, всегда следует фильтровать результаты замеров. Минимально - усреднять по нескольким замерам, лучше - делать фильтр "скользящее среднее", совсем хорошо - полноценный фильтр третьего порядка или выше.

Лично я чаще всего применяю фильтрацию скользящим средним, как самым простым и понятным вариантом:

// глубина буфера усреднения. чем больше, тем сильнее фильтрация и медленнее работа
// очень хорошо, если число кратно степени двойки (т.е. 4, 8, 16, 32, 64 и т.д.)
#define AVERAGE_DEPTH	16
  
// функция получает результат очередного замера и возвращает отфильтрованное значение
uint16_t get_average(uint16_t val){
  static uint16_t buf[AVERAGE_DEPTH];
  static uint8_t cur;
  uint16_t sum = 0;
  
  buf[cur++] = val;
  if(cur >= AVERAGE_DEPTH) cur = 0;
  
  for(uint8_t i=0; i < AVERAGE_DEPTH; i++) sum += buf[i];
  
  return sum / AVERAGE_DEPTH;
}

В вашем случае вы должны выдавать на дисплей не adc_value, а get_average(adc_value).

4 часа назад, freebits сказал:

переполнения таймера , поэтому запросто оно может вклиниться

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

Только что, Starichok сказал:

это же сколько должен длится процесс деления, чтобы опоздать к следующему прерыванию от АЦП?

А вывод на дисплей? Тут не время деления важно, а независимость изменения переменной и её считывания.

Поскольку модификация переменной делается в прерывании, т.е. асинхронно по отношению к главному циклу, даже небольшая рассинхронизация рано или поздно приведет к тому, что прерывание возникнет в аккурат "между" обработкой двух байт этой переменной :) Во всяком случае, теоретически такое возможно.

Edited by ARV

Share this post


Link to post
Share on other sites
Starichok    1422
2 часа назад, ARV сказал:

А вывод на дисплей?

а прочитать мой пост до конца ты не сумел?

3 часа назад, Starichok сказал:

а ведь, кроме деления, МК должен еще успеть сделать кучу другой работы до наступления следующего прерывания от АЦП, в том чисде и вывести результат измерения на индикатор.

 

Share this post


Link to post
Share on other sites
kotwlf    11
4 часа назад, Starichok сказал:

это же сколько должен длится процесс деления, чтобы опоздать к следующему прерыванию от АЦП?

У него непрерывный режим работы АЦП, так что запросто.

К тому же не приведен ассемблерный листинг операции деления - кто знает как там его компилятор делает? И параметры оптимизации кода тоже неизвестны.

Share this post


Link to post
Share on other sites
_abk_    161
В 1/22/2019 в 10:02, freebits сказал:

выводимое значение не стабильно и скачет в диапазоне +/- 300 мВ. Т.е. если к аналоговому входу приложено напряжение 1,4 вольта, то на дисплее значения будут хаотично меняться в диапазоне от 1,1 Вольт до 1,7 вольт, т.е. весьма ощутимый разброс в сотни милливольт.

Такое поведение говорит скорее об аппаратных проблемах, чем о программных. Если бы портились байты из-за прерываний и пр., получили бы разброс на всю шкалу. Ну смотрите:  1)AVCC никак не фильтровано и прямо

В 1/22/2019 в 11:44, freebits сказал:

подключено к выводу VCC, а VCC запитывается от стабилизированного источника питания (БП от принтера).

 2) на Vref нет положенного при внутренней опоре конденсатора, 3) есть подозрение, что  неправильная разводка вкупе с динамической индикацией усугубляет дело, 4) что это за источник 1,4 В пытается  измерять ТС, на котором

В 1/22/2019 в 10:02, freebits сказал:

При этом если смотреть сигнал на входе осциллографом, то по факту нет такой картины - максимальный разброс (Vpp) составляет несколько десятков милливольт, но никак не сотен.

Если там такой разброс имеется, то чего еще ждать? Не факт, что еще и "иголок" там нет. Но это еще не все.

Об аппаратных проблемах говорит и то, что

В 1/22/2019 в 10:02, freebits сказал:

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

По-моему, так все понятно. Да еще и "посадить на землю" надо грамотно. 

Share this post


Link to post
Share on other sites
Starichok    1422
3 часа назад, kotwlf сказал:

У него непрерывный режим работы АЦП, так что запросто.

К тому же не приведен ассемблерный листинг операции деления - кто знает как там его компилятор делает? И параметры оптимизации кода тоже неизвестны.

ну, если задан непрерывный режим, то точно не успеет поделить к следующему прерыванию.

и никакая оптимизация не спасет, так как код на Си работает в несколько раз медленнее кода, написанного на ассемблере.

нужно отказаться от непрерывного режима преобразования. и преобразовывать один раз в цикле, когда вся другая работа будет сделана.

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

Share this post


Link to post
Share on other sites
freebits    1

Давайте внесу ясность, чтобы предметно говорить и не гадать на кофейной гуще, что есть по факту  и для чего все.

В общем, я конструирую паяльную станцию. На данный момент все подключено в точности по схеме ниже (только что зарисовал) и все работает прекрасно, кроме, конечно же, регистрации температуры. Даже интерфейсная оболочка уже написана (выбор одного из 5-ти термопрофилей: два готовых (бессвинцовый и свинцовосодержащий припой) и три ручных). На данном этапе произвожу наладку регистрации температуры. Имеется датчик температуры  до 500°С - позистор, у которого сопротивление меняется от 0 до 60 Ом (при комнатной температуре 10 Ом). Предусилительный каскад отлажен и испытан при помощи на 100-омного переменного резистора вместо датчика температуры. На выходе каскада, как и задумано, напряжение меняется от 0 до 2,6 Вольт при изменении сопротивления от 0 до 60 Ом. Есть калибровка через подстроечный резистор. Осталось теперь оцифровать значение на аналоговом входе для дальнейшей обработки.  Порт С пока не задействован, т.к. на данном контроллере находится в неисправном состоянии. После замены микросхемы, порт С планируется задействовать на управление 5-ью секциями нагревателей (каждая секция - это два 1 кВт-ных нагревателя, подключенных последовательно; итого 10 нагревателей общей мощностью 2,5 кВт). Секции можно отключать/включать в зависимости от заданных настроек. Плюс также порт С будет задействован на индикацию 3-х светодиодов. Итого свободным будет только 1 пин PA7 (DCA7), который возможно тоже будет задействован в качестве обратной связи с драйверов нагревателей. 

5c492adb18d92_.thumb.png.a634b64297bf7f28d8cf40fb37f4789c.png

Как мне подсказали выше, предстоит переделать аналоговое питание, ввести фильтры, в т.ч. опорного напряжения, аналогового питания и, я так думаю, еще аналогового сигнала.

12 часа назад, Starichok сказал:

нужно отказаться от непрерывного режима преобразования. и преобразовывать один раз в цикле, когда вся другая работа будет сделана.

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

Скорее всего так и сделаю - буду производить измерение по таймеру.

13 часа назад, _abk_ сказал:

По-моему, так все понятно. Да еще и "посадить на землю" надо грамотно. 

По поводу "посадки на землю" я погорячился)) я имел в виду, что на выходе предусилительного каскада присутствовал 0, это конечно не одно и тоже. Но осциллографом отчетливо было видно, что там нет шума амплитудой 0,4 Вольта.

В выходные реализую переделки по питанию, и фильтры. До выходных переделаю постоянное измерение на измерение по таймеру.

Share this post


Link to post
Share on other sites
freebits    1
В 23.01.2019 в 13:27, ARV сказал:

Лично я чаще всего применяю фильтрацию скользящим средним, как самым простым и понятным вариантом:


// глубина буфера усреднения. чем больше, тем сильнее фильтрация и медленнее работа
// очень хорошо, если число кратно степени двойки (т.е. 4, 8, 16, 32, 64 и т.д.)
#define AVERAGE_DEPTH	16
  
// функция получает результат очередного замера и возвращает отфильтрованное значение
uint16_t get_average(uint16_t val){
  static uint16_t buf[AVERAGE_DEPTH];
  static uint8_t cur;
  uint16_t sum = 0;
  
  buf[cur++] = val;
  if(cur >= AVERAGE_DEPTH) cur = 0;
  
  for(uint8_t i=0; i < AVERAGE_DEPTH; i++) sum += buf[i];
  
  return sum / AVERAGE_DEPTH;
}

В вашем случае вы должны выдавать на дисплей не adc_value, а get_average(adc_value).

Спасибо за код! Подскажите здесь при каждом вызове функции массив buf будет переинициализироваться или как раз конструкция static защищает от этого?

Share this post


Link to post
Share on other sites
ARV    761
Только что, freebits сказал:

Подскажите здесь при каждом вызове функции массив buf будет переинициализироваться или как раз конструкция static защищает от этого?

Все static-переменные инициализируются один раз, потом сохраняют свое состояние.

Share this post


Link to post
Share on other sites
freebits    1
1 минуту назад, ARV сказал:

Все static-переменные инициализируются один раз, потом сохраняют свое состояние.

Понял, спасибо.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Similar Content

    • By pryanic
      Доброго времени суток. Понадобилось разобраться с АЦП.  Основной материал использовал Евстифеева (микроконтроллеры семейства мега) и учебный курс Di-Halt.
      На первый раз задача простая - обработать напряжение с переменного резистора и послать по UART в терминал. С терминалом уже кое-что делал, так что тут вряд ли косяк есть.
      Кратко опишу программу: каждую секунду в обработчике прерывания таймера (не совсем точно, прерывание по переполнению Т0) запускаю преобразование АЦП установкой в 1 бита ADSC. 
      В обработчике прерывания АЦП читаю байт ADCH (выравнивание по левому краю ADLAR=1) и шлю по уарт. Но в терминал приходят одни FF независимо от положения движка потенциометра (подключен к PC1 средним контактом, крайними на землю и AVCC)
       
       
      ADC_test.zip
    • By dav1977
      Кто-нибудь запускал скоростные  АЦП  AD7606(последовательного приближения)
       в последовательном режиме считывания данных ?,
      из 4 шт одна заработала, остальные на выводе последовательного вывода DOUT ничего не выдают постоянно 0.
      пробовал переключаться с внутренним опорным источником(выдает 2.49), и с внешним без разницы.
      Может у них есть какая то очередность включения?
       

    • By dommax
      Распродаю остатки радиодеталей.
      Для удобного поиска написал WEB страничку http://detali.syremo.com.ua/
      Количество может не совпадать. Пишите - отвечу. Договоримся...
      Отправляю только по Украине. Перед отправкой смогу сделать фото.
    • By maxssau
      День добрый!
      Сегодня хотелось бы раcсказать о своей разработке - АЦП AD-01 на преобразователе от Cirrus Logic CS5381.
      Целью данной разработки было получение близких к даташитным параметрам характеристики АЦП, при этом плату имеющeю не высокую стоимость и универсальность.
      На данный момент это уже третья версия платы. Первая версия была сделана ЛУТом, для отработки схемотехники АЦП. Далее последовала вторая версия на заводских платах:

      Схемотехника была взята полностью из даташитов. Стандартное включение CS5381, стабилизаторы питания в цифровой части AMS1117-3.3, в аналоговой из серии TPS7A.
      Схемотехника входного буфера взята из даташита на OPA1632.
      После опробования данной платы, были выявлены некоторые недочеты и разработана третья версия версия:

       
      Входной буфер сделан для 2х вариантов: с конденсатором и без, для чего на ПП предусмотрены соответствующие площадки.

      Топология такого буфера позволяет без переделок проводить замеры/запись как балансного сигнала так и не балансного, достаточно вывод 3 посадить на землю (2). Это достаточно удобно, для различных типов сигнала достаточно иметь 2 пары кабелей с различной распайкой.
      Питание аналоговой части сделано на малошумящих стабилизатора TPS7A4901 и TPS7A3001.

      Питание цифровой части на 2х AMS1117-3.3В, схему нет смысла приводить, она из даташита на стабилизаторы.
      На плате всего 1 генератор на 512fs (24.576 Мгц). Такая частота выбрана не случайно, для работы SPDIF передатчика необходимо иметь частоту мастерклока не ниже 256fs для работы на частоте 96к, я использую передатчик на WM8805 (о этой плате чуть ниже). В качестве интерфейса на компьютере я использую ЗК E-MU 0404 PCIe.
      Полная схема преобразователя:

      На плате присутствует место под DIP переключатель, для настройки режимов работы АЦП. Выход АЦП - I2S, уровни 3.3В.
      Для соединения с компьютером была разработана плата SPDIF интерфейса SI-01.

      Схему приводить особого смысла нет, она повторяет даташитную для WM8805 включенным в HW режиме. В этом режиме есть определенные ограничения, связанные с работой PLL, поэтому максимальная частота приёма/передачи ограничена в 96к. WM8805 позволяет работать как в Master режиме, так и в Slave, что очень удобно. Выбор режима осуществляется установкой джампера. Так же на плате присутствуют джамперы выбора питания, от ЦАП или АЦП. В качестве выходного буфера для передатчика используется 1G125.
       
      Шумовая полка:

      В качестве источника питания пара трансформаторов с стабилизаторами 317/337, даже имея ёмкости в 10000 мкФ полностью подавть 50Гц и гармоники пока не удалось, возможно проблема в корпусе и компоновке.
      Замер моего ЦАПа на 4490, к сожалению не обошлось без земляных петель, поэтому присутствует шум на уровне -125дБ и ниже.

       
      Есть определенные особенности применения ИМС CS5381, скупо описанные в App Notes, позволяющие реализовать данную ИМС в двойном моно и теоретическим уровнем THD+N в -123дБ, что позволит производить оценку и замеры искажений у большинства современных ИМС ЦАП без режекторов.
      В проекте плата с 2мя генераторам на сетки частот 44.1 кГц и 48 кГц, АЦП включенным в моно режимах и DSP процессором ADAU1452.
      Подробную инструкцию с описание на текущую схемы и платы прикладываю.
      инструкция.pdf
    • By Терентенко Андрей
      Добрый день! Имею следующую ситуацию : на базе  PIC16f676  создал приблуду для "управления нештатной магнитолой с руля", а именно  сигнал с руля это 4,8в и в зависимости от нажатой кнопки падает дискретной до 0.8в мк с помощью АЦП отслеживает  на магнитолу паралельно кнопкам кинул оптрони которыми управляет МК. Питание от LM с фильтрующими конденсаторами. При тестових прогонах всё работало как надо (программно реализовано защиту от дребезга аж на 0.1 сек в поисках решений) и в машине  и от штатного БП . Но заметил закономерность сейчас на улице - 2 и при первом запуске минут 5, МК "шумит" несоотвецтвует нажатия на руле кнопке  на магнитоле ! Сигнал с руля смотрел стабильный без дребезга , притом когда тестил вынес магнитолу подключил всё работало гуд но пока устанавливал закручивал она остыла и начинались эти тацы . Кто что подскажет? МК или ЛМ могут так реагировать на температуру ? Прошу прощения у модераторов за повторение теми (может в этом разделе будет актуальней)
  • Сообщения

    • Просто тебя заставляли из-под палки, а я маме "помогал", крутил с душой, чувством, толком и расстановкой. Сейчас в розетку ткнул вилку, кпопачку нажмал "и все завертелось..."©  Ничего душевного, режь да кидай. А раньше? Мякишем прогонишь, потом лук, потом корочкой... Э-эх.  А, еще подбивал брата в шнек пальцы сунуть, но что-то он подозревал и сувать нихател ни в какую. 
    • Да Усилителю.Лампа на входе 12AX7.С фазоинвертера получаю уже 20 вольт.Вот схема: Хочу получить при замене парофазного фазика на ФИРН 5-6 вольт,а не 20 вольт как по схеме Василича. Далее стоит драйверный каскад с него получаю 65 вольт и перегружает выходной каскад.
    • Да, лучше, чтобы не было. На входе МК присутствует конденсатор 0,1мкФ, его видно на плате и схеме. Этот конденсатор совместно с многокилоомным делителем, образует RC-фильтр, подавляющий пульсации. LM358 довольно тормознутый частотно компенсированный ОУ, и почти не пропускает удвоенную частоту преобразования 60-80кГц. Поэтому, проблем с измерениями сотен мА - ампер, не должно быть. 
    • Усилителю? Фазоинвертору? На выходе фазоинвертора? Усилителя? Что же Вы так "коряво" пишете. Какая лампа на входе и в фазоинверторе? Если 6Н9С, то замените на 6Н8С, уменьшив нагрузочные резисторы и подобрав режимы. С 6Н6П можно ещё меньшее усиление получить... Если используется ООС, то увеличьте её глубину. Если при этом возникает генерация, уменьшите усиление первого каскада (см. выше).
    • В мире, вообще нет ничего одинакового. А каждая лампа имеет свой звук только потому, что их, к примеру, меняют при прослушке, основываясь на факте одинаковости цоколёвки, например. Если взять пару грамотно сконструированных и отлаженных усилителя одинаковой мощности, на разных лампах, вслепую Вы не отличите их по звучанию. Звучит не лампа, звучит усилитель. Ламповый усилитель, тот редкий случай, когда звучание настраивается, подобно музыкальному инструменту. Правильная настройка ведёт к консонансу, неправильная, к диссонансу.
    • Где то непропай или деталюга уплывшая, я обычно каждую деталь перед запайкой тестером проверяю, бывает и брак попадается. Долго, муторно, но надежно.
    • Пробовал когдато добавлять пасту из шариковых ручек, фигня получается. Лучше сыпануть сфер и оставить белого цвета. В принципе сейчас в строймагазинах навалом различных колеров в порошке.