Stránka 3 z 4

Napsal: 19 kvě 2007, 11:16
od Modemo
luccas píše:jo a mám to :)

while PORTB.0 = 0 do nop;
i:=i+1;
while PORTB.0 = 1 do nop;

jednoduché ale účiné :D

No vidis, staci porozmyslat :wink:

Napsal: 19 kvě 2007, 12:13
od Houmer_other
Když tak na to koukám,tak mě napadá dotaz.Co je rychlejší ,jestli i:-i+1 nebo Inc(i).Jak to ten kompilátor vyoptimalizuje?

Napsal: 19 kvě 2007, 12:36
od Modemo
Neviem ako konkretne mikropascal, ale napr avrgcc co viem, je fakt dost hnusne inteligentny...... a pouziva (teda snazi sa) co najlepsi preklad. Myslim ze dany pripad je mu jedno, nahradi to vzdy tym istym.... sak si kuknite asm, pre oba pripady :roll:

Napsal: 19 kvě 2007, 13:19
od Houmer_other
Zkoušel jsem to a i v mikdopascalu je to jedno.V obou případech to přeloží jako "INCF _i, 1"

Napsal: 19 kvě 2007, 18:45
od luccas
Tak jsem na jedno řešení přišel. Ale opět je díky mé neznalosti velice prasácké. Ukazuje to +/- tu rychlost. Ale! vím, že je chyba v tom způsobu.



Kód: Vybrat vše

procedure interrupt;
begin
   brojac := brojac + 1;
   TMR0   := 96;
   INTCON := $20;
end;

 
 
begin

  OPTION_REG := $84; 
  TRISB  :=   0;       
  PORTB  := $FF;
  trisb.7 := 1;       
  brojac :=   0;     
  TMR0   :=  96;
  INTCON := $A0;
 
  Lcd_Init(PORTC);             
  Lcd_Cmd(LCD_CLEAR);
  Lcd_Cmd(LCD_CURSOR_OFF);

  Lcd_Out(1, 1, ('Rychlost: '));
  Lcd_Out(1,13,' KMh');
  polomer:=0.3;

repeat
 begin
 
 if brojac >= 3000 then
 begin
  v:=0;
  byteToStr(v,txt_vys);
  Lcd_Out(1,10,txt_vys);
 end;
 

        if portb.7 = 1 then
        begin
           t:=brojac/1000;
           mereni;
           Lcd_Out(1,10,txt_vys);
           brojac := 0;
           while PORTB.7 = 1 do nop;
        end;
         

    floattostr((brojac/1000),tt);
    Lcd_Out(2,7,tt);
     
end;
until 0=1;
end.


Já ten čas mezi dvěma impulzy počátám tak, že ten čítač přičte cca. 1000 za 1s. a s toho vycházím. Ale nejhlavnější problém je ten, že to zjišťuji a počítám a nuluji v programu. takže když někde hodím spoždění 0,5s tak končím. protože nemám šanci odchytit výstup. Proto se prosím ptám, nevíte někdo jak nastavit časovač tak aby mi na impuls sepnul a na další impuls vyhodil čas, vynuloval se a znova?

:cry: já už fakt na víc nepříjdu než to co jsem napsal. děkuji

Napsal: 19 kvě 2007, 20:07
od luccas
a když nad tím tak přemýšlím tak jsem došel k závěru, že mi to vyhovuje. Ale potřeboval bych pomoct alespoň s tím, jak udělat aby mi ten časovač napočítal do 1000 přesně za 1s. ??? :) pak to bude super. Díkes. :D

Napsal: 19 kvě 2007, 20:37
od DMF
Timer se dá nastavit na spouštění třeba náběžnou hranou.Atmely to umí na sto procent,PICy určitě taky.Koukni do manuálu.

Napsal: 19 kvě 2007, 21:55
od luccas
DMF píše:Timer se dá nastavit na spouštění třeba náběžnou hranou.Atmely to umí na sto procent,PICy určitě taky.Koukni do manuálu.


jo tak to kdybych věděl jak :( . Já vím, že to tak udělat jde ale nevím jak to tak udělat. Manuál mi moc nepomohl

Napsal: 20 kvě 2007, 00:36
od DMF
například u picu 12F675 se nastavuje přerušení při změně na konkrétním portu IOC
1=povoleno přerušení při změně GPIO
0 = zakázáno (maskováno) při změně GPIO

INTEDG: bit výběru aktivní hrany pro přerušení
1 – náběžná hrana signálu vývodu GP2/INT je aktivní
0 – sestupná hrana signálu vývodu GP2/INT je aktivní

Napsal: 20 kvě 2007, 10:04
od DMF
Zkus kouknout do tohoto datasheetu na ten timer (možná ho máš):
http://www.copsu.cz/mikrop/download/ok.php?link=16F87xA

Napsal: 20 kvě 2007, 22:04
od tominekk
Sorry chlapy, nedá mi to a musím poukázat na dvě videa z youtube.
Na jednom jede frajírek prej přes 400kmh-1 a na druhým jde docela pěkně vidět digitální tachometr - pro inspiraci autora.

Kód: Vybrat vše

http://www.youtube.com/watch?v=qaYcvN5yNGg&mode=related&search=
http://www.youtube.com/watch?v=k51irq9QiPg&mode=related&search=

Napsal: 21 kvě 2007, 14:21
od luccas
http://im.lide.cz/photo/big/28/09/1782100-16152809.jpg

takže asi takto to vypadá. Program sem použil ten co jsem ukázal. prostě zapnu čítač, který napočítá 1000 cca. za 1s. a když se mihne snímač tak hodnotu přečtu, spočtu ukážu a vynuluji. a pořád dokola. Když se signál neoběví do 3s tak zobrazím nulu. A rychlost se zobrazuje tedy každou otočkou. když jedete rychleji tak jse to teoreticky obnovuje vícekrát ale má to svou logiku. Tak prakticky vzato jsem potěšen :) Sice je možnost vylepšit ten engin o to přerušení tak jak by mělo být ale na moji motorku či kolo to stačí :D

Ještě krom parametrů. Dokáže to měřit do 255Kmh z důvodu použíté proměné byte která může nabírat hodnot od 0 do 255.
toť asi vše.

Napsal: 21 kvě 2007, 16:54
od caven
A nehodíš jsem schéma a program ??? Vypadá to zajímavě

Napsal: 26 kvě 2007, 15:40
od luccas
caven píše:A nehodíš jsem schéma a program ??? Vypadá to zajímavě


Musím to ještě všechno dodělat :) takže až to bude tak se ozvu.

Napsal: 26 kvě 2007, 16:01
od DMF
Zkus tam použít ten timer.Mužeš mu nastavit předděličku a měřit počet impulsů za delší čas.Měření by bylo přesnější. Existuje řada principů ,jak to řešit.