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?