реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Атмел коддвизион вывод на жк экран, Вывод переменных типа floаt
Andrew_k5
сообщение Oct 4 2009, 07:31
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 15-02-07
Из: Днепропетровск
Пользователь №: 25 387



Не получается вывести переменную с дробной частью. %е не работает.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 4 2009, 07:41
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



А %f ?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 4 2009, 08:15
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Если один знак после запятой, то так:
Код
snprintf(&buff[0], BUFF_SIZE, "%#.1f",  x);


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Andrew_k5
сообщение Oct 4 2009, 09:02
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 15-02-07
Из: Днепропетровск
Пользователь №: 25 387



Если %f -ничего не выводит, если %#.1f - выводит .1f
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 4 2009, 09:30
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Вероятно не включена поддержка типа float для printf,sprintf... функций.
Найдите как её включить. Или попробуйте использовать функции ftoa или dtostrf.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Andrew_k5
сообщение Oct 4 2009, 09:58
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 15-02-07
Из: Днепропетровск
Пользователь №: 25 387



Спасибо, получилось. Включил в codevision. Также пришлось подключить mаth.h что съело 15 кб кода.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 5 2009, 06:55
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Andrew_k5 @ Oct 4 2009, 13:58) *
Спасибо, получилось. Включил в codevision. Также пришлось подключить mаth.h что съело 15 кб кода.
Нет, это не mаth.h съело 15 кб кода, т.к. это всего-лишь заголовочный файл.
А съели прилинкованные функции, необходимые для printf("%f",....).
Если хотите уменьшить размер кода, используйте предложенные мной ранее функции (dtostrf или ftoa).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
KCA
сообщение Dec 12 2009, 13:43
Сообщение #8





Группа: Участник
Сообщений: 12
Регистрация: 6-07-09
Пользователь №: 50 949



demiurg_spb
Вы писали:
Если хотите уменьшить размер кода, используйте предложенные мной ранее функции (dtostrf или ftoa).

А немогли бы обьяснить поподробнее как их использовать?

Я в программе вольтметра , для форматирования вывода на LCD использую sprintf , так тоже хотелось бы сократить размер кода.
Пробовал itoa но ничего не вышло.
Спасибо.
Go to the top of the page
 
+Quote Post
-JonnS-
сообщение Dec 12 2009, 20:25
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-05-07
Из: Болгария
Пользователь №: 27 577



Цитата(KCA @ Dec 12 2009, 15:43) *
А немогли бы обьяснить поподробнее как их использовать?

Здесь оптимизированая Ftoa, с примерами изпользования.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 12 2009, 20:30
Сообщение #10


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(KCA @ Dec 12 2009, 16:43) *
А немогли бы обьяснить поподробнее как их использовать?

Цитирую сам себя с небольшими правками:
Вероятно включена поддержка типа float для printf,sprintf... функций.
Найдите как её отключить. Тогда не будет линковаться ничего лишнего.

Я ответил на вопрос?
Если нет, то сформулируйте Ваш вопрос конкретнее (чего хотите, что делали, какие результаты).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
KCA
сообщение Dec 13 2009, 09:22
Сообщение #11





Группа: Участник
Сообщений: 12
Регистрация: 6-07-09
Пользователь №: 50 949



-JonnS-
demiurg_spb


Спасибо что не прошли мимо!
Я только только начинаю осваивать программирование микроконтроллеров.
Выбрал Мега 16, КОДЕВИЖН.
Вольтметр я писал не сам, а с помощью Евгения ( http://eugenemcu.ru/ ), да собственно почти весь код
написал он!
Злоупотреблять его терпением нехотелось бы, поэтому обратился сюда.

Для преобразования результата измерения и отображения на индикаторе ( WH1602 (HD44780)) я выбрал функцию sprintf, как наиболее
универсальную и мощную, а так же потому что нашел в инете статью с подробным описанием ее применения (см. вложение).
Вольтметр работает. Размер кода получился 15,5% от памяти программ.
Но! На разных форумах встречаются высказывания отом что размер кода можно существенно сократить если применить itoa,
вот только толкового обьяснения я не смог найти.
Во вложении есть фрагмент статьи по применению sprintf и картинка настроек моего компилятора.
Вот, примерно такое же, обьяснение, вкратце конечно, я и хотел бы увидеть.
Если это не очень сложно, то пожалуйста подскажите как сделать преобразование результата измерения (оно в ADCW) из двоичного в десятичное
с помощью itoa.

И еще. Огромная проблема с английским языком!!! Поэтому пожалуйста не отсылайте на англоязычные публикации.
Начинать изучать язык, для меня уже несколько позновато. sad.gif

Заранее Спасибо.

Сообщение отредактировал KCA - Dec 13 2009, 09:47
Прикрепленные файлы
Прикрепленный файл  ____________.rar ( 40.48 килобайт ) Кол-во скачиваний: 28
 
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 13 2009, 15:06
Сообщение #12


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Пользуйтесь поиском. И, так или иначе, изучайте хотябы технический английский.
Без этого никак. Факт!
И снова повторюсь, используйте поиск!!! Вот пример


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
KCA
сообщение Dec 13 2009, 16:20
Сообщение #13





Группа: Участник
Сообщений: 12
Регистрация: 6-07-09
Пользователь №: 50 949



demiurg_spb

А Вы думаете что я все это не читал!?

Читал, изучал, однако ничего не получалось.
Может в настройках компилятора что то не так?
Я ж не просто так картинку вложил, гляньте в нее, может я там чего то не отметил или наоборот отметил не то что нужно?

А что до этого - так или иначе, изучайте хотябы технический английский так я стараюсь.
Но в 53, да и после 22,8 лет в шахте тупееш оч. сильно. Увы! blush.gif
Go to the top of the page
 
+Quote Post
SysRq
сообщение Dec 13 2009, 18:52
Сообщение #14


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Согласно документации cvavr, функция itoa преобразует число в строку, и определена так:
Код
void itoa(int n, char *str)

Показывайте код, посмотрим как вы пытались её использовать. Укажем ошибки, если есть.
Go to the top of the page
 
+Quote Post
KCA
сообщение Dec 14 2009, 08:48
Сообщение #15





Группа: Участник
Сообщений: 12
Регистрация: 6-07-09
Пользователь №: 50 949



Здравствуйте!

Вот кусочек кода (чтобы не загромождать)

CODE
#include <mega16.h>
#include <lcd.h>
#include <stdio.h>
#include <stdlib.h>
.
.
.
unsigned char lcd_buffer[33]; // Буфер LCD-дисплея
unsigned int AdcCode; // Для хранения и обработки результата измерения.

void main(void)
{
.
.
.
while (1)
{
.
.
.
AdcCode=(AdcCode)*(5.0/1024);
AdcCode=(AdcCode>>2); // Убрать два младших разряда из результата.

lcd_clear(); // Очистить экран.
lcd_gotoxy(0,0);
itoa(AdcCode,lcd_buffer,10);
lcd_puts(lcd_buffer);
}
}

Компилятор указывает на ошибку в строке itoa(AdcCode,lcd_buffer,10);
Error: VOLT,1a1.c(80): too many arguments in function call
Ошибка: VOLT, 1a1.c (80): слишком много аргументов в вызове функции

Сообщение отредактировал Omen_13 - Dec 16 2009, 04:02
Причина редактирования: Оформление программы
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st September 2025 - 06:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01487 секунд с 7
ELECTRONIX ©2004-2016