Числа с плавающей точкой в микроконтроллерах AVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Друг Кота
Аватара пользователя
Сообщения: 3792
Зарегистрирован: Чт сен 14, 2006 11:42:09
Откуда: Обитаю на чердаке

Сообщение Мышонок »

Ох, чую пошёл спор, что лучше: стамеска, зубило или отвёртка. А если отвёртка то какая, плоская или крестовая? А если крестовая, какой номер? Из моей практики: мне пришлось однажды для некоего комплекса писать программу и отдельные её модули на шести! :shock: языках!
Опять же вопросы целесообразности. На Си систему реального времени сочинить-то сложновато будет. На ассемблере чётко видишь, какие команды, сколько тактов на команду, соответственно задержки и т.д. считаются и т.д. и т.п. Другое дело, если надо какую-то обработку сделать, где ни по времени, ни по памяти мы особо не ограничены - конечно тут лучше Си и другие языки более высоких уровней использовать...
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
Контактная информация:
Реклама
Модератор
Аватара пользователя
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

Сообщение Сэр Мурр »

Abakt писал(а):[

Считаю что нчинающему удобней использовать Си и полезней так как он одинаков и для любых МК и для ПК.
С такой убеждённостью...... Да никто Вас не призывает "сменить религию". Вам приводят ПРАКТИЧЕСКИЕ примеры, и ждут от Вас того же. А Вы всё общими словами отделываетесь. Вы же умный человек, я иногда на Вас даже ссылаюсь. Будьте терпимее к мнению других.
Реклама
Вечно гонимый
Аватара пользователя
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

ARV писал(а):Пару раз попадал под "оптимизацию" компилятора Си, когда он так оптимизировал программу, что она просто не работала, а без оптимизации в память не влезала...
Наверно нужно было указать компилятору какие переменные и операторы и участки программы не подвергать оптимизации.
Например на - pid.by.ru/05a.htm - написано про модификатор
"волатил" как раз помогающий в таких случаях.
Мявтор!
Аватара пользователя
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.

Сообщение moLCHec »

ARV а что мешает таблицы синусов на Си забить по моему разница не велика здесь м\у Си и асм. Вот так напрмер const char SIN[]={0,1,2....}. Вот что бы хотел у котов то узнать а функции аслемблера с плавающей точкой кто нить юзал у AVR же такие имеются. В пользу Си можно сказать что всегда можно функцию к которой предъявляютя жёсткие требования написать на асме и вставить в Сишный код благо большинство если не все компиляторы это поддрерживат. В ICC for AVR даже даже на переменные можно ссылаться напрмер так

char temp;
...
asm("swap %temp")
...

переставить тетрады Сишными функциями то больше будет.
Настоящий кот всегда либо голоден,
либо невыспался ...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

1. Я делал упор на то, что для увеличения быстродействия Си в нем используют именно таблицы синусов & Co. Так что ваш вопрос смыла лишен.
2. Я понимаю, что тут собираются коты и котята, но ведь не коровы же! Надо же иной раз почитывать документацию на то, с чем работаете! С какого, извинте, перепугу вы считаете, что в ассемблере AVR есть команды для работы с числами с плавающей точкой?! Такие команды есть только у DSP. А AVR только-только целые числа умножать научились , а вы тут сразу уж за плавающую точку хватаетесь... И вообще, объясните мне, на кой эта точка вам сдалась? Вы что, решили на МК сделать расчет траектории полета к Марсу? Плавающая точка - это ведь дико огромные или дико маленькие (стремящиеся к нулю) числа!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Мявтор!
Аватара пользователя
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.

Сообщение moLCHec »

товарищ ARV объясните мне котёнку что делают функции FMUL FMULS FMULSU если не работают с дробями и вообще вам не кажется что у вас несколько утопические взгляды. Кстати Abakt long int и float оба 4 байта. Почему то все так рьяно уперлись в смой язык не хотят признать главного что всё на 90% зависит от программиста и его умения и лишь на 10% от языка. Вы не заметили что даже толком не внимаете довадам оппонента. По крайней мере по постам этого не видно.

PS конечно если дроби и числа с плавающей точкой вещи разные то ваще ARV замечания вполне обоснованы я их отождесвил.
Настоящий кот всегда либо голоден,
либо невыспался ...
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

moLCHec писал(а):товарищ ARV объясните мне котёнку что делают функции FMUL FMULS FMULSU если не работают с дробями...
Я скажу только несколько слов, подробности смотрите-ищите-узнавайте самостоятельно, мне эта тема уже порядком надоела. То, что Си - язык программирования, я не оспариваю, не оспариваю так же его право на жизнь и ваше право им пользоваться сколько душе угодно. Но вот то, что подобные темы возникают на форуме, косвенно доказывает, что "умея" программировать на Си многие (не обязательно именно Вы - подчеркиваю) так и не понимают, что же именно они делают и как оно работает. Это плохо, имхо.

Теперь о *MUL. Действительно, эти команды облегчают работу с простыми дробыми с фиксированной точкой (не плавающей!!!!). В сущности, отличие их от того, что я раньше говорил (умножаем все дроби на сто, все вычисляем, а в результате отделяем нужное количество знаков запятой) - только в названии. Практически все эти команды делают обычное целочисленное умножение двух байтов, получая результат в виде двухбайтного числа, с которым дополнительно проводится манипуляци сдвига или распространения знака. Да, это кое-в чем упрощает реализацию вычислений дрбных чисел, но не более того. Говорить о плавающей точке тут не приходится.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Мявтор!
Аватара пользователя
Сообщения: 825
Зарегистрирован: Вс дек 18, 2005 20:04:42
Откуда: Свердловская обл.

Сообщение moLCHec »

ARV Совершенно с вами согласен что слепое использование Си приводит к непониманию процессов. На счёт чисел с плавающей точкой я от них отказался если вы не помните т.к. жрут много памяти использовав тип long int. ещё раз повторю что на 90% даже наверно больше зависит от програмиста и как он использует функции, а Си там или асембрер это уже детали.
Настоящий кот всегда либо голоден,
либо невыспался ...
Контактная информация:
Родился
Сообщения: 15
Зарегистрирован: Чт май 10, 2007 10:32:55

Сообщение McDrew »

Помогите пожалуйста решить проблему века!
Нужно через Port A в вывести дробное число, например 3.65, как это можно сделать?
На базе микроконтроллера ATMEL серии AVR, типа AT90S8535.
Если не сложно, с примером, очень нужно! Я новичек.
Большое спасибо!
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Что будет приемником ?
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Родился
Сообщения: 15
Зарегистрирован: Чт май 10, 2007 10:32:55

Сообщение McDrew »

tych
Сигнал с порта А идет на ЦАП, с выхода которого аналоговый сигнал подается как задание на преобразователь частоты, управляющий асинхронником.
Использую все 8 ножек порта.
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Чего-то я не понимаю... И как по-вашему ЦАП должен реагировать на дробное число?
Одна из характеристик ЦАПа (как и АЦП) - его разрядность. Какой смысл она приобретает при нецелочисленном входном значении?
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

McDrew писал(а):tych
Сигнал с порта А идет на ЦАП, с выхода которого аналоговый сигнал подается как задание на преобразователь частоты, управляющий асинхронником.
Использую все 8 ножек порта.
тогда так (256 * 3.65 / 5 ) - 1 = 186

прога для CVAVR =========

Код: Выделить всё


#include <90S8535>

void main(void){

DDRA = 255; // сделать порт_А выходом

PORTA = 186; // вывести число 186 в порт_А

while (1);

  }

Наверно будет работать если ваш ЦАП преобразует код 255 в 5 вольт.

http://www.radiokot.ru/forum/viewtopic.php?t=2273
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

нормальный подход, будет работать
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Родился
Сообщения: 15
Зарегистрирован: Чт май 10, 2007 10:32:55

Сообщение McDrew »

Огромное спасибо tych!
Благодаря Вам мне удалось решить свой вопрос! :idea:
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Для этого и есть форум ! :lol:
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Оne

Сообщение Оne »

И это означает - Слава Великому и Мудрому Kot-у. :))
Родился
Сообщения: 15
Зарегистрирован: Чт май 10, 2007 10:32:55

Сообщение McDrew »

Подскажите пожалуйста еще один вопрос. В том же АВР AT90S8535, как можно записать данные с таймера 2 в память данных?
Перечитал несколько источников, том числе avr100.asm, но толком все равно не разобрался, никак не могу уловить саму идею...
Контактная информация:
Родился
Сообщения: 15
Зарегистрирован: Чт май 10, 2007 10:32:55

Сообщение McDrew »

Да, программу пишу в AVR Studio 4.12.
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Регистр, в котором хранится текущее значение счетчика таймера, позволяет осуществлять операцию неразрушающего чтения. Поэтому да, можно. Просто в какой-то момент присваиваете нужной переменной значение этого регистра.
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»