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

 
 
> Дробная арифметика, Делаю вольтметр
Skaf
сообщение Aug 7 2009, 17:59
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Делаю цифровой вольтметр на AVR ATmega16. Пишу на Си (WinAVR).

После аналого-цифрового преобразования у меня есть переменная

int ADCD с 10-и битным результатом. Мне надо показать число на экране.

Сначала хочу перевести в вольты.

float data = ADCD * 0.0049;

где 0.0049 получилось от 5 / 1024

Потом надо отобразить на индикаторе. У меня есть функция, которая принимает на вход номер знакоместа на LCD и цифру от 0 до 9.

Пытаюсь отобразить целую часть

DrawLCD((int)data, 1);

А на экране получаю 0. Какой-то косяк с умножением на 0.0049 видимо... Подскажите пожалуйста как решить проблему?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Aug 12 2009, 11:32
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
в BCD можно конверировать или разложением на степени 10 (отнимать 10000, 1000, 100, 10, 1 и считать количество) или сдвигами+BCD коррекцией :


Или приведением числа 0000...9999 к формату 0...1 с фиксированной точкой (в 16 бит укладывается дробная часть, а целая равна 0) и домножением на 10 для получения очередной цифры. При наличии аппаратного умножителя так вообще пожалуй наибыстрейший способ.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th July 2025 - 22:43
Рейтинг@Mail.ru


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