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
Hill
Administrátor
Administrátor
Příspěvky: 18898
Registrován: 10 zář 2004, 02:00
Bydliště: Jičín, Český ráj

#16 Příspěvek od Hill »

Tak osahávej periodicky port a vyhodnocuj změnu - doteď tam byla jednička, odteď tam není - došlo ke změně a vyhodnocujeme čas do doby, kdy se tato změna bude opakovat.
Schválně pak dej vědět, jak jsi to dořešil, hlavně mě bude zajímat, jak budeš mít ošetřený údaj, aby se neměnil s každou nepatrnou změnou od impulsu k impulsu - je to otázka, jak dlouho musíš koukat na displej, než přečteš výsledek. Číselné vyjádření rychlosti se musí měnit proto velmi pomalu, abys neztrácel čas čtením.

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

#17 Příspěvek od luccas »

Hill píše:Tak osahávej periodicky port a vyhodnocuj změnu - doteď tam byla jednička, odteď tam není - došlo ke změně a vyhodnocujeme čas do doby, kdy se tato změna bude opakovat.
Schválně pak dej vědět, jak jsi to dořešil, hlavně mě bude zajímat, jak budeš mít ošetřený údaj, aby se neměnil s každou nepatrnou změnou od impulsu k impulsu - je to otázka, jak dlouho musíš koukat na displej, než přečteš výsledek. Číselné vyjádření rychlosti se musí měnit proto velmi pomalu, abys neztrácel čas čtením.
Ve čtvrtek budou součástky. Tak se dotoho plně pustím, zatím ted sbítám teorii :)

Honza_ZX10R

#18 Příspěvek od Honza_ZX10R »

U nìkterých motorek se mìní èíslice celkem rychle.Napøíklad ZX10R má zrychlení z 0-100 km/h za 3,2 s a z 0-200 km/h za ménì než 8s.Ty èísla tam skáèí tak rychle že se to nedá èíst.Èlovìk pøi zrychlení spolehlivì pøeète jen první èíslo (jestli jede pøes 100,nebo pøes 200)

Honza_ZX10R

#19 Příspěvek od Honza_ZX10R »

malá ukázka Hayabusy turbo:
http://www.youtube.com/watch?v=ud_gXPCMUDw

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

#20 Příspěvek od luccas »

Chtěl bych se zeptat znalých v mikropascalu. Jak vytvořit nějaký počítadlo (smyčku) co bude měřit přicházející impulsy I na nějaký port po určitou dobu t a pak aby to vyhodilo výsledek? a pořád dokola?

V mikropascalu dělám 3 dny tak fakt se opravdu učím :)

Děkuji.

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

#21 Příspěvek od luccas »

Tak po dlouhém hledání jsem našel něco takovéhoto:

Kód: Vybrat vše

//****************************************************************************** 
//This code is orogionally based on the "adconlcd" example provided with the 
//MikroElectronika MikroPascal Compiler. 
// 
//This revision of the code eliminates all interrupt routines.  Instead the timer1 
//register is used to count the number of low to high transitions that occur during 
//the sample period.  The value of timer1 is a word, so the maximum frequency that 
//this code can measure is 65535 Hz.  This code uses specific features of the 
//16F887A so porting to a different model chip may be difficult. 
// 
//Due to the fact that I am using timer1 with an external counter, the input signal 
//will have to be provided on RC0 (PortC, Pin 0) as this is a required by the PICs 
//hardware 
// 
//Also included in this version is test code that starts a PWM that can be used for 
//testing.  the output is RC2 (PortC, Pin2).  If you have an EasyPIC2 board you can 
//remove the pullup/down jumper on the buttons and simply hold dow RC0 and RC2 to 
//feed the PWM signal to the counter pin. 
// 
// INTERESTING NOTE ON "FOR" LOOPS: 
// If you are using a "for" loop with a byte or word variable and a decrimenting counter 
// like: 
// x:byte; 
// for x := 100 downto 0 do 
// The loop will run infinatly. This is because the compiler is looking for x to be 
// less than 0 to terminate the loop. Since Bytes and Words are only positive numbers 
// they will never be less than 0 (a byte with a value of 0 minus 1 is 255). 
//****************************************************************************** 

program FreqonLCD; 

var 
    Hits:word; 
    b:array[6] of char; 
const 
    OutFreq:word = 4000;    //for testing 
    SampleTime:Word = 1000; 
    {The following two constants provide the ability to accomodate for frequency 
    drift.  "CorrectionAmount" is the amount that ill be subtracted from the 
    frequency for every 1000 count of frequency} 
    CorrectionAmount:word = 3; 
{The following function activates the interrupt and waits "SampleTime". Even during the 
delay, the rise of portb pin0 will cause an interrupt} 
Function CollectSample:word; 
begin 
     delay_ms(1000); 
     setbit(portb,1); //set portb pin1 1 high, to act as an indicator that sampling had begun 
     TrisC := 1; //set portc pin 0 as in input 
     clearbit(T1CON,0); //make sure timer1 is not running 
     TMR1L := 0; //clear timer 1 low byte 
     TMR1H := 0; //clear timer1 high byte 
     {Set timer1 as external counter: 
      bit 6&7 (00) - ignored 
      bit 4&5 (00) - prescaler 1:1 
      bit 3 (0) - oscillator off 
      bit 2 (1) - do not sync with oscillator 
      bit 1 (1) - External source (RC0); 
      bit 0 (1) - timer1 enabled} 
     T1CON := %00000111; 
     delay_ms(SampleTime); //Wait the sample interval 
     clearbit(T1CON,0); //disable timer1 
     hits := (TMR1H*256)+TMR1L; //Build a word from 2 bytes 
     hits := hits - ((hits div 1000)*CorrectionAmount); //Adjust value to accomodate for freqency drift 
     result := hits *(1000 div SampleTime); //Accomodate for sample periods under 1 second 
     clearbit(portb,1); //Turn off the LED on portb pin 1 
end; 

begin 
     //Start test code 
     {Connect pin RC2 to RC0} 
     PWM_Init(OutFreq); 
     PWM_Change_Duty(127); 
     PWM_Start; 
     //End test code 
     PORTB := 0; // clear portb 
     TRISB := 1; // designate portb as output (LCD is connected to portb) 
     intcon := 0; // disable all interrupts 
     Lcd_init(PORTB); // initialize (4-bit interface connection) 
     lcd_cmd( LCD_CURSOR_OFF); // send command to LCD (cursor off) 
     lcd_cmd(LCD_CLEAR); 
     while true do 
     begin 
          hits := CollectSample; //perform the sampling process 
          WordToStr(hits,b);  //convert the word "hits" to a string 
          lcd_out(1,1,'Read Frequency:'); //Output first line on the LCD 
          lcd_out(2,1,'     '); 
          lcd_out(2,1,b); //write "b" to the second line of the LCD 
          lcd_out(2,7,'Hz');  //write "Hz" on second line 
     end; 
end.
Myslíte, že to je to co potřebuji? Nemám to zatím jak odskoušet. V simulátoru jsem nenašel jak simulovat vstupy.

Uživatelský avatar
MiLe
Příspěvky: 123
Registrován: 18 říj 2005, 02:00

#22 Příspěvek od MiLe »

ak chces rychlost udavat v Hz tak ano :)

Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 02:00
Kontaktovat uživatele:

#23 Příspěvek od jankop »

Nic ve zlém, ale když ani ve vyšším programovacím jazyku nedovedeš naprogramovat naprosto triviální úlohu, tak bych se do toho snad ani nepouštěl.

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

#24 Příspěvek od luccas »

jankop píše:Nic ve zlém, ale když ani ve vyšším programovacím jazyku nedovedeš naprogramovat naprosto triviální úlohu, tak bych se do toho snad ani nepouštěl.
Ale pochop, že ještě nevím jak ošetřit vstupy. Byť se jedná o vyší jazyk. Proto se ptám těch co otom něco ví. :roll:

Uživatelský avatar
MiLe
Příspěvky: 123
Registrován: 18 říj 2005, 02:00

#25 Příspěvek od MiLe »

luccas:
uz si sa nato vykaslal, alebo ti uz vsetko slape a nepotrebujes ziadne konzultacie?

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

#26 Příspěvek od luccas »

MiLe píše:luccas:
uz si sa nato vykaslal, alebo ti uz vsetko slape a nepotrebujes ziadne konzultacie?
Nevykaslal! Jen si zatím pomalu všechno testuji na kontaktním poli. a pomaloučku nato přicházím. Není to žádná sranda :)

Až to bude jestli to bude tak se ozvu.

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

#27 Příspěvek od luccas »

NO tak jsem se ozval trochu dříve. Rád bych jse zeptal jak udělat co nejjednodušeji bezzákmitové tlačítko? Testoval jsem to na diodě. Stiskem zapni a stiskem vypni. Ale když jsem držel tlačítko tak to blikalo podle toho jaké jsem měl nadstavné spoždění. Ale nenapadámě jak udělat jednoduše to aby se stiskem zaplno a dokud nepustím a nestisknu znova aby nezhasla... Paměti je málo no. :oops:

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

#28 Příspěvek od Modemo »

luccas píše:NO tak jsem se ozval trochu dříve. Rád bych jse zeptal jak udělat co nejjednodušeji bezzákmitové tlačítko? Testoval jsem to na diodě. Stiskem zapni a stiskem vypni. Ale když jsem držel tlačítko tak to blikalo podle toho jaké jsem měl nadstavné spoždění. Ale nenapadámě jak udělat jednoduše to aby se stiskem zaplno a dokud nepustím a nestisknu znova aby nezhasla... Paměti je málo no. :oops:
ale co sa bojis, staci na konci rutinky dat cakanie na pustenie tlacitka a za tym oneskorenie tak 100ms aby dozneli zakmity :wink:

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

#29 Příspěvek od luccas »

Modemo píše:
luccas píše:NO tak jsem se ozval trochu dříve. Rád bych jse zeptal jak udělat co nejjednodušeji bezzákmitové tlačítko? Testoval jsem to na diodě. Stiskem zapni a stiskem vypni. Ale když jsem držel tlačítko tak to blikalo podle toho jaké jsem měl nadstavné spoždění. Ale nenapadámě jak udělat jednoduše to aby se stiskem zaplno a dokud nepustím a nestisknu znova aby nezhasla... Paměti je málo no. :oops:
ale co sa bojis, staci na konci rutinky dat cakanie na pustenie tlacitka a za tym oneskorenie tak 100ms aby dozneli zakmity :wink:
asi takto. stisk testuji následovně. (běží to v cyklu);

if TestBit(portB, 0) = 1 then i:=i+1;

pokud je na vstupu seplý spínač tak to přičte jedničku.

když tam dám delay_ms(100);

delay_ms(100);
if TestBit(portB, 0) = 1 then i:=i+1;

tady to přičítá jen pokud se trefím mezi těch 100ms a pokud čudlík přidržím tak zase přičítá vkuse.

Když tam šoupnu toto co mě napadlo

repeat
begin
if TestBit(portB, 0) = 1 then i:=i+1;

repeat
begin
if TestBit(portB, 0) = 1 then ok:=false else ok:=true;
end;
until ok;
end;
until ok;
ok:=false;

tak je to sice pěkné ale program vlastně stojí pokud to držím a funguje to prostě nějak čudně. Dokonce si myslím, že to je pěkně hnusné řešení. :( ale nechci se na to vykašlat. jen to vydím na delší dobu.

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

#30 Příspěvek od luccas »

jo a mám to :)

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

jednoduché ale účiné :D

Odpovědět

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