Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.04.2007, 09:57
|
|
Частый гость
Регистрация: 09.04.2007
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Проблема с функцией ftoa() в CodeVisionAVR
Замучился с функцией ftoa() в CodeVisionAVR. Последняя цифра выводится неправильно. Две недели не могу найти почему. Пожалуйста, помогите найти в чём ошибка.
Вот код:
void main(void)
{
int ACP;
float U;
char *stroka;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// initialize the LCD
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("Ubort= ");
while (1)
{
lcd_gotoxy(3,1);
ACP = read_adc(0);
U = (float)ACP * 2500.0 / 1023.0 * 0.01;
ftoa(U,2,&stroka);
lcd_puts(&stroka);
};
}
А вот пример того, каков результат:
-- Прилагается рисунок: --
|
|
|
|
25.04.2007, 10:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
я не знаю, как там в визион, а вообще-то строка должна заканчиваться 0 значением. вычисли размер строки - и вконец принудительно втули 0.
Это не флоат проблема, а преобразование флоат- строка.
для проверки - после ftoa напиши stroka[4] =0;
|
|
|
|
25.04.2007, 10:16
|
|
Частый гость
Регистрация: 09.04.2007
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
я не знаю, как там в визион, а вообще-то строка должна заканчиваться 0 значением. вычисли размер строки - и вконец принудительно втули 0.
Это не флоат проблема, а преобразование флоат- строка.
|
Внутри функции ftoa() последним оператором строка закрывается нулём:
*str=0;
(файл stdlib.lib)
Причём если указать вывод, например, 3 знаков после запятой, то искажены бывают 2 последних знака. Меняешь значение на АЦП и иногда(!) знаки отображаютя корректно.
|
|
|
|
25.04.2007, 10:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Как именно искажены ?
А игрался - например, повысить разрядность флоат в установках компилятора, сделать размер массива чар фиксированным - char stroka[6].
Какая реакция ?
|
|
|
|
25.04.2007, 10:22
|
|
Частый гость
Регистрация: 09.04.2007
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
Как именно искажены ?
|
Выводятся не те символы из таблицы символов (не с тем кодом символа). Т.е. может быть буква, значёк и т.д.
|
|
|
|
25.04.2007, 10:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
За ДВЕ недели можно было написать преобразование без этой функции с посимвольным выводом
avr123.nm.ru/z5.htm
Можно проверить в VMLAB - может симулятор что-то не так делает.
Можно перед
ftoa(U,2,&stroka);
писать разные числа и смотреть что не верно преобразуется.
т.е. из проги пока оставить только проблемный участок.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
25.04.2007, 10:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
да, похоже, что флоат, раз разрядность играет роль. Сколько битов на флоат отводится ?
А что будет, если формулу записать не одним выражением, а двумя ?
//-------------------------------------------
Перечитал посты... А что будет, а если, а поиграться...
Интересно, это лечится или уже диагноз...
//--------------------------------------------
Отпиши результат, у меня такое не встречалось - интересно...
|
|
|
|
25.04.2007, 16:32
|
|
Частый гость
Регистрация: 09.04.2007
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
За ДВЕ недели можно было написать преобразование без этой функции с посимвольным выводом
avr123.nm.ru/z5.htm
|
Можно вообще все библиотеки переписывать, только ЗАЧЕМ?
Сколько я искал в инете описания такой проблемы не нашёл. -› Значит проблема только у меня. -› Значит я что-то не так делаю. Ну неужели никто не использовал это функцию для вывода значения на LCD? НЕ ВЕРЮ! Может кто приведёт пару строк использования ftoa() из своих проектов?
|
|
|
|
25.04.2007, 17:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
В чем моделировал? Если в протеусе, выложи, я завтра посмотрю.
|
|
|
|
25.04.2007, 17:49
|
|
Частый гость
Регистрация: 09.04.2007
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
В чем моделировал? Если в протеусе, выложи, я завтра посмотрю.
|
Использованы инструменты:
кодирование - CodeVisionAVR C Compiler v1.25.3 ;
моделирование - AVR Simulator IDE v1.25 .
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:35.
|
|