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

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

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

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

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

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

Proteus, KiCAD и другие ECAD Разработчик так или иначе сталкивается с системами автоматизированного проектирования. Данный раздел - по САПР.

 
Опции темы
Непрочитано 21.02.2007, 20:31  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Это не решает проблему. Ну и что, могу сделать так чтобы не выводить 17,2 При этом в реале 17, 29999.
Нужно чтобы при делении получалось 17,3. Это хорошо, что получаю 7,29 ошибка на лицо. Я хочу быть твердо уверен, что если показывает что-то индикатор, значит так оно и есть.
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 21.02.2007, 20:35  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Сообщение от Kukaz
А если честно, преобразование ты делаешь через жопу (
Если число 99.99 то сколко будет крутиться твой цикл ?
А я не спешу Главное работает. А числа 99,99 не должно быть вообще. Только три разряда.
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 21.02.2007, 23:35  
Kukaz
Частый гость
 
Регистрация: 28.07.2005
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Kukaz на пути к лучшему
По умолчанию

Во дает !
Ты разницу между 7.29 и 17.2 вообще видишь?
И что за датчик тебе точность дает в 0.5% ?
Kukaz вне форума  
Непрочитано 21.02.2007, 23:55  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Конечно вижу разницу, не надо думать, что я тупой совсем. Просто как нибудь делать не хочу и не умею. Если человек вводит коефициент 17,3, то его не обрадует если получиться 17,2 ну и пусть, что в реале там не 17,2 а 17,299999. Поэтому повторю задачу:
Нужно вводить коефициенты с плавающей запятой в диапазоне от 0,01 до 100. И чтобы число помещалось в три разряда, т.е не 17,299999, а 17,3 (например)

Сейчас в голову пришла одна идея, попробую, если получиться напишу.
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 22.02.2007, 00:54  
Kukaz
Частый гость
 
Регистрация: 28.07.2005
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Kukaz на пути к лучшему
По умолчанию

Да, тяжелый случай.
Если вводится коэффициент, то зачем преобразовывать его сначало во float, а затем обратно в строку для вывода на дисплей ? Строку ввода, что сразу не вывести. Да и вообще, как можно ввести число, не видя то, что вводишь?
Что-то ты тут паришь всех - сам-то знаешь, что хочешь ?
Kukaz вне форума  
Непрочитано 22.02.2007, 01:35  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Сообщение от Kukaz
Да, тяжелый случай.
Если вводится коэффициент, то зачем преобразовывать его сначало во float, а затем обратно в строку для вывода на дисплей ? Строку ввода, что сразу не вывести. Да и вообще, как можно ввести число, не видя то, что вводишь?
Что-то ты тут паришь всех - сам-то знаешь, что хочешь ?
Я знаю один форум, не буду называть ега название, где "умников" которые только критикуют, но ничего не советуют, наказывают. Как ты предлагаеш вводить число с плавающей запятой на трехразрядный индикатор? А потом его еще отобразить на нем? В формуле ПИДа используеться float, для вывода параметров на индикатор функция есть. Ввод всех параметров кроме как float сделан на основе изменения самой переменной. С float так делать не получается. Давайте договоримся не строить из себя то чего на самом деле нет. Если ничего толкового посоветовать не можеш, то зачем показывать, что ты тоже "не лыком шит"!!!
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
Непрочитано 22.02.2007, 10:25  
mikeras
Частый гость
 
Регистрация: 12.12.2005
Сообщений: 13
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
mikeras на пути к лучшему
По умолчанию

Если желаешь на индикатор выдать 17.3 вместо 17.299, то вызывай outfordis(f+0.05).
mikeras вне форума  
Непрочитано 22.02.2007, 11:41  
alexvm123
Прохожий
 
Регистрация: 24.08.2005
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alexvm123 на пути к лучшему
По умолчанию

Сообщение от masterpc
Сейчас в голову пришла одна идея, попробую, если получиться напишу.
Старано, что double не помог... Видать реализован как-то по другому... На всякий случай уточню, я предлагал сменить float SUM; на double SUM; И соответственно в других местах вычислений тоже использовать double.

Есть одно предложение. Я просто с IAR не знаком, есть ли там функция sprintf? Если есть и вас устроит полученный результат в виде строки, то попробуйте сделать следующее (еще это будет зависеть от реализации самой функции sprintf, конечно, т.е. реализована ли там эта возможность):
Код:
char buf[5]; /* здесь ввиде строки будет число (3 байта на цифры, 1 на точку и еще один на терминирующий строку ноль в конце строки) */
sprintf(buf, "%.01f", SUM); /* .01 - означает кол-во цифр после точки */
alexvm123 вне форума  
Непрочитано 22.02.2007, 18:16  
ReiseReise
Прохожий
 
Регистрация: 25.08.2005
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ReiseReise на пути к лучшему
По умолчанию

masterpc, читал тут твои посты, и пацталом был ! Как я понял ты собрался сделать из устройства вывода информации (7-сегментный индикатор) устройство ввода? Удачи! А не судьба прилепить к твоему девайсу кнопку (хотябы одну), повесить на прерывание (желательно) и тупо вводить свои коэфиценты. Это совершенно очевидное решение, ведь кнопка - простейшее устройство ввода... Потом все что ввел во внутреннем представлении перегонишь в привычный человеку вид (понимаешь о чем я).
ЗЫ: В Ц есть функции округления как вверх, так и вниз (имею ввиду примерно это: 0.46 округляется до 0.5 или до 0.4). Полистай справочник.
ЗЫЫ: Если ушь не нашел в справочнике... Правила округления надеюсь знаешь? Вот твои 17.29f. Задайся разрядом до которого нужно округлить. В твоем случае это первый в дробной части (т.е. результат должен быть таким: 17.3f).
Алгоритм:
0: float data = xx.yy; // x числа в целой части, у - в дробной
1: int idata = (int) (data*10.0f);
2: float result;

3: if(data*10.0f - (float)idata ›= 0.5f)
4: result = (float)(idata + 1)/10.0f;
5: else
6: result = (float)idata/10.0f;

Алгоритм не оптимизировал для наглядности (и это лишь пример).
Рассмотрим этапы работы на примере:
0: data = 17.29f;
1: idata = 172;
2: resut = хз;

3: if(172.9f-172.0f ›= 0.5f) // 0.9f ›= 0.5f ?
4: result = (float)(172 + 1)/10.0f; // result = 17.3f

Удачи!
ReiseReise вне форума  
Непрочитано 22.02.2007, 18:38  
masterpc
Временная регистрация
 
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
masterpc на пути к лучшему
По умолчанию

Сообщение от ReiseReise
masterpc, читал тут твои посты, и пацталом был ! Как я понял ты собрался сделать из устройства вывода информации (7-сегментный индикатор) устройство ввода? Удачи! А не судьба прилепить к твоему девайсу кнопку (хотябы одну), повесить на прерывание (желательно) и тупо вводить свои коэфиценты. Это совершенно очевидное решение, ведь кнопка - простейшее устройство ввода... Потом все что ввел во внутреннем представлении перегонишь в привычный человеку вид (понимаешь о чем я).
ЗЫ: В Ц есть функции округления как вверх, так и вниз (имею ввиду примерно это: 0.46 округляется до 0.5 или до 0.4). Полистай справочник.
Давайте раскажу про девайс: Индикатор - светодиодный, трехразрядный. ЧЕТЫРЕ кнопки ввода!!! (up/duwn, esc, enter). Устройство имеет два независимых канала регулирования. 1-й ПИД - управяляет трехходовым клапаном с помощью ШИМа. 2-й управление реле - термостатирование (не стандартное, ШИМ с периодом 200 секунд). Подключаються два датчика DS1820. Програмно реализовано довольно непростое меню с вводом пароля, сменой датчика, отображением всякой инфы и т.д. Вводятся 14 параметров, три из которых коэффициенты. Все это конечно же пишеться в EEPROM. Индикация динамическая, но особенная: в один момент времени включен не один разряд, а один сегмент одного из разрядов. Все уже готово и работает, остались мелочи всякие и ввод коефициентов.

Спасибо за подсказку на счет округления, попробую, но не гарантирую, что сегодня успею. Как что, сразу напишу
__________________
Музыка и звук - не одно и тоже...
masterpc вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интересная прога для мониторинга USB GNN Микроконтроллеры, АЦП, память и т.д 0 09.07.2009 11:56
Весьма интересная задача для AVR (паралельное вычисление) ua_gruzin Микроконтроллеры, АЦП, память и т.д 10 24.10.2008 17:07
Интересная схемка dimmich Электроника - это просто 8 12.05.2008 08:40
Интересная информация... dosikus Микроконтроллеры, АЦП, память и т.д 3 11.08.2007 23:07


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


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