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)
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)