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

Проблема с использованием sprintf при работе с АЦП


illogic

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

Добрый день!
в мк новичок, разбираюсь с ацп, проблема:
хочу значение ADC, переведенное в float (чтоб вольты показывать), запихать в массив char, с целью вывода на дисплей. Для этих целей использую sprintf. Однако он работает как угодно, но не так как надо) В частности, не работает только вариант, который приведу ниже, причем в VS он работает как надо, а в atmel нет.

float fladc = ADC/400;
    char buff[50];
    sprintf(buff, "%f", fladc);
    LCDwrite(buff);

//где LCDwrite это:

void LCDwrite ( char* ch){
        DataPort = 0x00;
    int L = strlen(ch);
    for (int x = 0; x!=L; x++){
        DataPort = *ch++;
        ControlPort |= (1<<RS)|(1<<E);
        ControlPort &= ~(1<<E);
        _delay_us(50);
    }

 

не работает именно %f, если просить его вывести символ/целое число - все работает и выводится на дисплей.
В интересующем меня (и не работающем) случае на экран выводится один "?". 
На форуме впервые, если что не так - обязательно учту :)

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

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

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

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

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

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

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

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

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

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

для начала сравните  размер скомпилированного файла с этой функцией  а потом без... 

... нужно брать ваше float и любым доступным простым способом "вручную" выцарапывать из него "разряды" для отображения.

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

@dasZebra Спасибо :)
Но даже если я не буду использовать эту функцию, остается вопрос - почему не работает то, чисто из любопытства хочется понять.

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

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

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

18 минут назад, illogic сказал:

почему не работает то,

Вот тут показано, как заставить эту функцию работать: надо поставить тик в настройках Atmel STUDIO 6 и добавить библиотеку.

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

13 минуты назад, dasZebra сказал:

эту функцию в МК нельзя использовать.... .не в смысле не буде работать, а просто нельзя. ну почти как на ноль делить

Феерический бред!

Только что, dasZebra сказал:

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

Еще один феерический бред. Причина только одна: по умолчанию проект линкуется с "усеченной" версией форматированного ввода-вывода, без поддержки float. Как лечить - было подсказано @Yurkin2015

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

20 минут назад, dasZebra сказал:

эту функцию в МК нельзя использовать

Вы запретили? Использовать данную функцию можно и она отлично работает. Единственный недостаток - огромный расход флеша МК. Если память критична, можно вообще уйти от float домножив число на 10, 100, 1000, в зависимости от точности,  а потом разбить на разряды обычным делением и сформировать массив char.

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

@Yurkin2015 Благодарю!

в моем случае эта функция действительно увеличивает размер HEX файла с три раза, так что попробую сделать так, как предложил @BARS_:) 

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

Только что, dasZebra сказал:

Доктор тот, кто первым халат одел?

Не надо было снимать. 

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

Только что, illogic сказал:

в моем случае эта функция действительно увеличивает размер HEX файла с три раза

Эта "функция" увеличивает не в разы, а на 1,5-2,5 килобайта. Если ваша прошивка состоит из двух строк - это много, а если из 200 - то уже нормально. А для 2000 будет и незаметно. Эта функция еще и "медленная", что тоже учитывать надо.

Кстати, вас не смущает тот факт, что само применение float в вашем проекте уже тянет на 1,5-2 килобайта прошивки? Попробуйте для смеху заменить float на int и поглядеть, во что превратится ваша прошивка...

И тем не менее, ардуинщики и CVAVR-щики сильно про float не парятся, и, в общем-то, свои задачи успешно решают.

 

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

36 минут назад, BARS_ сказал:

Вы запретили?

было дело....:rolleyes:... и память оно жрет не только для флота... 

9 минут назад, ARV сказал:

Эта "функция" увеличивает не в разы, а на 1,5-2,5 килобайта.

а если той памяти всего 2 килобайта?... 

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

Только что, BARS_ сказал:

А если памяти 8Кб то уже не только заметно, но и недопустимо...

Мне придется повториться...

Только что, ARV сказал:

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

На 8 килобайтах printf и float отлично уживаются. Вы еще скажите, что на Си для attiny13 писать нельзя.

А любое безапелляционное утверждение понижает уровень доверия к вашей компетентности.

Только что, dasZebra сказал:

а если той памяти всего 2 килобайта?

Что это доказывает? Ведь памяти бывает и 128 килобайт, не так ли? Разве отсутствие у вас нужной технической базы оправдывает запрет на применение чего-либо в других случаях?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, ARV сказал:

На 8 килобайтах printf и float отлично уживаются.

Это если программа маленькая. float да, а вот принт в принципе не нужен, сформировать массив для дисплея проще пареной репы.

 

Только что, ARV сказал:

безапелляционное утверждение

А я так ничего и не утверждал.

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

Только что, BARS_ сказал:

А я так ничего и не утверждал.

Разве? А вот это разве не безапелляционное утверждение:

Только что, BARS_ сказал:

если памяти 8Кб то уже не только заметно, но и недопустимо

Утверждение в категоричной форме - это оно самое.

Только что, BARS_ сказал:

принт в принципе не нужен

Вот еще одно утверждение на грани. Не нужен - это сильно, тем более в принципе.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

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

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

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

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

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

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

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

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

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

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