Dlouhe deleni na x51

Libor Kavan lkavan
Středa Březen 17 14:53:44 CET 2004


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

No mozna bude lepsi,kdyz napisu k cemu to ma byt a treba nekoho napadne
jeste lepsi reseni celeho problemu. Jde o mereni rychlosti pomoci 2 IR
zavor. Pri preruseni prvni se spusti timerak a pocita dokud neni prerusena
druha. Tak zmerim cas na zname draze a potrebuju spocitat rychlost. Ta bude
1-99km/h (dvoumistny displej). Problem je v tom,ze potrebuju mit u Atmelu
krystal 11.0592 kuli seriaku. A taxme s kolegou premysleli,jak daleko dat od
sebe zavory abychom meli co nejjednodussi  vypocet. Nase uvaha je takova:Pri
rychlosti 1m/s musi za 1000 tiku timeraku ujet vzdalenost 1.085 metru. Abych
nemusel delit 1000,ale 1024 (shr 7) tak jsme udelali 1.085*1.024 =1.111
metru. A abychom si zjednodusili prepocet m/s -> km/h  zmensili jsme
vzdalenost zavor: 1.111/3.6=0.3086 metru. Algorytmus jsme si pro kontrolu
odladili v Pascalu na PC. Tady je:

*************************************
program KUZELKY;

{$E+}{$N+}
uses crt;

const krystal=11059200;
      dist=0.3086419753;

var speed:real;
    tik:real;
    cas:real;
    poctik:longint;
    pom,pom1:WORD;

begin
repeat

 write('Zadej rychlost koule v km/h: ');
 readln(speed);
 tik:=1/(krystal/12);
 writeln('1 Tik (sec): ',tik:1:16);
 cas:=dist/(speed/3.6);
 writeln('Cas v sec: ',cas:1:8);
 poctik:=round(cas/tik);
 writeln('Pocet tiku: ',poctik);

 pom:=poctik shr 7;
 writeln('Pocet tiku / 128: ',pom);

 { krat 1024 (pro zvyseni presnosti v celych cislech) a krat 1000 (nevim
proc)}
 { nekde to litalo o 1000, mozna kvuli prevodum us -> ms -> s nebo m -> km
nebo nevim }
 pom:=1024000 div pom;
 writeln('1 / pom: ',pom);

 { slozeni pom shl 3 (jak bylo) a nasledne shr 10 (kvuli predchozimu
nasobeni 1024)}
 { pom:=pom shl 3;}
 { pom:=pom shr 10;}
 pom:=pom shr 7;      { pom/128}
 writeln('Na displeji: ',pom);

 port[$378]:=255;
 port[$378]:=254;
 delay(1);
 port[$378]:=255;
 delay(round(cas*1000)-1);
 port[$378]:=255;
 port[$378]:=253;
 port[$378]:=255;

 until speed=0;
end.
*************************************

Jestli ma nekdo lepsi napad jak zmerit rychlost,budu velice rad za kazdou
radu. Diky...
S pozdravem           with best regards
------------------------------------------------------------
                 EZA-TV Vrchlabi
    Libor Kavan               Phone & Fax:+420 438 521 232
    Dlouha 421                Fax:+420 438 521 262
    543 03 Vrchlabi III       mailto:lkavan@krkonose.cz
    Czech Republic            http://www.krkonose.cz/eza-tv
 ------------------------------------------------------------




Další informace o konferenci Hw-list