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

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


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



Если я правильно догадался у вас опорное напряжение 5 В.
В этом случае:
Код
int16_t raschet(void)
{
int16_t b_uff;//выходное значение в милливольтах

    b_uff=((int32_t)ADCD*5000)/1024;
    return b_uff;
}
Ну и далее:
uint8_t mas_ADC [4];//содержит цифры для вывода
void out (int16_t in)
{
uint16_t d;
    d=in&0x7fff;

    mas_ADC[0]=d/1000+0x30;
    d=d%1000;
    mas_ADC[1]=d/100+0x30;
    d=d%100;    
    mas_ADC[2]=d/10+0x30;
    mas_ADC[3]=d%10;
}
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post



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

 


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


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