| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Въпрос за малко сметки !? http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=6791 |
Страница 1 от 1 |
| Автор: | me40 [ Вто Май 05, 2009 3:36 pm ] |
| Заглавие: | Въпрос за малко сметки !? |
Въпросът ми се отнася до формулата по-долу Fout=( Fmclk / 2^28 )*f или по точно ме интересува 28 битовата стойност на f=(2^28 * Fout) / Fmclk ,където: F(out) - е честотата, която аз си избирам и е между 1 hz и 12 mhz Fmclk - константа = 20 mhz (Честотата на кварцовият резонатор) 2^28 - константа = 268 435 456 Ако представя 20 000 000 = 2^8 * 78 125, то формулата ще придобие вида: 1. f= (1 048 576 * Fout ) / 78 125 или ако разделя 2^28/20 000 000 се получава 2. f=13.4217728 * Fout В първият случай имам умножение на 24 битови числа (Fout=12 mhz) и резултатът е 48 битово число Във вторият случай имам умножение на осем битово число, но със 7 знака след запетаята със 24 битово. Няма ли по-лесен начин за получаване на нужното ми 28 битово число f ? |
|
| Автор: | ¶ [ Вто Май 05, 2009 4:28 pm ] |
| Заглавие: | |
Сметките с плаваща запетая ли ще ги реализираш, с цели числа ли, каква точност гониш ? |
|
| Автор: | me40 [ Вто Май 05, 2009 4:44 pm ] |
| Заглавие: | |
За резултат ми трябва цялото число т.е ако: Fout=1 hz то тогава f =13.4217728 т.е достатъчно ми е да получа 13 При Fout=11 999 999 то тогава f = 161061260.1782272 161061260 ми е достатъчно, но за да стигна до този резултат трябва да мина през число, което е повече от 32 бита и става твърде сложно, поне за мен де. Та затова питам дали има някакъв друг начин? |
|
| Автор: | miro_atc [ Вто Май 05, 2009 5:25 pm ] | |||||||||
| Заглавие: | ||||||||||
Избираш си едно от горните според точността която желаеш. Примерно 1114/83= 13.421 и гледаш колко ти е максимума.. да кажем ползваш 32-бит целочислена аритметика, то макса е 3855446, значи ако Fout е по-голямо, за да нямаш препълване първо делиш на 83 после умножаваш по 1114 иначе обратното, т.е: int f(unsigned int fout) { if(fout >= 3855446) return (fout /83) * 1114; else return (fout*1114)/83; } |
||||||||||
| Автор: | ¶ [ Вто Май 05, 2009 5:31 pm ] |
| Заглавие: | |
Мисля, че синтезатора който мъчиш не е проектиран за тази цел. По-скоро е проектиран за стандартна мрежа от честоти, с определен кварц, така че да може лесно да се смятат честотите и да се генерират на определена стъпка. Произволна честота трудно ще се генерира по този начин. Умножението ти дава число по-голямо от 32-бита, трябва да минеш на 64-битова целочислена аритметика, ако искаш точност. Все пак едно една приблизителна стъкмистика с точност 3 знака след десетичната запетая. Вместо 1048576/78125 използвай 859/64, т.е. 1) умножаваш 859 по честотата; получаваш някакъв 64-битов резултат; 2) шифтваш надясно 6 пъти резултата ( така се дели на 64 ); 3) получаваш твоето цяло число Обратната калкулация ще ти даде каква грешка ще се получи в генерираната честота. |
|
| Автор: | me40 [ Вто Май 05, 2009 6:25 pm ] | |||||||||
| Заглавие: | ||||||||||
Да, това с апроксимацията е вариянт, за който не се бях сетил. Все пак системата ще работи, макар и с някаква грешка miro_atc, с каква програма намираш апроксимация на произволно число?
А има ли по-лесен начин за генератор през 1 hz? Аз останах с впечатление, че това е най лесният начин..... |
||||||||||
| Автор: | miro_atc [ Вто Май 05, 2009 6:33 pm ] |
| Заглавие: | |
http://www.miscel.dk/MiscEl/miscel.html |
|
| Автор: | me40 [ Вто Май 05, 2009 6:52 pm ] |
| Заглавие: | |
Ей, ама съм прост....... Ами то елементарно...ама на кат' не се сещам. Тъй като имам само умножение и деление във формулата щом при Fout=1 hz се получава 13.4217728, то при 2 hz ще се получи 26.8435456 и т.н До две 24 битови числа ( 134 217 728 * 12 000 000) мога да умножавам , а резултата ще ми е f. |
|
| Автор: | ¶ [ Вто Май 05, 2009 7:53 pm ] |
| Заглавие: | |
Не съм навътре в нещата, но мисля DDS чиповете са точно за тази цел, не са и кой знае колко скъпи. |
|
| Автор: | me40 [ Вто Май 05, 2009 8:05 pm ] |
| Заглавие: | |
Аз тази формула от там я извадих. 9833 на analog devices. Ама за момент помислих, че има по лесен начин. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|