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

Msp430, float в char


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

Делаю спидометр и одометр, все значения и расчеты делаю в типе данных float (для точности),  но для вывода нужно символьный тип данных char. Я новичок в этом все, может кто подскажет как это сделать, насколько я понимаю float нужно превратить в строку, и по символьно отправлять на lcd.

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

8 минут назад, Vlad Kosten сказал:

float нужно превратить в строку

В том пакете и том языке, на котором вы пишете, есть готовая функция перевода float в строку. Поищите в "Хелпе".

Convert float value to string in C.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

2 минуты назад, Vlad Kosten сказал:

все значения и расчеты делаю в типе данных float (для точности)

флоат ну ни как не добавляет точности. 

Цитата

Не нужно знать внутреннюю компоновку чисел с плавающей запятой. Все, что вам нужно, это принцип пигментной скважины и знание того, что int и float имеют одинаковый размер.

int - это 32-разрядный тип, для которого каждый бит-шаблон представляет собой отдельное целое число, поэтому существуют значения 2 ^ 32 int.

float - это 32-разрядный тип, поэтому он имеет не более 2 ^ 32 различных значений.

Некоторые float представляют нецелые числа, поэтому значений <2 > 32 float, представляющих целые числа, меньше.

Поэтому различные значения int будут преобразованы в один и тот же float (= потеря точности).

Аналогичные рассуждения можно использовать с long и double.

 

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

@IMXO  Может я не прав, но радиус колеса указываю в М, от этого  длина окружности умноженная пи  тоже будет в метрах(все значения в дробях),  но выводить нужно км/ч. Я думал что int округляет а float учитывает это значение. 

@Lexter Не могу найти, но все равно спасибо 

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

38 минут назад, Vlad Kosten сказал:

Си

Ну если в библиотеке стандартных функций там действительно ничего такого нет, попробуйте вот так, например, или вот так: Convert a floating point number to string in C.

Форум конечно хорошо, но не стесняйтесь и пользоваться поиском.

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

@Lexter  Я просто над этой темой сижу уже несколько часов и писать на форум меня может заставить только безысходность.  Большое спасибо за помощь.

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

1 минуту назад, Vlad Kosten сказал:

Я просто над этой темой сижу уже несколько часов

И что в этом уникального? Так оно обычно и происходит. :)

Ну так сдвинулись с "мёртвой точки", или всё равно не получается?

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

Вроде нашел проект в англоязычном сегменте интернета, там есть похожая ситуация. Но буду разбираться уже завтра. Ещё раз спасибо.

 

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

4 часа назад, Vlad Kosten сказал:

Может я не прав, но радиус колеса указываю в М, от этого  длина окружности умноженная пи  тоже будет в метрах(все значения в дробях),  но выводить нужно км/ч. Я думал что int округляет а float учитывает это значение. 

 

Да, Вы не правы.

Метры отличаются от сантиметров или миллиметров (микрометров, нанометров...) только расположением точки.  То есть если домножить метры и число ПИ на 10 (100, 1000, 10000,...), а результат умножения округлить путем перемещания точки на любую интересующую Вас позицию, то можно получит ЛЮБУЮ наперед заданную точность - все зависит от разрядности ЦЕЛОЧИСЛЕННЫХ вычислений.

Флоат - это не про точность. Точность 32-разрядного флоата НИЖЕ точности 32-разрядного целого, патамушта мантисса у него 24-разрядная. А точность определяется мантиссой. Флоат - это про ДИНАМИЧЕСКИЙ ДИАПАЗОН. У спидометра динамический диапазон можно определить как отношение максимальной измеряемой скорости к минимальному дискрету измерений. То есть пусть 300 км/ч/1км/ч=300. Это всего 9 разрядов бинарного числа.  То есть обычного целочисленного  16-разрядного unsigned int хватит для вычислений  с большим запасом на округление.

Таким образом. введенный в МИЛЛИМЕТРАХ радиус колеса (точку просто фиксируем в нужной позиции на экране и будут отображаться метры) мы умножаем на число ПИ умноженное на 16384, а результат умножения тут же округляем путем деления на 16384  ПРОСТЫМ СДВИГОМ и, вуаля, имеем длину окружности в миллиметрах... Естественно, что при умножении надо привести типы к 32-разрядам, но результат после сдвига вернуть к 16.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

4 часа назад, my504 сказал:

мы умножаем на число ПИ

а если еще почитать Вики , то  355/113 это Пи с точностью до шестого знака,  и вообще ни осталось никаких дробных чисел...

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

на 113 надо делить ЯВНО, а сдвиг на некоторое число разрядов сделать гораздо проще и быстрее.

и не обязательно до шестого знака, можно и немного меньше.

3217 / 1024 = 3,1416, чего хватит "за глаза". это ошибка 0,00028%.

а 1024 - это сдвиг на 10 разрядов.

и даже если взять 804 / 256 =  3,140625 дает ошибку всего 0,03%, чего тоже достаточно с избытком.

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

Мудрость приходит вместе с импотенцией...

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

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

4 часа назад, Starichok сказал:

ошибку всего 0,03%

Неправильно подсчитал :)
100*PI = 314.159..
(100*804)/256 = 314.0625
Потеря = 0.1 от 100. А это не 0.03%, а 0.1% :)

Хотя, в большинстве случаев, этого более чем достаточно.

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

потеря 0,1 от 314,159.

а не от 100.

Мудрость приходит вместе с импотенцией...

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

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

А какова ошибка измерения радиуса колеса? С какой точностью мы можем утверждать о диаметре колеса? Начиная от какой-то точности, чтобы обеспечить требуемую точность результата нам потребуется учесть давление в шинах, их износ и вес автомобиля с пассажирами и рузом. Получается у нас диаметр колеса - плюс-минус лапоть, а мы переживаем за точность значения числа Пи до 6-го знака и точность вычислений? Мой велокомпьютер настроеный на глаз(при постоянном давлении шин, постоянном весе, когда добавляю свой вес к велосипеду - шина проседает минимум на 5мм а то и больше, что даёт 1.5 см на оборот, или 7.5 метров разницы на километр пути) даёт погрешность +-100м на 10км пути. Смартфонный GPS-приёмник в режиме одометра даёт разброс ещё больше. Считайте, прикидывайте... нужна ли точность в 6 знаков?

Учение - изучение правил. Опыт - изучение исключений.

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

диаметр колеса - это отдельная "песня".

а пока идет разговор о простом умножении на число Пи, без применения плавающей точки.

и поскольку 804 делится на 4, то мой вариант можно еще упростить в плане уменьшения числа сдвигов вправо.

и тогда остается 201 / 64 = 3,140625, 

умножаем на 201 и потом делаем 6 сдвигов вправо.

Мудрость приходит вместе с импотенцией...

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

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

1 час назад, Starichok сказал:

потеря 0,1 от 314,159.

а не от 100.

Ну, это смотря с какой стороны посмотреть :)
Ну да ладно, в любом случае, в некоторых моментах и такой точности за глаза...

40 минут назад, Starichok сказал:

и тогда остается 201 / 64 = 3,140625, 

умножаем на 201 и потом делаем 6 сдвигов вправо.

По сути, нет разницы, на 804 умножать, или на 201. Умножение всё равно имеет место быть. А вот на 256 делить гораздо удобнее, чем на 64.

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

26 минут назад, Alex сказал:

это смотря с какой стороны посмотреть

с любой стороны.

а если бы это было число 31415,9?

и тогда у тебя ошибка в 0,1 тоже составила бы 0,1 %?

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

если на ассемблере, то проще просто отбросить младший байт - деление на 256.

а если на Си, то все равно придется писать оператор сдвига вправо. и на Си уже не имеет значение, какое число написать разрядов в операторе сдвига.

Мудрость приходит вместе с импотенцией...

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

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

6 часов назад, Starichok сказал:

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

Ага, в школу отправь меня ещё, класс в 3-ий :)
 

6 часов назад, Starichok сказал:

с любой стороны.

а если бы это было число 31415,9?

и тогда у тебя ошибка в 0,1 тоже составила бы 0,1 %?

Сам понял что спросил ?
Или просто поговорить хочется ? :)

PS: Утверждать, что нужно брать процент не от одного числа, а от другого - равносильно обратному утверждению. Уверен, что истина именно за твоим ?

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

14 часов назад, Alex сказал:

100*PI = 314.159..
(100*804)/256 = 314.0625
Потеря = 0.1 от 100. А это не 0.03%, а 0.1%

а ты сам-то понял, что написал?

и даже в третьем классе никто и никогда такую глупость не скажет ...

Мудрость приходит вместе с импотенцией...

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

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

8 часов назад, Starichok сказал:

а ты сам-то понял, что написал?

Ровно как и ты.

Ещё раз. Твоё мнение о вычислении процентов ничем не отличается от моего. Абсолютно ничем ! По этому я и написал :

20 часов назад, Alex сказал:

смотря с какой стороны посмотреть


Так же, я попытался замять эту тему словами :

20 часов назад, Alex сказал:

Ну да ладно, в любом случае, в некоторых моментах и такой точности за глаза...


Но ты продолжаешь бить себя в грудь, доказывая, что твоё мнение единственное правильное. Причём, ещё и с хамством.
Не делай этого. Я тоже могу фыркнуть и на ... послать тебя тут при всех. Просто потому, что мне так захотелось.

PS: У меня всё. Диалог считаю закрытым.

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

3 часа назад, Alex сказал:

доказывая, что твоё мнение единственное правильное

это не моё мнение - это школьное правило вычисления процентов от числа.

и ты не единственный, кто вместо признания своей ошибки выворачивает всё наизнанку и делает виноватым оппонента.

и я тоже на этом считаю диалог закрытым.

Мудрость приходит вместе с импотенцией...

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

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

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

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

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

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

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

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

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

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

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

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