Обсуждаем контроллеры компании Atmel.
Ответить

Перевод float в string

Чт апр 12, 2018 21:18:11

Доброе время. Делаю вольт-омметр на attiny861a . Настроил ацп на внешнее напряжение 2.5в . Т.к. в 861 нет usart , решил выводить результаты на lcd дисплей.

Всё настроел , начинаю проверку и начал выводится бред.

При отсутствии напряжения 0 , при подаче -10240 .

Как я понял это из-за неправильного перевода дроби в строку. Но при всех попытках это наилучший результат.

Проект прилагаю.
Вложения
Project_1.rar
(50.62 KiB) Скачиваний: 228

Re: Перевод float в string

Чт апр 12, 2018 22:13:55

Если Вам лень выложить код сюда , конечно правильно оформив, в нужные тэги, не весь, а только проблемное и под спойлер с пояснениями, то почему будет не лень другим читать Ваш проект? Я так думаю, что очень большая часть формчан не будет его смотреть. Это дело Ваше конечно, так, совет.

Вопрос. В каком диапазоне ожидаемый результат ? То есть, зачем Вам float? Код Ваш не смотрел.

Re: Перевод float в string

Пт апр 13, 2018 05:23:20

лучше использовать целые числа, а запятую держать "в уме" (и рисовать на дисплее принудительно) т.е. 162 это 1.62в например,
причём желательно (особенно если результат пойдёт на табло) чтобы такая кратность получалась уже при выходе с АЦП (резистивными делителями на входе) тогда не будет эффекта что счётчик проскакивает показания (например 1.62в затем 1.64в, а 1.63 не покажет ни при каких входных напряжениях)

Добавлено after 41 minute 5 seconds:
даже лучше начать с диапазона (сначала очертить границы, чтобы расстояние между ними было кратно 1000-1023 ("хвосты" можно не отображать), и вот на эту кратность и домножать результаты измерения.
ПС. код пока не смотрел :) (посмотрю в течение часа).

Добавлено after 43 minutes 38 seconds:
посмотрел. А что, резисторы у Вас "на горячую" меняются? - почему под них переменные выделены? не проще их задефайнить?

Добавлено after 1 minute 1 second:
ничего, такого, что бы могло потребовать плавающей точки не вижу...

Re: Перевод float в string

Пт апр 13, 2018 06:06:38

Спойлерлучше использовать целые числа, а запятую держать "в уме" (и рисовать на дисплее принудительно) т.е. 162 это 1.62в например,
причём желательно (особенно если результат пойдёт на табло) чтобы такая кратность получалась уже при выходе с АЦП (резистивными делителями на входе) тогда не будет эффекта что счётчик проскакивает показания (например 1.62в затем 1.64в, а 1.63 не покажет ни при каких входных напряжениях)

Добавлено after 41 minute 5 seconds:
даже лучше начать с диапазона (сначала очертить границы, чтобы расстояние между ними было кратно 1000-1023 ("хвосты" можно не отображать), и вот на эту кратность и домножать результаты измерения.
ПС. код пока не смотрел :) (посмотрю в течение часа).

Добавлено after 43 minutes 38 seconds:
посмотрел. А что, резисторы у Вас "на горячую" меняются? - почему под них переменные выделены? не проще их задефайнить?

Добавлено after 1 minute 1 second:
ничего, такого, что бы могло потребовать плавающей точки не вижу...


Не стоит перед сном , вспоминал схему подключения и не туда напряжение подавал. Сейчас работает

Re: Перевод float в string

Пт апр 13, 2018 06:25:39

я не говорю, что работать не будет, я говорю, что флоат там - лишнее: и места больше занимает и обсчитывать тяжелее

Re: Перевод float в string

Пт апр 13, 2018 07:53:09

я не говорю, что работать не будет, я говорю, что флоат там - лишнее: и места больше занимает и обсчитывать тяжелее


Тогда такой вопрос , как с опорным напряжением 2.5в получить входное напряжение не используя тип float ? Все примеры что видел использовали его.

Re: Перевод float в string

Пт апр 13, 2018 08:00:18

Если Вы разберете что из себя представляет число с плавающей запятой, то Вы увидите, что основное назначение такого формата - это охватить огромный диапазон. От бесконечно малого числа, до бесконечно большого. "Бесконечно" конечно же не буквально.

Допустим Вам нужен результат от 0 до 500 с двумя знаками после запятой. Тогда вам хватит двухбайтного беззнакового целочисленного формата.
Например число 499,99 отлично будет лежать в памяти как 49999. При выводе на экран не забыть воткнуть в нужное место запятую

Re: Перевод float в string

Пт апр 13, 2018 08:16:57

Тогда такой вопрос , как с опорным напряжением 2.5в получить входное напряжение не используя тип float ? Все примеры что видел использовали его.

переведите вольты в милливольты, получите 2500 mV. Вполне себе целое число. А про точку вам тут уже сказали

Re: Перевод float в string

Пт апр 13, 2018 09:07:40

код не смотрел. А что std::to_string(value); уже не работает? У меня выводит....

Re: Перевод float в string

Пт апр 13, 2018 10:18:49

код не смотрел. А что std::to_string(value); уже не работает? У меня выводит....

В С++17 есть to_chars/from_chars которые не используют локаль, динамически не выделяют память, не бросают исключения. Правда в моем gcc 7.2 их еще нет, ждем gcc 8... А to_string не для эмбедда, там и так наверно килобайт 20 добавится при том, что у TC в тиньке всего 8КБ, причем это при выключенных эксепшенах, т.е. без возможности отлавливать потенциальные ошибки...

Re: Перевод float в string

Пт апр 13, 2018 11:29:51

В С++17 есть to_chars/from_chars которые не используют локаль, динамически не выделяют память, не бросают исключения. Правда в моем gcc 7.2 их еще нет, ждем gcc 8... А to_string не для эмбедда, там и так наверно килобайт 20 добавится при том, что у TC в тиньке всего 8КБ, причем это при выключенных эксепшенах, т.е. без возможности отлавливать потенциальные ошибки...

Ну у меня флеша в чипе 256к :))) А так - можно и ручками процедурку написать, делал в одном проекте.

Re: Перевод float в string

Сб апр 14, 2018 16:54:47

мда , ну и нафиг эту тини , ацп сгорел непонятно как. То есть всё работало , вырубил , включил ещё раз всегда приходит значение 1023.

Re: Перевод float в string

Сб апр 14, 2018 19:09:08

мда , ну и нафиг эту тини , ацп сгорел непонятно как. То есть всё работало , вырубил , включил ещё раз всегда приходит значение 1023.

думаете ацп в "не тини" не сгорел бы?

Re: Перевод float в string

Вс апр 15, 2018 12:58:01

Ярослав555,
Вопрос в другом состоит : 1) Почему ? В действительности ничего выше напряжения питания не подавал . 2) Уже не вижу смысла делать , выбрал тини 861 только из-за размеров , но когда ацп сдох , покупать ещё 1 не охото т.к. цена в местном чип и дипе на неё выше чем на мегу328.

Re: Перевод float в string

Вс апр 15, 2018 14:15:29

1) Почему ? В действительности ничего выше напряжения питания не подавал .

1. Статический заряд накопленный в теле от одежды.
2. От чего питаем схему?

Re: Перевод float в string

Вс апр 15, 2018 15:50:34

1. Статический заряд накопленный в теле от одежды.
2. От чего питаем схему?


От usbasp , разве от статики не должна была выйти из строя вся тини ?

Re: Перевод float в string

Вс апр 15, 2018 16:03:12

От usbasp , разве от статики не должна была выйти из строя вся тини ?

А это как повезет.
А розетка имеет контакт заземления? 110В с корпуса системника на землю сняты? или болтаются на минусовом проводе, а Вы пальцем ткнули и сожгли вход АЦП?

Re: Перевод float в string

Вс апр 15, 2018 16:10:29

А это как повезет.
А розетка имеет контакт заземления? 110В с корпуса системника на землю сняты? или болтаются на минусовом проводе, а Вы пальцем ткнули и сожгли вход АЦП?

Вот не знаю всё работало , решил передохнуть , отрубил её , минут через 30 включаю , а ацп мёртв.

Re: Перевод float в string

Вс апр 15, 2018 16:29:42

Ничего - это только начало. Сколько еще спаленых микрух впереди :))) . Я недавно случайно разрядил кандер с +100В через заземленное жало паяльника. Умерла мега8 в устройстве, мега8 в аспе, алегровский датчик тока (стоит как мега примерно) и вишенкой на торте стал сожженый юсб хаб в мониторе, который по сути спас весь системник. Итого я попал где-то на 1000р. А у Вас тинька какая-то. Радиолюбительство затратная штука - у меня с каждой зп уходит под 2к русскими на радиодетали. А еще иногда покупается инструмент... так что привыкайте)))

Re: Перевод float в string

Вс апр 15, 2018 18:00:27

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

Просто 1 дело , когда железно сам виноват что прибор сдох , а другое когда оно само сдохло.
Ответить