Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Въпрос за математически изчисления в С за AVR
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=2092
Страница 1 от 1

Автор:  Ugeen [ Нед Мар 26, 2006 5:58 pm ]
Заглавие:  Въпрос за математически изчисления в С за 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 разряден седемсегментен индикатор.За вас може и да е елементарно ,но аз за пръв път се сблъсквам с това,а нали знаете,човек се учи докато е жив.Надявам се на помощта ви за която предварително благодаря.

Автор:  evc [ Нед Мар 26, 2006 6:10 pm ]
Заглавие: 

Дефинирай ги "float" и след изчислението ползвай функцията за пробразуване на типове. В HI-TECH има FloatToStr(float, *string). Също има и FloatToBCD.

Автор:  TheWizard [ Нед Мар 26, 2006 7:06 pm ]
Заглавие: 

Ugeen: Можеш да смяташ сложни уравнения, проблема е времето(ресурсите) за което ще се извършат.
Преобразувай си формулите до INTEGER аритметика

Автор:  Ugeen [ Нед Мар 26, 2006 7:16 pm ]
Заглавие: 

Дай някакъв пример ,какво имаш в предвид.Например с тази формула която съм написал

Автор:  TheWizard [ Нед Мар 26, 2006 7:31 pm ]
Заглавие: 

Ами не си дал подробности:
мин-макс Oborot_per_minute, % грешка,
разредност на Timer-а,
параметри на Fclock(мин-мах), итн.

Автор:  Ugeen [ Нед Мар 26, 2006 7:39 pm ]
Заглавие: 

Ами да кажем такта на таймера да е 3096Hz.Обороти от 0 до 1500 ,за грешка не ми трябва да е много точно ,да кажем един оборот.

Автор:  Gogo [ Нед Мар 26, 2006 7:49 pm ]
Заглавие: 

Под определени обороти (да не говорим за 0) не може да стане точно така. Най-малкото ще трябва да си "наставиш" таймера с един-два регистъра. :lol:

Автор:  Ugeen [ Нед Мар 26, 2006 7:56 pm ]
Заглавие: 

Добре ,да кажем мин. обороти да са 100

Автор:  TheWizard [ Нед Мар 26, 2006 8:16 pm ]
Заглавие: 

не си казал и колко са отчетите за 1 секунда :)

Автор:  Ugeen [ Пон Мар 27, 2006 8:08 am ]
Заглавие: 

по един път на секунда

Автор:  Реконструктор [ Пон Мар 27, 2006 10:48 am ]
Заглавие: 

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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/