kevinonline
ik wil alles weten over pic stap voor stap
hallo,
ik wil de frequentie meten van een paar pulsen.
ik heb wat zitten zoeken op google en deze site, maar ik kom er nog niet uit
ik gebruik een pic16F877.
het frequentie bereik zal tussen de 10KHz tot 60KHz moeten zijn, met een nauwkeurigheid van 0.1KHz.
ik heb begrepen dat dit het beste te doen zou zijn met de CCP module.
echter heb ik deze eigenlijk al in gebruik voor een PWM uitgang.
ik zat te denken om timer0 te gaan gebruiken om de periode te meten, maar de resolutie komt dan volgens mij erg slecht uit.
ook het berekenen van de frequentie is een uitdaging.
ik kan met een pic moeilijk 1 delen in meerdere stukjes.
tips en ideeën zijn welkom.
Hallo,
ik weet niet hoeveel periodes je kan meten,
tmr0 als interrupt op een fix freq, vb 20Hz
vervolgens tmr1 aantal perioden meten en resetten als tmr0 afloopt...
tmr0 kan je eventueel een langere tijd laten meten.
ik meet zo 10Mhz signalen zonder grote problemen.
(met een 18f4550 )
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je hebt 2 CCP modules, dus moet kunnen. PWM gebruikt timer2, en capture/compare timer1, dus ook daar geen probleem.
Ik zou wel een wat gangbaarder pic type kiezen, de 877 is wel erg oud (bijna 20 jaar). Een 16F1939 is pin compatible, goedkoper, en kan veel meer.
kevinonline
ik wil alles weten over pic stap voor stap
ja een andere pic zal ik nog eens gaan bestellen.
dat zal alleen nog wel even duren, dus zal ik het nog even met deze oude moeten doen.
Arco, je hebt gelijk. deze pic heeft inderdaad 2 ccp modules.
daar had ik even niet aan gedacht.
ik heb nog even wat data sheeds door genomen, maar wat ik me nog af vraag, als timer 1 gestart wordt dan gaat deze dus tellen.
de CCP modulle moet je instellen op rising of falling edge om op deze manier de duur van 1 periode te meten.
als er dan 2 triggers zijn geweest van B.V. rising edge dan zal de interupt bit hoog worden gemaakt na de 2e rising edge
de duur van dat voorval staat dan in CCPR1L EN CCPR1H.
maar telt timer1 al omhoog voordat de trigger van b.v. de eerste rising edge komt, of begint de timer pas te tellen bij de eerste edge?
ik hoop dat ik dit een beetje goed heb uitgelegd.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Als je "ingangsbereik" klein is, dan is het makkelijker. Laatst was er iemand die van onder de 10 Hz tot 100kHz wilde meten. Dat is stukken lastiger.
Een super-simpele oplossing is om bijvoorbeeld 0.1 sec het aantal pulsen te tellen. Je zult dan iets van 10x nauwkeuriger zijn dan je eis (behoudens afwijkingen van het kristal van je PIC).
Ga je dan ook nog meten WANNEER de pulsen in je 100ms meetperiode komen, dan kan je nog veel nauwkeuriger meten. Maar volgens je specs is dat allemaal nergens voor nodig.
Timer 1 telt door, dus je captured 2 flanken en trekt de waardes van elkaar af, dan heb je de periode.
De nauwkeurigheid kan je (als het een periodiek signaal is) verhogen door de prescaler te gebruiken (capture elke 4de of 16de flank).
Ik heb zoiets ooit eens gebruikt om LF frequenties te meten met resoluties < .1 Hz zonder absurde gate tijden.
kevinonline
ik wil alles weten over pic stap voor stap
ik ben weer begonnen, alleen voor een ander project.
ik wil de RPM meten van mijn boormachine.
deze heeft een trigger wiel met 16 pulsen per omwenteling.
de maximaal haalbare RPM is 3000.
wat overeen komt met 800 Hz.
op zijn laagste toerental heeft hij ongeveer 10 Hz.
als ik het aantal pulsen per seconden meet, dan krijg ik wel een aardige meetwaarde voor de RPM.
alleen ben ik niet zo blij met de stappen die hij weergeeft.
voor het mooie zou ik graag willen dat ik de RPM kan weergeven met stappen van 1.
heeft iemand een idee hoe ik dit kan doen?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Het is niet meer als de tijd tussen twee opgaande flanken meten, en daar wat berekeningen op loslaten...
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Bij 800 hz duurt 1 periode 1.2 ms. Meet je dat met microseconde resolutie kan je op 1/1200 nauwkeurig zijn. Niet slecht.