Отговори на тема  [ 11 мнения ] 
Въпрос за математически изчисления в С за AVR 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение Въпрос за математически изчисления в С за AVR
Колеги,отдавна се занимавам с контролери,правил съм много неща ,но никога не ми се е налагало да ги ползвам за сметки и то на дробни числа.В момента правя един оборотмер с ATMega8 и ми се налага да ползвам малко математика.Идеята е следната: На вход за външно прекъсване ще постъпват импулси от опто датчик.На всяко преминаване на вала през датчика ще се нулира и ще се запуска 16bit timer,който да отчита времето за едно пълно завъртане на вала.Това време ще бъде Time_per_oborot(s)=Timer.(1/Fclock(Hz)). където Timer е отчетената от таймера стойност,а Fclock e честотата с която се тактува таймера.За да се сметнат оборотите на вала за една минута трябва да се ползва израза :
Oborot_per_minute=60/(Timer/Fclock)
Ползвам CodeVisionAVR.Въпросът ми е:Как трябва да се зададе този израз за смятане.Не знам до колко сложни изрази могат да се пишат.Трябва да се декларират променливи от типа float,а аз не съм наясно с тях.Доколкото прочетох заемат
4 byte от паметта,но как могат да се достъпват тези байтове и кой какво съдържа, никъде не е споменато.Другото което ме интересува как от полученото въпросно дробно число да отделя цялата част и да я преобразувам в десетичен код за да я индицирам върху 4 разряден седемсегментен индикатор.За вас може и да е елементарно ,но аз за пръв път се сблъсквам с това,а нали знаете,човек се учи докато е жив.Надявам се на помощта ви за която предварително благодаря.


Нед Мар 26, 2006 5:58 pm
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
Дефинирай ги "float" и след изчислението ползвай функцията за пробразуване на типове. В HI-TECH има FloatToStr(float, *string). Също има и FloatToBCD.

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Нед Мар 26, 2006 6:10 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
Ugeen: Можеш да смяташ сложни уравнения, проблема е времето(ресурсите) за което ще се извършат.
Преобразувай си формулите до INTEGER аритметика


Нед Мар 26, 2006 7:06 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Дай някакъв пример ,какво имаш в предвид.Например с тази формула която съм написал


Нед Мар 26, 2006 7:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
Ами не си дал подробности:
мин-макс Oborot_per_minute, % грешка,
разредност на Timer-а,
параметри на Fclock(мин-мах), итн.


Нед Мар 26, 2006 7:31 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Ами да кажем такта на таймера да е 3096Hz.Обороти от 0 до 1500 ,за грешка не ми трябва да е много точно ,да кажем един оборот.


Нед Мар 26, 2006 7:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Под определени обороти (да не говорим за 0) не може да стане точно така. Най-малкото ще трябва да си "наставиш" таймера с един-два регистъра. :lol:


Нед Мар 26, 2006 7:49 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Добре ,да кажем мин. обороти да са 100


Нед Мар 26, 2006 7:56 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
не си казал и колко са отчетите за 1 секунда :)


Нед Мар 26, 2006 8:16 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
по един път на секунда


Пон Мар 27, 2006 8:08 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Почти цялата аритметика в ЕКУ-то ми е на float и бачка перфектно (gcc), така че давай смело. :D Имай предвид, че изрази от типа на n/f където n е int а f e float n трябва да се каства насилствено към float, т.е. (float)n/f. Иначе по подразбиране кастването е обратно - n/(int)f и резултата е int и стават грешки. :roll:
Значетелно по-бързо е използването на числа с фиксирана запетая, отначало тръгнах по тоя път, но писането и дебъгването стават много тежки и предпочетох да ми е по-леко на душата и минах на float. :)


Пон Мар 27, 2006 10:48 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни