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

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


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



в BCD можно конверировать или разложением на степени 10 (отнимать 10000, 1000, 100, 10, 1 и считать количество) или сдвигами+BCD коррекцией :
http://www.avr-asm-tutorial.net/avr_en/calc/CONVERSION.html
http://www.avr-asm-tutorial.net/avr_en/cal...RT.html#bin2bcd
http://www.msclub.ce.cctpu.edu.ru/MCU_MPU/AVR/BINBCD.htm
http://www.msclub.ce.cctpu.edu.ru/MCU_MPU/AVR/BINBCDapp1.htm
http://www.msclub.ce.cctpu.edu.ru/MCU_MPU/AVR/BINBCDapp3.htm
Что будет быстрее - зависит от конвертируемых чисел.
Go to the top of the page
 
+Quote Post



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

 


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


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