Home › FORUM › Microcontrollers › Pulzen blijven tellen terwijl je uitleest

FORUM

Log in om antwoord te posten of de notificatie-service te gebruiken.

Onderwerp: Pulzen blijven tellen terwijl je uitleest

Author Post

Henko1

499 berichten

Expert
Expert

Read post 30-01-2012 21:36

Hallo Allen,

Hoe kun je nu pulzen van 0,1 sec die op de ingang RA1 binnen komen van een Pic 16f blijven tellen terwijl je ze wil uitlezen.
Naar mijn gevoel mis je dan enkele 0,1 secondes op het moment dat je uitleest.

Is het wel mogelijk om uit te lezen terwijl het tellen dan doorgaat?

Groet Henk.

jippie

237 berichten

Die hard
Die hard

Read post 30-01-2012 21:49

Ik ken geen PIC'jes, maar je zou eens kunnen google'en op 'interrupt routine'.

Het tellen doe je in de interrupt routine en het uitlezen in de hoofdlus. De interrupt routine draait op de achtergrond, wordt gestart als er een puls op een bepaalde ingang binnen komt. Als de interrupt routine klaar is gaat het ding weer precies verder waar het gebleven was.

petrus bitbyter

418 berichten

Expert
Expert

Read post 30-01-2012 22:11

Het hangt van de schakeling en van het programma af. Veel PICs hebben meer dan één timer/counter aan boord die elk hun eigen instelling en behandeling nodig hebben, ook weer afhankelijk van wat je ermee wilt doen. In het algemeen blijft een PIC doortellen tijdens het uitlezen maar dat is dus niet onder alle omstandigheden zo. Je zult dus eerst goed moeten weten wat je wilt en daarna de datasheet raadplegen om na te gaan of dat met de PIC die je voor ogen staat ook kan.

petrus bitbyter

Arjen H.

1077 berichten

Expert¹
Expert¹

Read post 31-01-2012 09:34

Interrupt routine is normaal gesproken meest voor de hand liggend. Maar als de frequentie van de pulsen niet te snel is, of anders gezegd als de hoofdlus van het programma snel genoeg is dan kun je ook het volgende overwegen.

int counter = 0;
bool pulshigh = false;

while(1)  // hoofdlus van programma
{
  // doe hier wat het hoofdprogramma allemaal moet doen
  // maar dit mag niet te lang duren
  
  if (pulshigh == true) && (RA1 == low)  // neergaande flank
  {
    pulshigh = false;
  }
  if (pulshigh == false) && (RA1 == high)  // opgaande flank
  {
    counter = counter + 1;
    pulshigh = true;
  }
}



N.B. Let bij het tellen er wel op dat je niet over de bovengrens van de variabele gaat want dan krijg je rare dingen. Bij een integer ga je bijvoorbeeld van 32767 naar -32768.

Bericht bewerkt door Arjen H. op 31-01-2012 09:34

Bericht bewerkt door Arjen H. op 31-01-2012 09:35

Bericht bewerkt door Arjen H. op 31-01-2012 09:36

Henko1

499 berichten

Expert
Expert

Read post 04-02-2012 17:19

Ok,

Dank,

Achteraf had ik dat zelf ook kunnen bedenken.
Maar soms moet ik wakker geschud worden.
Ik ben soms met te veel dingen bezig.

Henk.

Log in om antwoord te posten of de notificatie-service te gebruiken.

Payoff
Payoff

Volg ons ook op:

      

Direct doen

The School of Electronics

 

Elektor eVents, vakboeken, cursussen en meer. Kortom, innovatief studie- en onderwijsmateriaal met educatieve content!

Nu in prijs verlaagd

Elektor OSPV1

Tijdelijk € 210,- korting!

Dit zelfbalancerende indoor voertuig is ideaal voor bijvoorbeeld fabriekshal, magazijn of school.