-
Постов
10 921 -
Зарегистрирован
-
Посещение
-
Победитель дней
31
Сообщения, опубликованные Сергей Борщ
-
-
1 минуту назад, manul78 сказал:
Не хочу скатываться в политику
Уже скатились.
1 минуту назад, manul78 сказал:но в новейшей истории РФ известны случаи оплаты из государственного кармана (бюджета, фондов) долгов некоторых
компаний
Долги компаний, вдвое превышающие весь внешний долг государства? Самому не смешно?
-
57 минут назад, manul78 сказал:
Кстати на прошлой неделе муссировали тему что РФ должна Китаю около 120 ярдов$
Кто муссировал? Те, кого в гугле забанили?
-
58 минут назад, Tanya сказал:
Так можно или нельзя? Ещё раз уточните, как...
Есть вот такой документ:
-
42 минуты назад, Plain сказал:
По принуждению, результат вряд ли будет.
Ваша манера отвечать в последнее время тоже оставляет желать лучшего. Вы, если беретесть критиковать, обосновывайте. Или не беритесь совсем. Здесь форум для общения, для " обсуждения вопросов проектирования электронной аппаратуры", а не для выпячивания своего чувства собственного величия.
- 1
-
Только что, KnightIgor сказал:
Стесняюсь спросить, но всё же: а что такое "пупок АЦП"?
Единиц младшего разряда АЦП, проще говоря - считанное значение.
-
28.09.2021 в 09:25, AlanSbor сказал:
Понял. Ничего не подписывал. Вечером выложу.
Спасибо. "Дело было не в бобине".
Во-первых, был прав @KnightIgor и у меня была ошибка в коэффициенте перевода пупок АЦП в Гауссы.
Во-вторых, у меня датчик вместе с конденсатором располагается на маленькой платке и довольно толстым метровым кабелем соединяется с основной платой, где запитан от ноги контроллера. Датчики отдавали запаивать на производство, чтобы они оценили - смогут ли ставить их потом серийно. Ну они только датчик и запаяли. А потом монтажник, не сильно задумываясь, припаял кабель, который конструктивно закрывает собой и датчик и конденсатор. В общем без конденсатора с таким длинным кабелем и вялым питанием от ноги контроллера Set/Reset работают ну очень неохотно (почти не работают совсем).
В-третьих, нельзя одновременно выставлять DoSet/DoReset и AutoSR_en, если это сделать - в последующих измерениях будут получаться нули. После DoSet/DoReset выставлять AutoSR_en можно.
В-четвертых, бит Sat_sensor несмотря на свое название выставляется только во время автокалибровки. Если же поднести очень мощный магнит во время работы - показания будут какие угодно, но только не максимальное/минимальное значение шкалы. То есть лежащий на датчике магнит, который невозможно одной рукой оторвать от листа железа, вполне может показывать 1.5 Гс, 0 Гс и сброшенный Sat_sensor. После убирания магнита показания могут быть совершенно любыми и реакция на слабое поле тоже непредсказуема. Узнать о насыщенни, судя по всему, можно только пропуская ток через встроенную катушку битами St_enp, St_enm или делая периодический self-test, но тогда ни о каком микропотреблении речи уже быть не может. А мне нужно заменить им LIS3MDL в считывателе водяного счетчика со сроком службы 10 лет от одной батарейки. У LIS3MDL таких проблем не было - он при насыщении честно уходил в край шкалы, но сейчас этих LIS3MDL не купить.
В-пятых, отличается от документации вычисление порога в процедуре auto-self-test. И я даже не знаю, кому верить - в документации просто сказано "вычислите 80% от значений ST_(x,y,z), в коде эти значения сначала преобразуются в знаковые с умножением на 32, потом берется их модуль, вычисляется 80% и делится на 8. Может потому, что код от 5603, а документацию я смотрю на 5633 (посмотрел документацию на 5603 - там все то же самое).
23 часа назад, KnightIgor сказал:убедить "дефектный" датчик убрать смещение (думаю, это понимается под "upset") по "дефектной" оси не удается.
В документации 5633 описана процедура программного вычисления и учета смещения:
Цитата- The most accurate magnetic field measurements can be obtained by using the protocol described as follows: Perform SET. This sets the internal magnetization of the sensing resistors in the direction of the SET field.
- Perform MEASUREMENT. This measurement will contain not only the sensors response to the external magnetic field, H, but also the Offset; in other words, Output1 = +H + Offset.
- Perform RESET. This resets the internal magnetization of the sensing resistors in the direction of the RESET field, which is opposite to the SET field (180o opposed).
- Perform MEASUREMENT. This measurement will contain both the sensors response to the external field and also the Offset. In other words, Output2 = -H + Offset.
- Finally, calculate H by subtracting the two measurements and dividing by 2. This procedure effectively eliminates the Offset from the measurement and therefore any changes in the Offset over temperature. H = (Output1-Ouput2)/2.
Note:
- To calculate and store the offset; add the two measurements and divide by 2. This calculated offset value can be subtracted from subsequent measurements to obtain H directly from each measurement.
Я реализовал описанное в note, оно работает. Причем смещения для трех датчиков у меня получились примерно такие (X/Y/Z):
на столе - 17/-418/-8, -163/24/-365, -203/-68/-926
в магнитном поле 5-8 Гс смещение отличается: 3/-416/51, -241/31/-102, -276/-85/-548
Похоже, надо вычислять его заново как минимум при сильном изменении поля, как максимум - при каждом измерении.
-
1 час назад, one_eight_seven сказал:
GCC так не делает
Делает-делает, c -fshort-enums.
1 час назад, jcxz сказал:Даже не просто какого-то конкретного значения, а и сам размер его может быть недостаточным
К счастью, компилятор знает размер enum в точке использования и вполне может определить - влезет в него соответствующий вид целого или нет. Но он этим не занимается, как не занимается подобным и при присваивании char = int, int = long int и тому подобных. В сях (но не в плюсах) просто разрешены неявные преобразования int к enum и все.
Как версия: обсуждаемое предупреждение выдается потому, что если программист делает явное приведение там, где оно и так будет выполнено неявно - то он погроммист и плохо представляет, что он делает .
-
26 минут назад, Tanya сказал:
Проще вращать.
Это если надо "туда-туда". А если "туда-сюда" - вращением не получится (во всяком случае без кривошипа).
-
4 часа назад, firew0rker сказал:
C этим дескриптором такая ошибка:
Вбейте этот дескриптор в HID Descriptor Tool. Он отступами покажет все коллекции и незакрытые будут видны невооруженным глазом. Также там можно в меню выбрать parse descriptor - может быть его отчет натолкнет на какие-то мысли. Или сохраните введенный дескриптор в файл и выложите сюда - подумаем вместе.
-
2 часа назад, dxp сказал:
А "целое в перечисление" - небезопасное, т.к. в перечислении просто может не оказаться соответствующего значения. И тут требуется явное преобразование, т.е. ответственность перекладывается на программиста.
В плюсах. В обычных же сях такое неявное преобразование разрешено.
2 часа назад, dxp сказал:То, что компилятор ругается при включенном предупреждении, имеет к вышесказанному опосредованное отношение
Причем это предупреждение работает только в сях и объективных сях.
Вот тут достаточно внятно написано - зачем это предупреждение и с какими именно проблемами кода оно должно помогать бороться. А именно - с явными приведениями типов в тех местах, где такое приведение не требуется ввиду наличия неявного приведения и ввиду наличия в сях до стандарта 11 года возможности использовать функцию без предварительного объявления, которую компилятор обязан считать возвращающей int. Однако, в таком случае выдается предупреждение об использовании функции без прототипа, которого достаточно для выявления подобных недоработок кода, так что смысла дополнительно включать еще и это предупреждение (а оно может быть включено только принудительно) не видно.
-
1 час назад, MDD сказал:
Конечно в этом случае зеркало будет вращаться на угол немного больше 90 градусов. Не вникал как ведутся измерения в глазу
Что-то мне кажется, что там надо просто сравнительно равномерно двигать зеркало туда-сюда примерно на 90 градусов и люфты роли не играют.
-
12 часов назад, AlanSbor сказал:
Только заметил что копирайт стоит.
Так вы же их за свои не выдаете. Вот если бы их вам дали после подписания соглашения о неразглашении (NDA) - тогда другое дело.
-
37 минут назад, AlexRayne сказал:
да приводится, если это не результат функции.
Можно какое-нибудь подтверждение ваших слов, например - цитату из страндарта?
37 минут назад, AlexRayne сказал:курите Wbad-function-cast
Курите сами.
-
48 минут назад, AlexRayne сказал:
где `disconnect_mode()` - возвращает enum.
Покажите объявление disconnect_mode() и enum. Потому что по правилам языка C enum к int приводится неявно оно должно компилироваться даже без явного приведения.
-
1 час назад, KnightIgor сказал:
неправильная интерпретация 20-ти битного значения из 5633 (может, сильно загрубили результат)
Я вывожу на экран весь обмен и могу глазами смотреть именно отдаваемые данные. Результат с ними сходится.
1 час назад, KnightIgor сказал:скорость опроса датчика выше скорости внутреннего преобразования.
Тоже маловероятно - я считываю данные через 5 секунд после запуска преобразования, а у него самое медленное преобразование - 6.6 мс, причем все три оси оцифровываются последовательно, то есть если бы оно не успевало - результаты оси Z сильно отличались бы. Но нет - они одного порядка.
1 час назад, KnightIgor сказал:Тем не менее, по моей проблеме: у меня же не "замылены" глаза, что проекции ненулевого вектора на систему ортогональных координат не могут быть все нулевыми вне зависимости от ориентации этой системы координат?
У меня 5633 выдает все нули даже с поднесенным магнитом пока не сделаешь selftest. После selftest начинает отдавать отличные от нуля значения, но только со сброшенным Auto_SR_en. Если его выставить в 1 - при поднесении магнита наблюдается небольшой кратковременный всплеск в данных и буквально через 2-3 изменения с выхода снова идут нули. Хотя в документации сказано "This bit is recommended to set to “1” in the application".
-
10 минут назад, AlanSbor сказал:
По ману 5633, у него полная шкала +-30 Гаус и управление чувствительностью в зависимости от выбранного разрешения АЦП.
Я раз пять перечитал документацию от корки до корки, но так и не нашел - где там выбирается разрешение АЦП. Решил, что оно определяется тем, сколько битов разработчик захочет использовать, ибо в таблице параметров есть всего одна строка о разрешении АЦП:
12 минут назад, AlanSbor сказал:было бы интересно перевести переписку в приватный вариант общения
Можно, конечно, но предпочтительнее продолжать здесь - вдруг кому-то еще есть что сказать. Или у кого-то потом появятся точно такие же вопросы и человек через поиск сможет найти ответы в этой теме. Можно попросить модераторов изменить название темы, чтобы оно более точно отражало обсуждаемые вопросы.
-
7 минут назад, AlanSbor сказал:
у меня вроде как получше отвечают
А 5633 вы уже попробовали? У меня они почему-то выдают очень маленькое значение. Магнит, который вводит в насыщение LIS3MDL с полной шкалой в +-16 Гауссов изменяет показания 5633 чуть меньше чем на 1000 единиц в старших 16 битах.
-
5 часов назад, Tanya сказал:
Без обид - имели дело с шаговым двигателем?
А что вас смутило? Работа в упор для шагового двигателя - вполне себе штатная операция. Помните как матричный принтер после включения первым делом отводил печатающую головку в левый край и трещал ей несколько секунд - это оно и есть.
-
3 часа назад, HaJl4uk сказал:
Никому я не собираюсь показывать это устройство.
Чем закончилось для героя мультфильма мы все хорошо помним. Не смеем мешать.
-
29 минут назад, jcxz сказал:
Вообще-то не тот-же. Гибкости - в разы меньше.
Если этот вариант не подходит для каких-то отдельных случаев - это не значит, что его не нужно применять даже в тех случаях, для которых он подходит очень хорошо. Идеальных решений не существует - ваше требует больше писанины и усидчивости (чтобы не забыть LogReleaseOut там, где он необходим).
-
Раз уж пошел разговор не по исходной теме (кстати, может его выделить в отдельную тему?)...
29 минут назад, jcxz сказал:LogCatchOut...()/LogReleaseOut...() - захват/освобождение отладочного вывода через семафор.
Ну то есть закат солнца вручную, "потому что без плюсов". А были бы плюсы и LogCatchOut()/LogReleaseOut() в конструкторе/деструкторе - было бы
{ Log_mutex Mutex; Log.write(.....); Log.printf(.....); ...... Log.new_line(); }
Писанины меньше, головной боли меньше, результат - тот же. "Машина должна работать, а человек - думать" (принцип IBM).
1 час назад, jcxz сказал:А если нужно сформировать строку (или блок строк) несколькими такими вызовами? И чтобы другой процесс не влез в его середину
У меня семафор захватывается по первому выводимому символу, освобождается по "\r\n" (но только это делается не в printf(), а в классе, реализующем собственно вывод). Внутри блока перевожу строку комбинацией "\n\r", которая выглядит так же, но семафор не освобождает. В результате сообщение от одного потока никогда не разрывается сообщением другого без всяких рукопашных CatchOut()/ReleaseOut().
-
1 час назад, jenya7 сказал:
Мне нужно pin compatible
Гляньте GHS 16-SME, ACHS-7121. Но они 5-вольтовые.
-
56 минут назад, haker_fox сказал:
И компилятор предупреждает, что переменная Alex объявлена, инициализирована, но не используется.
а printf() разве не ее использует?
-
22 часа назад, MegaVolt сказал:
P.S. Я в курсе про конечные автоматы, машины состояний,
Видимо не до конца, потому что "машина состояний" - калька с английского "state machine", а правильный русскоязычный термин как раз "конечный автомат". То есть запятая между ними неуместна.
21 час назад, MegaVolt сказал:Начало последовательности судя по тексту автора всегда 5 символов. \033[ если мы нашли эту часть в потоке данных то далее возможны 3 варианта:
Вы описали конечный автомат.
STM32 умер? Заводы закрыты?
в STM
Опубликовано · Пожаловаться
"Вы не понимаете - это другое!"