Программирование 32-х разрядных МК

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Цитата:
As in practice there is very little difference between the two calculated values because ‘n’ is quite a
large number, both definitions are used.
Sукин Sын, чем меньше n тем больше погрешность. Тебе это трудно понять. Возьми хотя бы вольтметр с двумя делениями 0 и 1В. Сколько на нем интервалов? Два что ли? Хватит бухать. И передавай привет Зеленой Ящерице (дракуле), когда протрезвеет.

ssss
Offline
Зарегистрирован: 01.07.2016

К твоим блохам ещё и клещи присоединились? Тогда тебе пора дихлофос вовнутрь принимать. ))))))))))))

ssss
Offline
Зарегистрирован: 01.07.2016

a5021 пишет:

. Непременно продолжайте.


Если что непонятно будет, обращайся, всегда поможем. )))))))

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Sукин Sын пишет:
обращайся, всегда поможем
Выпей яду, это единственное, чем ты можешь помочь...

ssss
Offline
Зарегистрирован: 01.07.2016

Я понял, тебе уже ничего не поможет, ты просто безнадежен. ))))))))

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Вот и замечательно, просто плыви дальше по течению, не пахни здесь.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

a5021 пишет:

Данная "формула" незамысловато вытекает из довольно простой и естественной пропорции V / Vmax = ADC / ADCmax.

Ну вот и раскрылся секрет! ;) Хотя его и не было....

Написанное Вами выражение пропросту неверно. Это не тождество. Проверить легко. Для одно битного варианта не так наглядно.

1. Однобитный АЦП. реф = 1В.

ясно, что для 0..0.49(9)В - код=0, для 0.5..0.99(9)В - код=1.

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

2. 2-ух битный АЦП.

0..0.249(9) - 0

0.25..0.49(9) - 1

0.5..0.749(9) - 2

0.75..0.99(9) - 3

исходя из Вашей пропорции, какое значение кода АЦП для 0.3В? по Вашему - 1 выходит, а на самом деле 2 - можете проверить на любом реальном кристалле, взяв два старших разряда....

.....

Полотенце дать, или сами ОБТЕКАТЬ предпочитаете?

=====================================================

По поводу документа, который Вы наконец-то нашли.

В сети полно документов от весьма почтенных авторов, о глобальном потеплении, о вреде ГМО и прочей херни.

Вы нашли у ST что-то подобное.

Слава богу, что в реф. мануалах. СТ до такого не опускалась.

Все таки LSB=Vref/4096.

......................

Вы ведь доказательства любите, так?

Так вот, совсем не сложно показать, что SLB = реф/2^N.

Тот факт, что отбросив ОДИН, младший бит, мы увеличим LSB ровно в два раза, дает рекурсивную формулу:

LSB(N-1) = 2*LSB(N).

Не знаю, как в школах для даунов, а у нас в матшколе была даже контрольная по возвратным последовательностям.

Я думаю, что Вы догадываетесь, краем сознания, как решают такие задачи.

================================================

И еще раз, ВАЖНО:

То, что Вы привели пропорцию: V/Vmax = ADC/ADCmax, говорит о том, что Вы понятия не имеете о расчете и учете погрешностей при измерениях.

О том, что они ведут себя как дифференциалы функций измерения и пр.

Такое проходят на всех спрециальностях ВУЗов по примату или любой приборной специалььности.

Поскольку у разных людей разное отношение к анонимности в сети, то спрошу: Вы где вышку получали? Не обязательно ВУЗ, хоть специальность скажите. Возможно спор пуст, просто в силу невежества. С человеком без вышки, в нашем контексте, беседа больше походит на мастурбацию (по продуктивности).

Про себя - миллион раз говорил: математик, МехМат МГУ 1986-91, кафедра логики.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Да, до 90-х годов оказывается ещё неплохо учили )))

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Цитата:
Да, до 90-х годов оказывается ещё неплохо учили
Демагогии и сейчас неплохо учат.

Дракула, если бы максимальное измеренное значение равнялось 4000, ты бы все равно доказывал, что интервалов 4096?

ssss
Offline
Зарегистрирован: 01.07.2016

Да считай уже в копейках, в косточках, в блохах, в кружочках колбасы, если тебе так понятнее. )))))))))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Andy пишет:

Дракула, если бы максимальное измеренное значение равнялось 4000, ты бы все равно доказывал, что интервалов 4096?

Нет,  в этом случае интервалов было бы 4001.

Нельзя сравнивать АЦП с линейкой. В этом причина ошибки. На детской линейке 20 интервалов по 1 см и действительно максимальное значение - 20см. Измеряя отрезки, мы округляем результат до ближайшего целого.

Но АЦП не так работает. АЦП округляет, отбрасывая лишнее, то есть вниз.

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

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

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

wdrakula пишет:
Нет,  в этом случае интервалов было бы 4001.
Тогда самое время определиться, что такое интервал... Возьмем  одноразрядный АЦП - вольтметр с двумя делениями 0 и 1. Сколько он имеет интервалов?

ssss
Offline
Зарегистрирован: 01.07.2016

Andy пишет:
. Возьмем  одноразрядный АЦП - вольтметр с двумя делениями 0 и 1. Сколько он имеет интервалов?


ДВА! От нуля до питание/2 и питание/2 до питание. Это типа резистивного делителя пополам.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Sукин Sын, трезвей уже. Это границы одного интервала.

ssss
Offline
Зарегистрирован: 01.07.2016

Нюхни еще дихлофоса.

diger67
Offline
Зарегистрирован: 25.07.2015

Andy пишет:

wdrakula пишет:
Нет,  в этом случае интервалов было бы 4001.
Тогда самое время определиться, что такое интервал... Возьмем  одноразрядный АЦП - вольтметр с двумя делениями 0 и 1. Сколько он имеет интервалов?

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

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Разве твое мнение, Землекоп, кто-то спрашивал? Или ты на пару с Sукиным Sыном дихлофоса нанюхался...

a5021
Offline
Зарегистрирован: 07.07.2013

wdrakula пишет:

2. 2-ух битный АЦП.

0..0.249(9) - 0

0.25..0.49(9) - 1

0.5..0.749(9) - 2

0.75..0.99(9) - 3

исходя из Вашей пропорции, какое значение кода АЦП для 0.3В? по Вашему - 1 выходит, а на самом деле 2 - можете проверить на любом реальном кристалле, взяв два старших разряда....

Какое-то странное доказательство -- "можете проверить на любом реальном кристалле". На деле же, я и без "реального кристалла" вижу, что в случае измеряемых 0.3 вольта и результате на выходе ацп равном 2, получается, что входное напряжение 0.3в относится к диапазону 0.5 .. 0.74(9)в. Как вы считаете, нет ли в этом какого-то противоречия?

Если разобрать механизм работы АЦП последовательного приближения в приложении к данной ситуации, то АЦП самым первым действием сравнивает входное напряжение с половиной опорного напряжения. На основании этого сравнения принимается решение о значении старшего бита результата. Если напряжение на входе АЦП выше половины опорного, то старший бит результата устанавливается в единицу, иначе в ноль. Сравнение 0.3в на входе с 0.5в опорного дает однозначный ответ, что старший бит результата никогда не будет равен единице. Все. С этого момента конечный результат преобразования может быть только меньше 2.

Так что вы там говорили про полотенце?

Цитата:
Про себя - миллион раз говорил: математик, МехМат МГУ 1986-91, кафедра логики.

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

 

diger67
Offline
Зарегистрирован: 25.07.2015

Andy пишет:

Разве твое мнение, Землекоп, кто-то спрашивал? Или ты на пару с Sукиным Sыном дихлофоса нанюхался...

Улыбнуло!

diger67
Offline
Зарегистрирован: 25.07.2015

Хорошо подумал, второй диапазон это от 0.25 до 0.49. Если использовать твою женскую логико, то есть 0 диапазон. Так вот при использовании 4096 округление идет в меньшую сторону и получаем 0.25, при мспользовании 4095 в большую сторону, получаем 0.49. Так работает АЦП - это не математика но не в чистом виде.

 

 

a5021
Offline
Зарегистрирован: 07.07.2013

И значение на выходе АЦП равное 1. Все верно, но дракула предлагает уверовать (т.к. доказательств не приводит), что на выходе будет 2.

diger67 пишет:
Так работает АЦП - это не математика но не в чистом виде.

"Не математика но не в чистом виде" -- это, простите, что? Под это описание подходит и состояние ишемического бреда.

diger67
Offline
Зарегистрирован: 25.07.2015

В АЦП насколько мне известно не просто идет сравнение, а определяется, измеренное значение больше половины диапазона или меньше. В первом случае приравнивается к верхнему приделу 2N,  во втором 2N-1.

a5021
Offline
Зарегистрирован: 07.07.2013

diger67 пишет:

В АЦП насколько мне известно не просто идет сравнение, а определяется, измеренное значение больше половины диапазона или меньше. В первом случае приравнивается к нижнему приделу 2N,  во втором 2N-1.

Переведите мне кто-нибудь, плиз.

diger67
Offline
Зарегистрирован: 25.07.2015

https://youtu.be/JUy8tAjBvhc?list=PLJTlt64jBcCtQ99qqW-n-hraDkSJVMBCR

Вобщем то тут можно посмотреть перевод того что я пытался сказать.

a5021
Offline
Зарегистрирован: 07.07.2013

Вы серьезно рассчитываете, что я буду сидеть двадцать минут и ждать, расскажет там кто-то гнусавым голосом, что вы пытались сказать или нет? Это не серьезно. Лучше всего, когда доказательства в краткой форме изложенны прямо в тексте. Например, так:

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

ssss
Offline
Зарегистрирован: 01.07.2016

а5021 не хочет очередного звания "мудак", но постоянно стремится к этому. )))))))

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Sукин Sын, чё дихлофос отпустил?

diger67
Offline
Зарегистрирован: 25.07.2015

a5021, тяжелый случай.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Чё-та скисли. Так скока же у однобитного АЦП "диапазонов" .. может голосовалку устроите? :D

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

a5021 пишет:

 На деле же, я и без "реального кристалла" вижу, что в случае измеряемых 0.3 вольта и результате на выходе ацп равном 2, получается, что входное напряжение 0.3в относится к диапазону 0.5 .. 0.74(9)в. Как вы считаете, нет ли в этом какого-то противоречия?

Да. Я написал так как написал, рассуждал про номер интервала, а написал код. Написал ошибочно и Вы имели право понять меня так, как поняли.

Придется переписать:

Ваша "пропорция" дает 0.3*3 = 0.9 - и укладывает 0.3В в интервал №1, с кодом 0. (Еще раз: 1 написал ощибочно, вину признаю)

Правильно 0.3*4 = 1.2  - второй интервал с кодом 1.

То есть не 1 и 2, а 0 и 1. Виноват, моя ошибка.

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

Вы предпочли "включить дурака" и настаивать на точности.

Ваше право, ума только не прибавляет и 0.9 в 1 не превращает.

============================

Про образование Вы предпочли не отвечать? Тогда попрошу "нахер с пляжа", до ответа. Стар я уже для ежедневной мастурбации.

Ну и по желанию публики!

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Ну что, с уходом Зеленой Ящерицы самое время подвести итоги
В литературе встречается две формулы с значениями: 2^n-1 и 2^n.
На форуме есть два мнения:

1.В формуле фигурирует значение 2^n-1. Согласно ему 12 разрядное АЦП имеет 4095 значений LSB (от 1 до 4095). По этой же логике в метре 100 см (от 1 до 100). В вычислениях вместо 4095 используют значение 4096 с целью облегчения вычислений (поскольку деление на числа кратные степени 2 заменяются сдвигами), не смотря на незначительную погрешность.

2.В формуле фигурирует значение 2^n. Согласно ему 12 разрядное АЦП имеет 4096 значений LSB (от 0 до 4095). По этой же логике в метре 101 см (от 0 до 100). В вычислениях вместо 4096 используют значение 4095 с целью усложнения вычислений, внесения погрешности в измерения и разведения срача на форумах.

man9913
Offline
Зарегистрирован: 19.03.2016

Немного почитав там и сям, я встаю на сторону тех кто использует в расчетах 4096. Ответ на вопрос: "почему 4096?" я знаю, но вот просто интересно когда старые "умудренные" мгушники смогут понятно(и без глупых ошибок) объяснить массам - а почему все таки 4096 ? 

ssss
Offline
Зарегистрирован: 01.07.2016

man9913 пишет:
; я знаю

Молчи! Тебе клапауций запретил. )))))))))))))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

man9913 пишет:

Немного почитав там и сям, я встаю на сторону тех кто использует в расчетах 4096. Ответ на вопрос: "почему 4096?" я знаю, но вот просто интересно когда старые "умудренные" мгушники смогут понятно(и без глупых ошибок) объяснить массам - а почему все таки 4096 ? 

Это не формула "правильная", они  обе "правильные". У АЦП интервалов измерения 2^N, просто по технологии АЦП последовательного приближения (пополам, еще раз пополам и т.д.).

А какую формулу применять - Ваше дело. Для расчетов - я бы взял V=ADC*Vref / 4096, погрешность проще учесть, так как она равномерна. Расчеты - любой динамический расчет, хоть квадро, хоть сегвей.

Но для индикатора - конечно хочется видеть на экране 3В, а не 2.99В - тогда нужно использовать V=ADC*Vref / 4095.

man9913
Offline
Зарегистрирован: 19.03.2016

Не согласен, отказываюсь оценивать в предлагаемых вами категориях правильности/не правильности. А вот в категориях точности - другое дело(это подсказка). 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

man9913 пишет:

Не согласен, отказываюсь оценивать в предлагаемых вами категориях правильности/не правильности. А вот в категориях точности - другое дело(это подсказка). 

А про точность - посмотрите мой пост на страничку(или две?) раньше. Там прогрмака на Питоне, расчитывающаяя средее и средеквадратичное отклонения по обеим формулам.

Если Питон пугает, там 10 строчек, перепишите на любой удобный Вам язык.

Вкратце, разница такова, что при расчете баллистики для ракетных стрельб по полигону на Камчатке, получим, грубо, 120м и 80 м, на разных методах. ТО есть ВООБЩЕ НЕ СТОИТ ни внимания, ни дискуссии.

Поскольку наши "орлы в погонах" используют 14 битные(? не уверен) АЦП и получают точность 20-30 м, результат прикидочных расчетов вполне адекватен.

a5021
Offline
Зарегистрирован: 07.07.2013

wdrakula пишет:
Вы предпочли "включить дурака" и настаивать на точности.

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

man9913 пишет:
Не согласен, отказываюсь оценивать в предлагаемых вами категориях правильности/не правильности. А вот в категориях точности - другое дело(это подсказка).

Я посчитал в экселе статистику для десяти тысяч случайных напряжений на входе двухбитного ацп (а-ля модель идеального 2-bit SAR ADC) в диапазоне от 0 до 1000мв (шаг 1мв) при опорном 1000мв и у меня получилось следующее:

     2^n - 1         2^n
мин.ош 0 0
макс.ош 250 250
Средн. 98 126
Вариация 250 250
Точно 42 2
Мимо 10 47
ср.кв. 67 73
коэф.Вар 68% 58%

Как можно видеть, максимальная и минимальная ошибки, которые могут возникнуть при использовании обоих формул расчета, одинаковы. 0 = точно и 250 = 1LSB. Что же касается усредненной ошибки, то этот показатель немного лучше для формулы 2^n - 1. То же самое можно сказать и про стандартное отклонение.

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

Забавы ради посчитал, сколько раз случайное напряжение на входе идеально подошло под разные формулы таким образом, чтобы ошибка преобразования оказалась равна нулю. Ну и наоборот, сколько раз максимально не подошло. Как-то странно совпадает, что тоже лучше для 2^n - 1.  Видать эксел подыгрывает.

wdrakula пишет:
Вкратце, разница такова, что при расчете баллистики для ракетных стрельб по полигону на Камчатке, получим, грубо, 120м и 80 м, на разных методах. ТО есть ВООБЩЕ НЕ СТОИТ ни внимания, ни дискуссии.

Хотя из абстрактной любви к конкретике, все же можно уточнить, что на 80м промахнется ракета, наводящаяяся скриптом на питоне и использующая для расчетов формулу "/4095".

man9913
Offline
Зарегистрирован: 19.03.2016

Если не сложно,подсчитай статистику для формулы  V = Vref*ADC_DATA/4096 + LSB/2 и поделись результатами.

Думаю, результат будет не очень по душе сторонникам деления на 4095.

ssss
Offline
Зарегистрирован: 01.07.2016

Он как буратина считает на деревянном сломаном арифмометре. Горит желанием достигнуть звания "мудак" 80-го лэвэла. ))))))))))))))

Этого

Цитата:

Как можно видеть, максимальная и минимальная ошибки, которые могут возникнуть при использовании обоих формул расчета, одинаковы. 0 = точно и 250 = 1LSB.

уже достаточно для присвоения такого "высокого" для него звания. )))))))))))))))))

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Sукин Sын, ты чё это о себе в третьем лице? Похмельный синдром? Тебе уже давно присвоили это "высокое" звание и никому не под силу его у тебя отнять.

wdrakula пишет:
У АЦП интервалов измерения 2^N, просто по технологии АЦП последовательного приближения (пополам, еще раз пополам и т.д.).
Дракон, возьми линейку длиной 64 см и начни оцифровывать любой произвольный отрезок. Не забудь, что у тебя 65 отсчетов в такой линейке.

ssss
Offline
Зарегистрирован: 01.07.2016

Тебе лучше яйца лизать, чем говорить. Пользы больше. )))))))))))))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ssss пишет:

Тебе лучше яйца лизать, чем говорить. Пользы больше. )))))))))))))

Думаю, что торговля ворованными Ардуинами плохо идет. Переживает! Сочувствовать надо.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

man9913 пишет:

Если не сложно,подсчитай статистику для формулы  V = Vref*ADC_DATA/4096 + LSB/2 и поделись результатами.

Думаю, результат будет не очень по душе сторонникам деления на 4095.

снова приведу свой код, под катом.

# coding: utf8
from math import *
from random import *

N = 10000

asd1=0
asd2=0
ald1=0
ald2=0

seed()

for i in range (N):
    r = random ()

    adc = floor(r*4096.0)
    d1 = abs(r - adc / 4096)
    d2 = abs(r - adc / 4095)

    ald1 += d1
    ald2 += d2

    asd1 += d1**2
    asd2 += d2**2

ald1 /= N
ald2 /= N

asd1 = sqrt(asd1) /N
asd2 = sqrt(asd2) /N

print ("среднее по 4096 = %e \n" % ald1)
print ("среднее по 4095 = %e \n" % ald2)
print ("сред.кв по 4096 = %e \n" % asd1)
print ("сред.кв по 4095 = %e \n" % asd2)

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

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

========================

у меня в коде само преобразование такое: adc = floor(r*4096.0)

Можно имитировать работу SAR ADC

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Дракон, ты сам-то запускал свой говнокод на том ресурсе?

ssss
Offline
Зарегистрирован: 01.07.2016

wdrakula пишет:

ssss пишет:

Тебе лучше яйца лизать, чем говорить. Пользы больше. )))))))))))))

Думаю, что торговля ворованными Ардуинами плохо идет. Переживает! Сочувствовать надо.

А собако оказывается-то ещё та собако! Вот собако! А ведёт себя как щенок, ещё и пушистым прикидывается. Прям злобный Моськ! ))))))))))))))))

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

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

a5021
Offline
Зарегистрирован: 07.07.2013

ssss пишет:
Этого уже достаточно для присвоения такого "высокого" для него звания.

Смотрите-ка, у вас начинают работать рефлексы. Запомнив с сотого раза, что всякая конкретика с вашей стороны заканчивается одинаковым образом -- вы получаете по сусалам -- теперь вы уже не пытаетесь "разить" метким словом, а просто вырываете кусок любого текста и кричите "Смотрите, смотрите!", тайно надеясь, что там и вправду может оказаться какая-то ошибка.

man9913
Offline
Зарегистрирован: 19.03.2016

a5021, тебе не сложно проверить формулу что я написал и запостить результат добавив его в твою таблицу?