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

Работа С Ацп


Vasily437

Рекомендуемые сообщения

Здравствуйте!

Подскажите пожалуйста мне про АЦП.

Если используем левое выравнивание, то надо использовать только H? но тогда ведь не точно вообще будет. будет какая-то ерунда...

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

+

rezultat=ADRESH;

volt=(float)rezultat*5/1023;

sprintf(otvet,"%.2f", rezultat);

lcd_puts(otvet);

Куча непонятных ошибок связанные с sprintf... (библиотеку подключил)

Однако если вместо %f поставить %d, то ошибок нет. но полная ерунда вообще становится....

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

Здравствуйте!

Подскажите пожалуйста мне про АЦП.

Если используем левое выравнивание, то надо использовать только H?

Да.

...но тогда ведь не точно вообще будет. будет какая-то ерунда...

С чего это? 10 бит - точность 4,8 мВ. 8 бит - 19 мВ. Понижение разрядности повышает стабильность измерений. Отфильтровывает дребезг, помехи. Для любительских измерений хватает.

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

(ADRESH << 8) + ADRESL

Куча непонятных ошибок связанные с sprintf...

У меня вот так работает...

char str[];

sprintf(str, "%.2f",((ADRESH << 8) + ADRESL) * 0.0049);

lcd_Print(str,2,2);

По всем вопросам в Скайп... sergey.boreysha

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

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

А где про это почитать можно7

Ну вот смотрите:

Подал я на вывод 3В. берем левое выравнивание (достаточно ведь всего H)

H: 153 L:128

Получается 10 битный результат: 1001100110 чему соответствует: 614. далее 614*5В(опорное питание).1023(разрядность)=3В.

А теперь как якобы должно быть. Т.к. при левом выравнивании мы используем только 8 бит H, то берем вот это число 10011001, делаем те же математические операции и получается фигня.

lcd_Print(str,2,2);

Что это значит? 2,2? У меня стандартная библиотека и такого нет. (если можете - вышлите вашу)

char otvet[15];

sprintf(otvet, "%.2f",((ADRESH << 8) + ADRESL) * 0.0049);

lcd_puts(otvet);

Вот такие вот ошибки у меня:

Error   [1347] ; 0. can't find 0x81 words (0x81 withtotal) for psect "strings" in class "STRING" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x7B words (0x7b withtotal) for psect "text561" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x76 words (0x76 withtotal) for psect "text559" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x6E words (0x6e withtotal) for psect "text555" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x6C words (0x6c withtotal) for psect "text556" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x66 words (0x66 withtotal) for psect "text554" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x5E words (0x5e withtotal) for psect "text558" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x4D words (0x4d withtotal) for psect "text542" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x30 words (0x30 withtotal) for psect "text549" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x2A words (0x2a withtotal) for psect "text562" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x26 words (0x26 withtotal) for psect "text550" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x1D words (0x1d withtotal) for psect "text543" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x1B words (0x1b withtotal) for psect "text547" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x1A words (0x1a withtotal) for psect "text553" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x1A words (0x1a withtotal) for psect "text563" in class "CODE" (largest unused contiguous range 0x18)
Error   [1347] ; 0. can't find 0x11 words (0x11 withtotal) for psect "text548" in class "CODE" (largest unused contiguous range 0x9)
Error   [1347] ; 0. can't find 0xC words (0xc withtotal) for psect "text557" in class "CODE" (largest unused contiguous range 0x9)
Error   [1347] ; 0. can't find 0xA words (0xa withtotal) for psect "cinit" in class "CODE" (largest unused contiguous range 0x9)
Error   [1347] ; 0. can't find 0xA words (0xa withtotal) for psect "text546" in class "CODE" (largest unused contiguous range 0x9)

В моем варианте те же ошибки... Исчезают только при изменении на %d

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Опорное 5В.

Правое выравнивание:

ADRESH = 0b00000011 = 0x3

ADRESL = 0b11111111 = 0xFF

(ADRESH << 8) + ADRESL = 0b0000001100000000 + 0b11111111 = 0b0000001111111111 = 0x3FF

10 бит = 1024 инженерные единицы [ИЕ]. Цена деления 4,8 мВ.

Подали 3В = 625 ИЕ = 0х271

ADRESH = 0b00000010 = 0x2

ADRESL = 0b11111111 = 0x71

Левое выравнивание:

ADRESH = 0b11111111 = 0xFF

ADRESL = 0b00000011 = 0x3

Откидываем два младших бита. Теряем точность, повышаем стабильность измерений.

ADRESH = 0b11111111 = 0xFF

8 бит = 256 инженерные единицы [ИЕ]. Цена деления 19,5 мВ.

Подали 3В = 153 ИЕ = 0х99

ADRESH = 0b10011001 = 0x99

По всем вопросам в Скайп... sergey.boreysha

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

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

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Эм... И где тут решение?)

(ADRESH << 8) + ADRESL = 0b0000001100000000 + 0b11111111 = 0b0000001111111111 = 0x3FF

0b0000001100000000 -- у меня микроконтроллер 8 битный и не может содержать 16 бит в себе.

Меня больше интересует решение с правым сдвигом.

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

+ не понятно почему у меня возникают ошибки...

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Программа для работы с битами чисел (до 64-х бит). Формат: BIN, DEC, HEX.

Может эта программа поможет прояснить работу с битами...

Кстати, не твоя ли это тема: http://www.cyberforum.ru/microcontrollers/thread1383466.html#post7275491

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

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

Опять же читай мануал ;) - ты удивишься, но и большее число тоже!

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

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

Решение с int

int a=10/3;
int b=10*100/3-a*100;
printf("%d.%d",a,;

Вынюхал еще 1 способ, завтра испробую, если заработает и не забуду - выложу.

Может кому из вас пригодится.

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

Вова,

(ADRESH << 8) + ADRESL * 5 /1023 --> так получается сработает, учитывая, что у меня 8 битный? можете объяснить? обрезаться же 8 бит должно.... (может позже прочитаю манул, а то время в обрез и если конечно он на русском, а то английский я не знаю)

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

Так у меня тоже 8-битный МК и всё работает! Учите матчасть!

PS: Я представляю как вы машину заправляете. На АЗС...

- Вам сколько залить бензина? Литров 10??

- Да вы что! У меня двигатель объёмом 1 литр, если вы 10 литров зальёте, то 9 литров "отсечёт".

- Причём тут объём двигателя!? У вас бак на 40 литров!!!

- Да причём тут бак!?? Двигатель объёмом 1 литр, остальное "отсекается"!!

Бред? Бред!! Вот и вы такое же пишете...

По всем вопросам в Скайп... sergey.boreysha

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

Vasily437, зачем такие сложности с вычислениями, если надо 8 бит?

unsigned char a = (ADRESH<<6) | (ADRESL>>2);

т.е. отбрасываем "прыгающие" два младших бита...

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

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

откуда вы знаете, что с правым стабильнее.
А головой хотябы немного подумать ? Никак ? И не с правым выравниваем стабильнее, а с левым.

Это не нужно знать, это логично понятно. Чем больше младших бит будете отбрасывать, тем стабильнее будет результат измерения.

И с 8-им битами, действительно бред. А int использовать - это уже нормально, ничего не обрезается :)

Деградирует народ. Совершенно не хотят думать головой и читать литературу.

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

Vasily437, зачем такие сложности с вычислениями, если надо 8 бит?

unsigned char a = (ADRESH<<6) | (ADRESL>>2);

т.е. отбрасываем "прыгающие" два младших бита...

Vovka!, вы написали глупость!!!

При левом выравнивании 6 младших битов ADRESL читаются как '0'. Младшие биты результата лежат в bit7 и bit6.

Нечего вычислять! Используем только ADRESH!

Недосмотрел, извиняюсь!

Изменено пользователем Сёха

По всем вопросам в Скайп... sergey.boreysha

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

Вовка, так про расчет 8ми бит я понял, у меня даже получилось в протеусе уже. (не знаю зачем вы сдвигаете, я просто совершил метаматические действия с ADRESH, там ведь и хранятся 8 бит)

Сеха, можно тогда прямые ссылки на это? Мне бы про то, что могут храниться больше 16 бит и про то, что чем меньше битность - тем стабильнее.

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

Vovka!, вы написали глупость!!!
Это он написал для правого выравнивания и отброса 2-х младших битов, с занесением результата в 8-ми битную переменную.
Ссылка на комментарий
Поделиться на другие сайты

Алекс, я попробовал тот пример и у меня все нормально --> 2 знака после запятой.

Чем больше младших бит будете отбрасывать, тем стабильнее будет результат измерения. --- почему? я не понимаю, объясните.

Так вы дайти мне прямую ссылку где про это написано прямо, чтобы я прочел. Я ничего подобного не нашел.

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

Какая ссылка ? Чего читать ?

Повторюсь :

Это не нужно знать, это логично понятно.

Возьмите линейку, начертите прямую линию карандашом, длиной "от балды". Потом измерьте линейкой этот отрезок с разрешениями в 0.001, 0.01, 0.1, 1, 10 мм. Какой результат будет самый точный, и какой неточный ?

Ну неужели это логично не понятно ?

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

Vovka!, вы написали глупость!!!

Это он написал для правого выравнивания и отброса 2-х младших битов, с занесением результата в 8-ми битную переменную.

Правильно!

Неужели нужно все разжевывать до мелочей??? Или так тяжело сообразить для какого это выравнивания?

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

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

Мне бы "физическое" объяснение, а не логическое.

мдя... :vava: Какое ещё такое физическое ? :crazy:

Я Вам привёл пример с линейкой. Что в нём непонятного ?

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...