Tachometr

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Modemo
Příspěvky: 90
Registrován: 13 kvě 2007, 02:00
Bydliště: Brno, Pov. Bystrica

#31 Příspěvek 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:

Houmer_other

#32 Příspěvek 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?

Uživatelský avatar
Modemo
Příspěvky: 90
Registrován: 13 kvě 2007, 02:00
Bydliště: Brno, Pov. Bystrica

#33 Příspěvek 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:

Houmer_other

#34 Příspěvek 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"

Uživatelský avatar
luccas
Příspěvky: 192
Registrován: 06 kvě 2007, 02:00
Kontaktovat uživatele:

#35 Příspěvek 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

Uživatelský avatar
luccas
Příspěvky: 192
Registrován: 06 kvě 2007, 02:00
Kontaktovat uživatele:

#36 Příspěvek 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

DMF

#37 Příspěvek 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.

Uživatelský avatar
luccas
Příspěvky: 192
Registrován: 06 kvě 2007, 02:00
Kontaktovat uživatele:

#38 Příspěvek 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

DMF

#39 Příspěvek 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í

DMF

#40 Příspěvek od DMF »

Zkus kouknout do tohoto datasheetu na ten timer (možná ho máš):
http://www.copsu.cz/mikrop/download/ok.php?link=16F87xA

Uživatelský avatar
tominekk
Příspěvky: 295
Registrován: 16 črc 2004, 02:00
Bydliště: 49°11'30.229"N, 16°35'29.415"E
Kontaktovat uživatele:

#41 Příspěvek 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=
Chytrej člověk se učí chybama, ale jenom blbec těma svejma!

Uživatelský avatar
luccas
Příspěvky: 192
Registrován: 06 kvě 2007, 02:00
Kontaktovat uživatele:

#42 Příspěvek 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.

Uživatelský avatar
caven
Příspěvky: 417
Registrován: 15 srp 2006, 02:00

#43 Příspěvek od caven »

A nehodíš jsem schéma a program ??? Vypadá to zajímavě

Uživatelský avatar
luccas
Příspěvky: 192
Registrován: 06 kvě 2007, 02:00
Kontaktovat uživatele:

#44 Příspěvek 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.

DMF

#45 Příspěvek 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.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“