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

 
 
> Дробная арифметика, Делаю вольтметр
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
Ответов
xgcyo
сообщение Aug 12 2009, 10:31
Сообщение #2





Группа: Участник
Сообщений: 8
Регистрация: 9-07-09
Из: Рига, Латвия
Пользователь №: 51 080



Флоатами получается очень медленно и громоздко. Для своего вольтметра все делал делением и вычислением остатка на интегерах. Вывод на три 7-сегментных светодиодных индикатора. Могу сурсы дать.
Существует какой-либо быстрый алгоритм разложения 16-битного целого на десятичные составляющие, с шифтами например? На аттини26 делением и остатками при 1МГц у меня эта операция занимает 200мкс. Интересно, подсчетом вычитаний 1000, 100, 10 быстрей будет?
Go to the top of the page
 
+Quote Post



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

 


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


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