Problematika měření času mezi dvěma impulsy

Z

zanor

Guest
Jen tak pro zábavu jsem se snaží udělat si digitální RPM metr za svoje auto.Ale já nejsem schopen získat přesné čtení.
Mám měřit s osciloskopem, že by měla být ~ 0,06802721 sec (14,7 Hz) mezi luštěniny, kdy můj motor volnoběhu."TMR_count" v mých zdrojových kódů by mělo být 66 potom.Ale já
jsem dostat 61.Je ~ 0.00512 sec příliš pomalé, proč?
Existuje nějaké zpoždění v časovač / přerušit provoz nevím?

Jsem pomocí PIC16F84a na prkénko na krájení.Mohl by se "dlouhá" cesta z křišťálu na mikročipovými pomalu dolů?Kabely jsou ~ 3-4 cm ...

Tady je můj kód, v MikroC formátu.
Kód:# include <built_in.h> / / Pro Lo (); & Ahoj ();int i = 0;

int TMR_count = 0; / / 1x = 0.001024 sec

int TMR_value = 0; / / 1x = 0.000004 sec

int RPM = 0;

float time = 0;void přerušení () (

if (INTCON.INTF)

(

if (i <= 63)

(

TMR_value = TMR0;

TMR0 = 0;TIME = (TMR_count * 0,001024) (TMR_value * 0.000004); / / Doba mezi dvěma záblesky

Ot / min = (1 / ČAS) * 60 / / ot / min, 2 coiler a plýtvání jiskrových = 1 jiskrových / revoluceEEPROM_WRITE (i, TMR_count);

i ;

EEPROM_WRITE (i, TMR_value);

i ;TMR_count = 0;

)

INTCON.INTF = 0;

)

if (INTCON.T0IF)

(

TMR_count ;

INTCON.T0IF = 0;

)

)void main () (

PORTA = 0;

TRISA = 0b00001000;

PORTB = 0;

TRISB = 0b00000001;PORTB.B3 = 1;

Delay_MS (1000);

PORTB.B3 = 0;INTCON.RBIF = 0;INTCON.GIE = 1 / / Povolí Interrupts

INTCON.INTE = 1, / / Povolit přerušení na RB

INTCON.T0IE = 1, / / Povolit přerušení časovače 0 owerflowOPTION_REG = 0x81, / / Pullups DISABLED!while (1);)

 
Vykonávající jeden EEPROM zapisovat ve vašem přerušení funkce vede k vyčerpání EEPROM se alespoň na několik hodin a také načasování obrovské chyby.

 
FVM napsal:

Vykonávající jeden EEPROM zapisovat ve vašem přerušení funkce vede k vyčerpání EEPROM se alespoň na několik hodin a také načasování obrovské chyby.
 

Welcome to EDABoard.com

Sponsor

Back
Top