Dlouhe deleni na x51
Lukas Burda
burdal1
Středa Březen 17 14:53:44 CET 2004
A proc vam vlastne vadi ty slozite rutiny?? Ten procesor bude delat
jeste neco jineho? Pokud merite rychlost koule v bowlingu, tak i kdyz
jsem prosel uz dost bowling baru, nikde sem nevidel ze by meli tak
rychly pocitani kuzelek, aby 51 mezitim nestihla jedno sebedelsi deleni.
Lukas
ps: doufam ze mi nikde neco neuniknulo
LK> At 13:07 8.2.2003 +0100, Vaclav Danecek wrote:
>>A kdyz udelate normalizaci posunem, tak vam bude stacit deleni DIV16 z
>>http://www.mcu.cz/modules/news/article.php?storyid=298
LK> No mozna bude lepsi,kdyz napisu k cemu to ma byt a treba nekoho napadne
LK> jeste lepsi reseni celeho problemu. Jde o mereni rychlosti pomoci 2 IR
LK> zavor. Pri preruseni prvni se spusti timerak a pocita dokud neni prerusena
LK> druha. Tak zmerim cas na zname draze a potrebuju spocitat rychlost. Ta bude
LK> 1-99km/h (dvoumistny displej). Problem je v tom,ze potrebuju mit u Atmelu
LK> krystal 11.0592 kuli seriaku. A taxme s kolegou premysleli,jak daleko dat od
LK> sebe zavory abychom meli co nejjednodussi vypocet. Nase uvaha je takova:Pri
LK> rychlosti 1m/s musi za 1000 tiku timeraku ujet vzdalenost 1.085 metru. Abych
LK> nemusel delit 1000,ale 1024 (shr 7) tak jsme udelali 1.085*1.024 =1.111
LK> metru. A abychom si zjednodusili prepocet m/s -> km/h zmensili jsme
LK> vzdalenost zavor: 1.111/3.6=0.3086 metru. Algorytmus jsme si pro kontrolu
LK> odladili v Pascalu na PC. Tady je:
LK> *************************************
LK> program KUZELKY;
LK> {$E+}{$N+}
LK> uses crt;
LK> const krystal=11059200;
LK> dist=0.3086419753;
LK> var speed:real;
LK> tik:real;
LK> cas:real;
LK> poctik:longint;
LK> pom,pom1:WORD;
LK> begin
LK> repeat
LK> write('Zadej rychlost koule v km/h: ');
LK> readln(speed);
LK> tik:=1/(krystal/12);
LK> writeln('1 Tik (sec): ',tik:1:16);
LK> cas:=dist/(speed/3.6);
LK> writeln('Cas v sec: ',cas:1:8);
LK> poctik:=round(cas/tik);
LK> writeln('Pocet tiku: ',poctik);
LK> pom:=poctik shr 7;
LK> writeln('Pocet tiku / 128: ',pom);
LK> { krat 1024 (pro zvyseni presnosti v celych cislech) a krat 1000 (nevim
LK> proc)}
LK> { nekde to litalo o 1000, mozna kvuli prevodum us -> ms -> s nebo m -> km
LK> nebo nevim }
LK> pom:=1024000 div pom;
LK> writeln('1 / pom: ',pom);
LK> { slozeni pom shl 3 (jak bylo) a nasledne shr 10 (kvuli predchozimu
LK> nasobeni 1024)}
LK> { pom:=pom shl 3;}
LK> { pom:=pom shr 10;}
LK> pom:=pom shr 7; { pom/128}
LK> writeln('Na displeji: ',pom);
LK> port[$378]:=255;
LK> port[$378]:=254;
LK> delay(1);
LK> port[$378]:=255;
LK> delay(round(cas*1000)-1);
LK> port[$378]:=255;
LK> port[$378]:=253;
LK> port[$378]:=255;
LK> until speed=0;
LK> end.
LK> *************************************
LK> Jestli ma nekdo lepsi napad jak zmerit rychlost,budu velice rad za kazdou
LK> radu. Diky...
LK> S pozdravem with best regards
LK> ------------------------------------------------------------
LK> EZA-TV Vrchlabi
LK> Libor Kavan Phone & Fax:+420 438 521 232
LK> Dlouha 421 Fax:+420 438 521 262
LK> 543 03 Vrchlabi III mailto:lkavan@krkonose.cz
LK> Czech Republic http://www.krkonose.cz/eza-tv
LK> ------------------------------------------------------------
Další informace o konferenci Hw-list