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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Деление на дробь на ассемблере, Поделить число на коэффициент с плавающей запятой
777777
сообщение Dec 16 2010, 04:48
Сообщение #16


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Ёжики плакали, кололись, но продолжали писать на ассемблере плавающую точку...
Go to the top of the page
 
+Quote Post
Slavast
сообщение Dec 17 2010, 06:33
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(777777 @ Dec 16 2010, 10:48) *
Ёжики плакали, кололись, но продолжали писать на ассемблере плавающую точку...


Ребят, кто знает: как можно преобразовать переменную с плавающей запятой (результат деления на коэффициент входного напряжения АЦП) в символьную константу (для вывода ее на терминал)на Си?
Есть какая-то функция или директива преобразования float в char?
Заранее, благодарим!
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 17 2010, 06:37
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Slavast @ Dec 17 2010, 12:33) *
Ребят, кто знает: как можно преобразовать переменную с плавающей запятой (результат деления на коэффициент входного напряжения АЦП) в символьную константу (для вывода ее на терминал)на Си?
Есть какая-то функция или директива преобразования float в char?
Заранее, благодарим!


Есть такая функция:
ftoa
Go to the top of the page
 
+Quote Post
777777
сообщение Dec 17 2010, 10:33
Сообщение #19


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Slavast @ Dec 17 2010, 12:33) *
Ребят, кто знает: как можно преобразовать переменную с плавающей запятой (результат деления на коэффициент входного напряжения АЦП)

Деление на константу всегда можно заменить на умножение на величину ей обратную

Цитата(Slavast @ Dec 17 2010, 12:33) *
в символьную константу (для вывода ее на терминал)на Си?

Для этого есть алгоритмы преобразования двоичного в двоично-десятичное. Тут был товарищ который придумывал для этого хитроумные алгоритмы, в крайнем случае можно воспользоваться функцией itoa.
Go to the top of the page
 
+Quote Post
Slavast
сообщение Dec 24 2010, 04:05
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Всем добрый день!
Уже 3-й день не могу перевести полученный результат с АЦП (деленный на коэффициент) с типа с плавающей запятой в символьный для вывода на UART терминала компьютера.
itoa - не подходит. Sprint не работает, тоже пробовал.
аещф- вообще не нашел такой функции.
Поделитесь опытом, может есть команда или процедура?
Спасибо откликнувшимся!
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 24 2010, 04:17
Сообщение #21


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Slavast @ Dec 24 2010, 10:05) *
Поделитесь опытом, может есть команда или процедура?

Могу только поделиться опытом. Давно сделал и пользую не задумываясь набор подпрограмм с плавающей точкой для АВР на асм и свой "терминал" для компа на паскале, отображающий в зависимости от команды (полученной от АВР вместе с данными) данные как целые или "плавающие" или строку. Трудно представить, как раньше без этого работал и как все без этого работают.
Лучше немного (а может поначалу и много) попыхтеть, а дальше работать и наслаждаться
Go to the top of the page
 
+Quote Post
Slavast
сообщение Dec 24 2010, 04:29
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(Diusha @ Dec 24 2010, 10:17) *
Могу только поделиться опытом. Давно сделал и пользую не задумываясь набор подпрограмм с плавающей точкой для АВР на асм и свой "терминал" для компа на паскале, отображающий в зависимости от команды (полученной от АВР вместе с данными) данные как целые или "плавающие" или строку. Трудно представить, как раньше без этого работал и как все без этого работают.
Лучше немного (а может поначалу и много) попыхтеть, а дальше работать и наслаждаться


Пишу на Си. Можете показать подпрограммы?
Go to the top of the page
 
+Quote Post
Tanya
сообщение Dec 24 2010, 07:04
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Slavast @ Dec 24 2010, 10:05) *
Всем добрый день!
Уже 3-й день не могу перевести полученный результат с АЦП (деленный на коэффициент) с типа с плавающей запятой в символьный для вывода на UART терминала компьютера.

А если Вам нужно только передать данные в компьютер, то зачем их преобразовывать? Гоните сырые в компьютер - пусть он тоже поработает.
Go to the top of the page
 
+Quote Post
Slavast
сообщение Dec 24 2010, 07:56
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 81
Регистрация: 25-10-10
Пользователь №: 60 395



Цитата(Tanya @ Dec 24 2010, 13:04) *
А если Вам нужно только передать данные в компьютер, то зачем их преобразовывать? Гоните сырые в компьютер - пусть он тоже поработает.


И как по вашему я выведу число 4.467234 на UART? Это число то мне и надо в строку перевести!
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 24 2010, 08:18
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Slavast @ Dec 24 2010, 15:56) *
И как по вашему я выведу число 4.467234 на UART? Это число то мне и надо в строку перевести!
Число типа float занимает в памяти 4 байта. Передайте эти 4 байта в UART как есть, а в PC соберите их побайтно в такое же число float. Какие тут проблемы-то? laughing.gif
Go to the top of the page
 
+Quote Post
Tanya
сообщение Dec 24 2010, 08:20
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(Slavast @ Dec 24 2010, 13:56) *
И как по вашему я выведу число 4.467234 на UART? Это число то мне и надо в строку перевести!

Ваш АЦП сразу Вам такое выдает?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 24 2010, 10:46
Сообщение #27


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Что-то мне сдается, что автор ветки не хочет советы слушать и с упорством, достойным лучшего применения, ломится в открытую дверь. Что вы уперлись в этот самый float? Чем вас не устраивают предложенные вам варианты?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Dec 24 2010, 12:09
Сообщение #28


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(sergeeff @ Dec 24 2010, 16:46) *
Что-то мне сдается, что автор ветки не хочет советы слушать и с упорством, достойным лучшего применения, ломится в открытую дверь. Что вы уперлись в этот самый float? Чем вас не устраивают предложенные вам варианты?

+1

Цитата
Как подсказали перейдите от деления к умножению
Надо разделить на 17,2. Попытаемся представить это число в виде 65536/x
17,2 = 65536/x
x = 65536/17.2 = 3810
Теперь если взять любое входное значение, умножить на 3810 а потом отбросить два старших байта (что эквивалентно сдвигу на 16 вправо или делению на 65536) то получите то что Вам нужно. Не обзязательно брать 65536, можно любое число степень двойки (чем больше число тем выше точность). Суть метода в том чтобы уйти от операции деления к операции умножения с последующим сдвигом результата вправо. Умножение для любого процессора также как и сдвиг довольно простые и быстрые операции. Особенно если писать на ассемблере

Уже всё рассказали , осталось только написать. Это элементарно и это asm


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 24 2010, 15:44
Сообщение #29


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Чем две недели заси...ть себе и другим мозги, проще было бы переписать все на С и не плакаться в жилетку по поводу и без.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 25 2010, 06:42
Сообщение #30


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Slavast @ Dec 24 2010, 10:29) *
Можете показать подпрограммы?

Оп! Хотел выслать в личку, но не нашел, как там прикрутить файл. То ли там чего-то поменялось, то ли я забыл. Копаться лень, так что если объясните, как... Или оставьте мыло.

Как правильно подметила Tanya, АЦП выдает не float, а 2-байтовое число (10 бит). Можете его и отправлять, а уже на компе обсчитывать как угодно
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 04:37
Рейтинг@Mail.ru


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