M_Andrey 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Вообще-то 0.9(9) = 1 по определению значения бесконечной десятичной дроби, записываемой таким образом. R-2R ЦАП выдаст Uref - LSB. Ну хорошо не 0.9(9) а 0,9999999 (кол-во 9-ок зависит от разрядности ЦАПа). А LSB это и есть 1-0,9999999. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 30 марта, 2011 Опубликовано 30 марта, 2011 · Жалоба Залезем внутрь АЦП. Там есть ЦАП. Вопрос. 111111 на входе цапа. Чему равно выходное напряжение? Правильно. Опорному. Агащас. В смысле - надо смотреть конкретный ЦАП. Ближе всего нашлась эта картинка http://en.wikipedia.org/wiki/R-2R#R-2R_res..._ladder_network Но вот если на всех входах единички, то все входы резисторной матрицы будут подключены к Vref. И сколько будет на выходе? ЦАП на коммутации токов (с необращённой матрицей R-2R) аналогчино себя будет вести. ЦАП на коммутации зарядов C-C/2 вроде как в итоге то же самое. Конечно, при настройке можно выгнать Uref_effective = Uref_input * 2N / (2N - 1) и тогда все единички дадут на выходе Uref Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lun 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Ну понаписали, блин! Это ж сколько мне разбираться! :) Всем спасибо! Пойду переваривать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
halfdoom 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба В ту-же тему задачка: при оверсемлинге N-отсчетов суммируются и сдвигаются вправо на М. Например, если хотим получить 10 бит из восьми, то суммируем 16 отсчетов и сдвигаем вправо на 2. Если все отсчеты были равны 255, то результат будет 1020, а не 1023. И насколько делить в этом случае? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба И насколько делить в этом случае? На 1024. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Нешуточно все это. И неубедительно совсем. 3 сторона. 8 разрядов -> 0...255 в десятичном представлении. Попытка закодировать 8 разрядами произвольный (Vref, например) отрезок даст точность 1\255 этого отрезка. (Ибо от 0 до 255 всего дискретных 255 отрезков, а не 256). Так что делители на степень N покушаются на основы бытия! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба В ту-же тему задачка: при оверсемлинге N-отсчетов суммируются и сдвигаются вправо на М. Например, если хотим получить 10 бит из восьми, то суммируем 16 отсчетов и сдвигаем вправо на 2. Если все отсчеты были равны 255, то результат будет 1020, а не 1023. И насколько делить в этом случае? А если так: (1020*256/255) - 1 = 1023 Правда для остальных значений результат получается дробный update. Да, понял что чушь сморозил)) Надо просто сначала прибавить единицу! 255+1=256, теперь 256*4 - 1 = 1023. Вот и все, получилось так сказать выравнивание по левому краю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба (Ибо от 0 до 255 всего дискретных 255 отрезков, а не 256). Так что делители на степень N покушаются на основы бытия! Нарисуйте в тетрадке в клетку кубики с номерами 0...15, а потом сосчитайте их количество. Основы бытия вернутся на свое место. И насколько делить в этом случае? И в этом, и во всех других делите на 1024! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба (Ибо от 0 до 255 всего дискретных 255 отрезков, а не 256).От 0 до 255 лежит 255 отрезков, но они нумеруются от 0 до 254. Номерами от 0 до 255 можно пронумеровать 256 отрезков. Дальше вопрос, что и как делить на отрезки. Можно поделить участок от 0 до Vref на 256 отрезков и все их перенумеровать. Тогда числу n Є 0..255 будет отвечать диапазон напряжений [ n * Vref/256, (n+1) * Vref/256 ), числу 255 отвечает отрезок [ Vref - Vref/256 , Vref ) . U = Vref -- начало переполнения АЦП. Можно поделить участок от 0 до Vref на 255 отрезков с номерами 0..254. Тогда «лишнему» числу 255 отвечает отрезок [ Vref , Vref + Vref/255 ) . Переполнение АЦП наступает при напряжениях Vref + Vref/255 и выше. При напряжении, например, Vref + Vref/255/2 АЦП ещё далеко не перепонен, он правильно показывает номер отрезка. Дальше вопрос, что и как имели ввиду разработчики конкретного АЦП, голосование на форуме не заменяет чтение документации. Возможно, они решили код 255 использовать как признак переполнения, так как отдельного выхода переполнения нет. Счастья от этого прибавляется мало, разве что ещё и напряжению 0 присвоить код 1, чтобы код 0 использовать как признак выхода сигнала за диапазон опорных вниз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Дальше вопрос, что и как имели ввиду разработчики конкретного АЦП, голосование на форуме не заменяет чтение документации. Я на 50% уверен, что разработчики АЦП сами запутались в этом вопросе, когда писали в документации, что делить нужно не на степень двойки. В принципе, ошибка небольшая. А процедура деления на 1023, например, отъест кучу ресурсов. Ну и нахера хоть кому-нибудь это нужно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Если мне склероз не изменяет, то часовые кварцы тоже когда-то делали на 32767Гц. А потом перешли на 32768Гц. Видимо у разработчиков мозги наконец встали на свое место. С разработчиками АЦП это тоже рано или поздно произойдет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Ладно. Берем Vref = 1 вольт. 8 разрядов. Подаем на вход АЦП тоже 1 вольт. Получаем код FF - верно? Верно. 255\256*1=0.996 вольта. 1 вольт не равно 0.996 вольта. Но если попробовать делить на 255, то результат будет ВЕРНЫМ. Мерси за внимание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Но если попробовать делить на 255, то результат будет ВЕРНЫМ. Попробуйте подать на вход 2 вольта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Ладно. Берем Vref = 1 вольт. 8 разрядов. Подаем на вход АЦП тоже 1 вольт. Получаем код FF - верно? Верно. Если вы на тот же АЦП подадите напряжение от 0.996V до 1V, вы тоже получите код FF. 0.996V - это порог переключения. Ниже него будет код FE, а выше FF. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lun 0 31 марта, 2011 Опубликовано 31 марта, 2011 · Жалоба Вот этот, кстати, тоже. Думал я, думал и вот что надумал. Исходя из предположения, что картинка, приведенная ViKo в посте №17 верна для некоторого АЦП. Каждому коду с АЦП соответствует не точка напряжения, а интервал: код 00000 соответствует точке в интервале 0...1LSB, код 11111 - Vref-1LSB...Vref (и больше, но это сейчас не важно). Поскольку истинного положения точки в танном интервале мы не знаем, логично брать середину этого интервала. Тогда для этого АЦП правилной будет такая формула: U=(X+0.5)*Vref/2N U - вх. напр. Х - код с АЦП N - разрядность Формула легко проверяется подстановкой N=2 или N=1. Теперь если 0.5 не прибавлять, а только делить на что-то. 2N или 2N-1? (пусть Vref=1) ΔU256 = (X+0.5)/2N - X/2N = 0.5/2N получили постоянную ошибку. ΔU255 = (X+0.5)/2N - X/(2N-1) = 0.5/2N – X*(1/(2N-1) - 1/2N) А здесь ошибка зависит от Х. Х=0 -> ΔU=0.5/2N Х=2N-1 -> ΔU= -0.5/2N а в середине ΔU=0! (если про всякие нелинейности забыть) Я решил: делть буду на 255 (для АЦП, которому годится та картинка(!!) ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться