Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80

Как преобразовать значение двухполярного АЦП HX711 в однополярное

21.12.2021, 21:30. Показов 1262. Ответов 14

Студворк — интернет-сервис помощи студентам
Всем привет. Имеется АЦП HX711, использую для тензодатчика, и пытаюсь считывать из него значение. Но в даташите указано что минимальное значение 800000h а максимальное 7FFFFFh. И это вводит меня в ступор. Как правильно сложить данные чтоб получить полный диапазон.
Можно в тупую отбросить старший бит и работать в однополярном режиме. Но что то мне кажется что это не правильно.
Подскажите как быть?
Может сделать из знакового числа и без знаковое?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2021, 21:30
Ответы с готовыми решениями:

Как преобразовать однополярное напряжение в +\-
Я предполагаю что мой вопрос действительно детский. Есть некий источник напряжения. Напряжение медленно меняется в пределах от 0 до 18...

Библиотека АЦП HX711
Здравствуйте. Собрал весы на Atmega8 и АЦП HX711. Весы постоянно выдают число 8388607. Я пробовал менять подключение тензодатчиков и...

Как программно преобразовать диапазон входных напряжений ацп из 0-5 в в -2,5.+2,5?
На АЦП подается периодическое напряжение 0-5 В, а нужно обрабатывать -2,5..+2,5 В, то есть опустить уровень нуля на 2,5 В. АЦП 12-битный.

14
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
21.12.2021, 21:39
man дополнительный код
0
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
21.12.2021, 21:43  [ТС]
я прочитал про него. только что мне это даст? вот допустим у меня 0 был на отметке +20 кода ацп. А потом датчик разгрузили и значение стало -30 кода ацп. Что мне нужно сделать дополнительным кодом? прибавить его к основному?
Или может нужно сделать беззнаковое число?
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
21.12.2021, 22:08
Сдвинуть либо на байт влево чтобы получилось int32_t, либо на байт вправо чтобы получился int16_t, либо вообще на 2 байта вправо чтобы получилось int8_t.
Еще можно расплодить старший бит ответа на "пустые" биты переменной и получить знаковое число вообще любой разрядности.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
21.12.2021, 23:46
Цитата Сообщение от Ramzess1488 Посмотреть сообщение
вот допустим у меня 0 был на отметке +20 кода ацп. А потом датчик разгрузили и значение стало -30 кода ацп.
20-(-30) = 20+30 =50
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
22.12.2021, 10:42
Простое расширение знаковых int24_t до int32_t
C
1
2
3
int32_t adc = 16676716;
if( adc & 0x800000 )adc |= 0xFF000000;
printf("%"PRId32"\n", adc);
0
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
22.12.2021, 21:55  [ТС]
По итогу я сделал следующее: дочитал даташит. а там в примере просто инвертируют знаковый бит.
И это работает. вот допустим у нас число -20. значит нам приходит 0х94, инвертируем знаковый бит и получаем 20.
теперь нам приходит - 100, а это в хексе 0хЕ4, опять инвертируем старший бит и получаем 100. когда нам приходит 127 то если увеличить код ацп на один то придет уже положительное число. и в этот момент мы инвертируем старший бит и получаем 128
это правильный подход?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
22.12.2021, 22:58
Цитата Сообщение от Ramzess1488 Посмотреть сообщение
И это работает. вот допустим у нас число -20. значит нам приходит 0х94, инвертируем знаковый бит и получаем 20.
обоснуй
дополнительный код это инвертирование всех битов и прибавление 1
20 = 0001 0100
инв 1110 1011
+1 = 1110 1100
итого -20 это 0xEC
откуда 0х94?
0
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
22.12.2021, 23:06  [ТС]
я не говорил за обратный код. я инвертирую только знаковый бит.
когда пришло 1001 0100 то получаем 0001 0100 что и есть 20.
по итогу получается что знаковое -127 = моему без знаковому 0
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
22.12.2021, 23:39
Цитата Сообщение от Ramzess1488 Посмотреть сообщение
когда пришло 1001 0100 то получаем 0001 0100 что и есть 20.
а в первом письме было
Цитата Сообщение от Ramzess1488 Посмотреть сообщение
Но в даташите указано что минимальное значение 800000h
так знаковый бит то 7 или 23?
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
23.12.2021, 09:15
Цитата Сообщение от Ramzess1488 Посмотреть сообщение
по итогу получается что знаковое -127 = моему без знаковому 0
А самое большое отрицательное значение 800000h у вас тоже нулем окажется?
0
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
23.12.2021, 19:22  [ТС]
ну да. и это единственный ноль. так как старший бит перевернется.
хотя по факту нужно отследить что произойдет перед тем как переменная станет 128. там же есть 0 и -0, интересно что микросхема выдает в этих случаях.
Цитата Сообщение от ValeryS Посмотреть сообщение
так знаковый бит то 7 или 23?
для упрощения я взял старший 7 бит. а так это 24 бит
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
23.12.2021, 19:27
Судя по документации, у нее единственный ноль, который 0. А тот, который считаете нулем вы - наиболее отрицательное число.
Но тут лучше взять да проверить: плавно менять напряжение на входе и смотреть как именно выход будет переходить через ноль. По описанию, повторяю, там обычный дополнительный код. Но кто их, разработчиков, знает, вдруг и правда сделали как вы думаете - отделили знак числа от модуля.
0
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
23.12.2021, 20:32  [ТС]
в скором времени проведу такой опыт.
а где вы увидели что там один ноль. что то я не нахожу такого в даташите.?
А вот по поводу того зачем я делаю именно так, сам не знаю. так для моего мозга проще понимать как обработать данные.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
24.12.2021, 09:25
Цитата Сообщение от Ramzess1488 Посмотреть сообщение
а где вы увидели что там один ноль. что то я не нахожу такого в даташите.?
Там пишут что наиболее отрицательное значение 800000h (FFFFFFh) а не , а наиболее положительное 7FFFFFh. Больше всего это похоже именно на дополнительный код.
Цитата Сообщение от Ramzess1488 Посмотреть сообщение
так для моего мозга проще понимать как обработать данные.
Почитайте все-таки что такое допонительный код и чем он лучше разделения знака и модуля. SPOILER: тем, что сложение и вычитание делаются как с беззнаковыми числами, без лишней обработки знакового бита.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2021, 09:25
Помогаю со студенческими работами здесь

Как отказаться от двухполярного питания?
данная схема управляет катушкой пропорционального клапана гидрораспределителя. Реверс не нужен. На выходе нужно получить (при изменении...

Arduino + тензодатчик + HX711 :: как разогнать устройство
Здравствуйте, уважаемые форумчане! :) Возникла необходимость реализовать специфичные весы для личных нужд) Выбор пал на схему:...

Как найти максимальное значение АЦП за секунду?
Без использования массива

Как считать значение АЦП из регистра. Atmega 8
Очень простая программа, которая измеряет напряжение от 0 до 5 вольт. Проводник подключен с выводу PC0, соотвественно АЦП ADC0. Как...

Как взять значение с АЦП звуковой карты ?
И в где брать третий байт данных если у меня 24 битная карта ? Спасибо. Не могу найти информации...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru