Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 08.10.2007, 22:48  
alex_sn
Частый гость
 
Регистрация: 03.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alex_sn на пути к лучшему
По умолчанию Как работает фун-ция ldiv() на WinAVR

Подскажите, пожалуйста.
В AVRStudio 4.13.528 WinAVR ATMega8 использую следующее вычисление:
ADCdata = 789;
ADCtmp = ldiv(ADCdata*2.56, 1024);

если посчитать руками на калькуляторе, то получается 1,9725
а в симуляторе получается 1,995 (записывается в структуру ldiv_t)
Пробовал разные числа, дробная часть не получается правильно.
Почему это происходит ?

-- Прилагается рисунок: --
Реклама:
alex_sn вне форума  
Непрочитано 08.10.2007, 22:50  
alex_sn
Частый гость
 
Регистрация: 03.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alex_sn на пути к лучшему
По умолчанию

Кусок программы

-- Прилагается рисунок: --
alex_sn вне форума  
Непрочитано 08.10.2007, 23:42  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию

"параметры для функции ldiv являются long integer"
Использование некорректно - ADCdata*2.56 приводится к длинному целому, т.е. отбрасывается дробная часть, что приводит к потере точности.
И остаток от деления на 1024 вовсе не дробная часть десятичной дроби.
Функция отработала правильно:
789*2.56=2019.84
0.84 отбрасывается.
2019 / 1024 = 1
2019 % 1024 = 995
Что и требовалось доказать
kison вне форума  
Непрочитано 10.10.2007, 19:02  
alex_sn
Частый гость
 
Регистрация: 03.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alex_sn на пути к лучшему
По умолчанию

Спасибо, буду пробовать.
alex_sn вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
KiCAD или продолжение бесплатного ПО,как WinAVR например LEAS Proteus, KiCAD и другие ECAD 3 07.03.2009 15:46
как написать макрос-функцию в Си Winavr serb-radio Микроконтроллеры, АЦП, память и т.д 7 30.09.2008 11:08
WinAVR,AtmanAVR и Proteus-как правильно сделать makefile LEAS Микроконтроллеры, АЦП, память и т.д 29 02.06.2008 07:50
Как настроить компиллятор WinAVR сам по себе. Woz Proteus, KiCAD и другие ECAD 1 08.09.2007 11:12
как переложить программу с CV на WinAVR wawchuk Микроконтроллеры, АЦП, память и т.д 26 28.08.2006 18:44


Часовой пояс GMT +4, время: 15:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot