slav0n, молодец, садись, пять. Теперь то же самое, только на реальном устройстве.
Я не зря картинку давалСпойлерСтолько хватит шума? Как один человек сказал - что же хваленый СТМ шумит аж в трех младших разрядах. И это на опоре ТЛ431 = 3,3 счем-то там, не помню, лень смотреть.
Что же мы все делаем, берем сумму к примеру из 64 отсчетов и делим на 64.
Первый вопрос slav0n, по чему не на 63, ну взяли бы сумму из 63 и поделили на 63, нет берем сумму кратную степени 2 и делим на степень 2.
slav0n писал(а):
та забыли уже про того чувака с его 240
Что же на самом деле произошло у slav0n: он взял сумму из 64 и сдвинул на 3 бита вправо, эти 3 бита несут какую-то информацию. Второй вопрос slav0n, какую информацию? далее оставшееся от сдвига на три бита умножил на опору 5000.0 (усилил, просто взял и усилил на какой то К) и поделил на что там не хватает.
Далее мне лень объяснять, может так дойдет. Верьте в чудо, а Starichok51, просто взял и поставил ADS1115, и молчит, а я stm32f030.
по чему не на 63, ну взяли бы сумму из 63 и поделили на 63, нет берем сумму кратную степени 2 и делим на степень 2.
ты снова пропустил уроки... правильно вот так - берем сумму из кратных 4^N выборок и делим на 2^N. целочисленно
Dimon456 писал(а):
взял сумму из 64 и сдвинул на 3 бита вправо, эти 3 бита несут какую-то информацию. Второй вопрос slav0n, какую информацию?
незначащую бесполезную информацию, которую бессмысленно использовать в дальнейших вычислениях.
Добавлено after 2 hours 23 minutes 44 seconds: кстати, множитель 4^N выборок удобно брать из весов разрядов (2, 4, 8, 16...) тогда децимацию и усреднение можно делать одновременно одним сдвигом
Dimon456, извини, выше я был не прав, а ты прав. деление суммы на 8 и последующее деление на 8192 можно заменить одним делением на 65536. а деление на 65536 после умножения на 5000 можно заменить отбрасыванием двух младших байтов, если на ассемблере делать.
slav0n писал(а):
u16 rounds = 16 * 16;//+2 bit
16 * 16 = 256 выборок, а это дает +4 бита. но ты после сдвига оставляешь только 2 дополнительных бита.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
при делении на 8 он отбрасывает 3 младших бита, которые несут информацию.
slav0n писал(а):
я тут поставил опору 4096
Не всегда можно опору уменьшить, к примеру у stm32f030f4p6 имеется вывод под опору, хотел уменьшить с 3.3В до 2.048, из-за того что чип урезанный и где-то что там внутри не так спаяно, одним словом мк переставал работать.
при делении на 8 он отбрасывает 3 младших бита, которые несут информацию.
правильно, потому что там она бесполезна но при этом я сохраняю 3 дополнительных бита с весьма полезной информацией а ты мне предлагаешь сдвинуть сразу на 6 бит и все уничтожить не, так не пойдет
Добавлено after 26 minutes: кстати, ранее был вопрос про цифры
и что я вижу - софтовый оверсемплинг меги лучше хардового
Ты слишком то не радуйся, это же протеус, там все идеально.
Я сейчас глянул мануал на stm32f030
Код:
Bit 4:3 RES[1:0]: Data resolution These bits are written by software to select the resolution of the conversion. 00: 12 bits 01: 10 bits 10: 8 bits 11: 6 bits
Давай проверим в реальном железе, но будем использовать тот шум который есть, то есть без добавления шума на опору? Это вопрос, жду ответа.
DAC прибавляет строго по 0,01В. У меня смещение задано относительно 0, для 12бит составляет -6 единиц АЦП, может по этому не соответствие 499 и 492. На ножку АЦП подано с буферного ОУ через RC цепь, 200 Ом и 10нФ.
Еще используется скользящее среднееСпойлер
Код:
// глубина буфера усреднения. чем больше, тем сильнее фильтрация и медленнее работа // очень хорошо, если число кратно степени двойки (т.е. 1, 2, 4, 8, 16, 32, 64 и т.д.) #define AVERAGE_DEPTH K //8 // функция получает результат очередного замера и возвращает отфильтрованное значение uint16_t get_average_u(uint16_t val){ static uint16_t buf[64]; static uint8_t cur; uint32_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; }
K = 8, я его пробовал в меню крутить, но так же на 8 оставил.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения