Sida 1 av 2

16F628 ccp och timer1

Postat: 18 mars 2007, 22:52:38
av buzzeer
Jag använder en 16F628 och ccp modulen för att mäta frekvensen. Jag undrar om man kan ändra Prescaler för att kunna mäta lägre frekvenser tex. 10 Hz ? eller vad skall man göra för att timern inte skall räkna för "långt"? . Har sökt i datablad men det går ändast att ändra Prescaler i Timer0. Har läst om hur ccp modulen funger i capture mode och då står det att

"Configure the Timer1 prescaler so Timer1 with run TMAX(1) without overflowing"

Postat: 18 mars 2007, 23:08:15
av sodjan
Kapitel och sida i databladet där TMAX nämns, tack.

Postat: 18 mars 2007, 23:37:29
av buzzeer
det står i ett datablad som heter ccp tips and trics

ww1.microchip.com/downloads/en/DeviceDoc/41214a.pdf

på sidan 9 om "Measuring the Period of a Square Wave"

Postat: 18 mars 2007, 23:41:33
av sodjan
OK.
Tja, det borde vara T1CKPS1/T1CKPS0 i T1CON de menar...

Postat: 19 mars 2007, 08:05:01
av buzzeer
Tack, nu borde de fungera lite bättre

:)

Uträkning av RPM

Postat: 19 mars 2007, 21:08:45
av buzzeer
vad händer med decimaler när man räknar med en pic 16F628

T3 = ( 375 / T2 ) * 100 * 1000


om T2 = 5000 och T3 skall bli 7500

T2 är pulslängden och T3 är RPM

Postat: 19 mars 2007, 21:54:46
av sodjan
En *PIC* har inte en susning om vad "decimaler" är för något.

Postat: 20 mars 2007, 07:22:30
av Icecap
Därför räknar man FÖRST:
unsigned long Mellanresultat = 375 * 100 * 1000 (=37500000)
T3 = Mellanresultat / T2;
Detta kan förkortas en del:
T3 = (unsigned long)37500000L / T2;

Postat: 20 mars 2007, 13:03:01
av sodjan
Det beror även en del på vad man igentligen menar med "7500".

Måste det bli 7500 +/- 0.5 ?
Eller är t.ex 7500 +/- 10 OK ?

Sen kanske man kan justera mättiderna så att konstanterna
i ekvationen blir t.ex jämna 2-potenser som är mycket enklare
att räkna med...

Postat: 21 mars 2007, 13:36:10
av buzzeer
svaret skulle få vara 7500 +/- 0,5

Postat: 21 mars 2007, 13:53:53
av buzzeer
Icecap skrev:Därför räknar man FÖRST:
unsigned long Mellanresultat = 375 * 100 * 1000 (=37500000)
T3 = Mellanresultat / T2;
Detta kan förkortas en del:
T3 = (unsigned long)37500000L / T2;

Måste man skriva det i assembler för PicBasicPro klarar väl inte av tal större än 16?

Postat: 21 mars 2007, 14:08:55
av Seven11
du menar 16-bitar? det är tal upp till (2^16)-1 = 65535...

EDIT: vad får dig att tro att den inte kan hantera större tal?

Postat: 21 mars 2007, 19:10:31
av Icecap
Det finns en anledning till att jag castade den till unsigned long som är en variabel som MikroC fint kan jobba med, det fungerar på min iaf!

Postat: 22 mars 2007, 12:45:01
av buzzeer
kan du skicka T3 = (unsigned long)37500000L / T2 i assembler så skulle jag bli glad.

Jag vet inget kommndo i PicBasicPro som skulle göra samma sak.

Postat: 22 mars 2007, 12:47:54
av Icecap
Javisst, det kan jag. Var ska jag skicka fakturan?