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

А ЖК от чего?

 

не помню.

 

Вас в школе пропорцию составлять учили? Когда Vin=Vref получаем максимальное число которое

ADC=Vin/Vref*1023

 

с какого перепуга в ДАТАШИТЕ пишут 1024???

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


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

с какого перепуга в ДАТАШИТЕ пишут 1024???

Господи, как же тяжело с недоученными школьниками! :(

В микроконтроллере AVR 10-ти разрядный АЦП. С помощью 10-и двоичных разрядов можно представить 1024 числа, но максимальное значение такого 10-и разрядного числа составляет 0b1111111111=0x03FF=1023. Если мне не верите, воспользуйтесь виндовым калькулятором для перевода из одной системы счисления в другую ;) Также не нужно забывать о том, что нуль это тоже число! 1023+1=1024 числа. Так понятно?

Ну про прямую линию, ее графическое изображение и аналитическое представление (в виде формулы y=a*x+b ) вам надеюсь все-же объяснить не нужно?

АЦП квантует входной сигнал по линейному закону (по крайней мере разработчики АЦП к этому очень стремятся :) )

_y_ = ________________ a _______________ *_x_ + __b__

ADC=(ADC(max)-ADC(min))/(Uref(max)-Uref(min))*Uin+ADC(min)

 

поскольку значения ADC(min)=0 и Uref(min)=0V, а ADC(max)=1023, то формула приводится к виду

ADC=1023/Uref(max)*Uin=1023*Uin/Uref(max)

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


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

вопрос остается открытым: почему в Даташите в этой формуле стоит 1024? Я-то прекрасно понимаю, что нуль - это тоже число, но мне непонятно почему в ДАТАШИТЕ для рассчета значения АЦП используют 1024. Ведь при этом совсем другое значение. Не веришь - сам посмотри, только там есть небольшая поправка к этому.

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


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

Если в даташите написано - верь,

но тогда диапазон входных будет от 0 до (Uref-Uref/1024)

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


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

where VIN is the voltage on the selected input pin and VREF the selected voltage reference (see

Table 22-2 on page 255 and Table 22-3 on page 256). 0x000 represents analog ground, and

0x3FF represents the selected reference voltage minus one LSB.

 

Вот что написано в документации, а переводится это так - значение 0 говорит о том, что входное напряжение равно земле, значение 0x3FF говорит о том, что входное напряжение равно опорному минус напряжение одного младшего разряда (а не опорному!), т.е. верна формула из документации и в эксель надо писать 1024.

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


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

Вот что написано в документации, а переводится это так - значение 0 говорит о том, что входное напряжение равно земле, значение 0x3FF говорит о том, что входное напряжение равно опорному минус напряжение одного младшего разряда (а не опорному!), т.е. верна формула из документации и в эксель надо писать 1024.

 

Короче, почти понятно.

 

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

Вот ссылка. Там найдете "Уолт Кестер - Цифровые Фильтры". Кроме этого там много чего есть!

 

Попробовал сделать осреднение результата АЦП. Примерно так:

  • АЦП в режиме постоянного преобразования (free run)
  • По совпадению таймера с OCR0 вызывается прерывание, при помощи которого реализована дин.индикация
  • В этом же обработчике прерывания:
1 for (i=1;i<=9;i++)
2     {current_temp=ADCL;
3     current_temp+=((int)ADCH << 8);
4     summ+=current_temp;}
5 current_temp=summ/9;
6 summ=0;
/*дальше идет разбиение числа по десятичным разрядам*/

 

Т.е. просто суммирую девять преобразований, и делю на их число. Т.е. нахожу среднее значение.

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

 

Или все-таки в "коленной" разводке? Все сделано на макетке, спаяно медным лакированным проводом 0.2мм. Земля приходит почти везде в одну точку. Вот только аналоговая часть ненмого крива разведена. Вобщем, буду травить плату, посмотрю что получится.

 

Как я понял рекомендации такие: разявязать аналоговую часть от цифровой конденсаторами, все землянные выводы в одну точку, конденсаторы по-ближе к микросхеме, на вход АЦП RC ФНЧ с частотой среза 10..50Гц. Так?

 

Завтра попробую создать промежутки между включением анодов, что бы в эти промежутки впихнуть измерение сигнала.

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


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

вопрос остается открытым: почему в Даташите в этой формуле стоит 1024? Я-то прекрасно понимаю, что нуль - это тоже число, но мне непонятно почему в ДАТАШИТЕ для рассчета значения АЦП используют 1024. Ведь при этом совсем другое значение. Не веришь - сам посмотри, только там есть небольшая поправка к этому.
Ну раз в даташите написано, то спорить не буду. :laughing: Тем более, что там в самом начале раздела описания ADC указано

The ADC converts an analog input voltage to a 10-bit digital value through successive approxi-

mation. The minimum value represents GND and the maximum value represents the voltage on

the AREF pin minus 1 LSB.

Т.е. входной диапазон напряжений для ADC: Uin(min)=0V, Uin(max)=Uref-Uref/1024 и на вход АЦП напряжение равное AREF подавать нельзя. Точнее конечно можно, но не имеет смысла.

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

ADC=(ADC(max)-ADC(min))/(Uref(max)-Uref(min))*Uin+ADC(min)

значения ADC(max)=1023, ADC(min)=0, Uref(min)=0V, Uref(max)=Uref-Uref/1024=(1023*Uref)/1024 и получаем

ADC=(1023-0)/((1023*Uref)/1024)-0V)*Uin+0, а после преобразований

ADC=1024/Uref*Uin.

Выходит формула в даташите верная. Просто таковы особенности этого АЦП в AVR, о которых я не знал.

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


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

Попробуйте смоделировать (хоть в ёкселе) реакцию фильтра на единичный скачок (x=0 при i<0, x=1 при i>=0), поиграйтесь с A, и все станет просто и понятно.

:07: :a14: и уважуха!

Все, теперь я знаю "Простое скользящее среднее", "Взвешенное скользящее среднее" и "Экспоненциальное скользящее среднее".

 

Возникло сразу несколько вопросов:

 

(WMA) - как правильно рассчитать коэффициенты? Я пока беру 4 отсчета, соответственно ставлю 1/4.

(EMA) - было бы интересно привязать коэфф. "А" к помехам, т.е. если вдруг начинается частое мельтишение младших разрядов, то уменьшить А.

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


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

Все, теперь я знаю "Простое скользящее среднее", "Взвешенное скользящее среднее" и "Экспоненциальное скользящее среднее".

Бугагага:

// SMA - Simple Moving Average

// EMA - Exponential Moving Average

// WMA - Weighted Moving Average

// DEMA - Double Exponential Moving Average

// TEMA - Triple Exponential Moving Average

// TRIMA - Triangular Moving Average

// KAMA - Kaufman Adaptive Moving Average

// MAMA - MESA Adaptive Moving Average

// T3 - Triple Exponential Moving Average

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


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

Бугагага:

// SMA - Simple Moving Average

// EMA - Exponential Moving Average

// WMA - Weighted Moving Average

// DEMA - Double Exponential Moving Average

// TEMA - Triple Exponential Moving Average

// TRIMA - Triangular Moving Average

// KAMA - Kaufman Adaptive Moving Average

// MAMA - MESA Adaptive Moving Average

// T3 - Triple Exponential Moving Average

 

пилять! :07:

Вопрос такой: при использовании EMA метода, коэфф-т A должен быть вещественным. Т.е. в итоге функция получается вещественной. Но у меня дальше идет оператор "остаток от деления". Как мне согласовать вщественный тип с получением остатка от деления? Простое приведение типов не катит - нет округления. Т.е. мне нужно вещественное число округлить, а потом это число привести в целый тип. Как это реализовать на Си?

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


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

Так, все сделал. Сглаживает здорово!

Огурцов, можешь дать ссылки на формулы для DEMA...MAMA?

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


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

Вопрос такой: при использовании EMA метода, коэфф-т A должен быть вещественным. Т.е. в итоге функция получается вещественной. Но у меня дальше идет оператор "остаток от деления". Как мне согласовать вщественный тип с получением остатка от деления? Простое приведение типов не катит - нет округления. Т.е. мне нужно вещественное число округлить, а потом это число привести в целый тип. Как это реализовать на Си?

Помните, что такое подмножество рациональных чисел? Правильно, это подмножество чисел, которые могут быть представлены в виде отношения (ratio = дробь, отношение) двух целых чисел. И примерно в то же время Вам должны были сообщить, что любое вещественное число может быть с любой точностью приближено рациональным (хотя нет - года на 3-4 позже). Дальше сами догадаетесь?

Это в качестве посказки:

Простейший НЧ фильтр 1-го порядка: Yi = a * Yi-1 + b * Xi, a+b = 1

Т.е.

Y = a * Y + b * X;

Для целочисленной арифметики удобно делать a=c/2^N, b=(2^N-c)/2^N.

Чтобы не набегала погрешность при обработке, разрядность Y должна быть не менее (разрядность X) + N.

Y = a * Y + b * X; // это фильтр на С; X - новое входное значение, Y - справа предыдущее выходное значение, слева - новое.

u16_t Yavg;

for(;;)
{
   Yavg -= Yavg/256;
   Yavg += ADCH;
}

А это целочисленная реализация приведенного выше фильтра с коэффиентами a=255/256, b=1/256.

Ну и уж совсем на всякий случай: деление целого числа на 2^N компилятор заменит на N сдвигов вправо. 256 = 2^8.

 

ЗЫЖ я к своему детенышу (которому, думаю, примерно столько же годочков, сколько и Вам) за серьезной беседой обращаюсь на "Вы".

ЗЗЫЖ радует, что в Ваших постах не так уж много проблем с русским языком.

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


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

Огурцов, можешь дать ссылки на формулы для DEMA...MAMA?

Держи http://ta-lib.org/hdr_dw.html Надеюсь, дальше сам найдешь.

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


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

ЗЫЖ я к своему детенышу (которому, думаю, примерно столько же годочков, сколько и Вам) за серьезной беседой обращаюсь на "Вы".

ЗЗЫЖ радует, что в Ваших постах не так уж много проблем с русским языком.

 

Ну, извинните, я думал, что тут люди простые. Лично я не люблю когда меня на "Вы". Мне проще на "Ты". Сразо как-то "по-свойски". Если чем-то задел, то прошу прощения.

 

Кстати, я себе EMA сделал. смотрю на девайс и радуюсь =) Позже поэксперементирую с другими фильтрами.

 

Ко всем: EMA - это КИХ или БИХ?

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


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

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

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

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

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

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

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

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

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

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