ik heb in een programma de volgende code

ISR(TIMER1_COMPA_vect)          // timer compare interrupt service routine
{
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1);   // toggle LED pin
}

Die word getriggerd als OCR1A ten einde loopt. Ik zou nu ook willen dat die getriggerd wordt bij het indrukken van een knop, en dat dan ook de teller van die timer reset. Dus als het getriggerd wordt door de knop moet alles gebeuren alsof het werd getriggerd door de timer. Dus als het om de second is moet het ook na 1 seconde opnieuw gebeuren na het indrukken van de knop.

Als je werkelijk alleen dat regeltje digitalWrite uitvoert, dan zou ik zeggen: op de plek in je programma waar je de input van die knop registreert, zet je gewoon die timer terug, en doe je die digitalWrite.

geen idee hoe dit in arduino sketch werkt, maar normaal zet je het TCNT1 register weer op 0.

edit: even bekeken, dit is dus gewoon TCNT1 = 0;

"programmeertechnisch" zou ik eigenlijk adviseren:


ISR(TIMER1_COMPA_vect)         
{  
  do_stuff (); 
}

...

if (...knop...) 
   do_stuff (); 

Maar als je in tijdnood zou komen (zal wel niet als dat iedere seconde moet lopen!), moet je weten dat een functie aanroepen in een ISR heel duur is. Dan weet de compiler niet meer welke registers de functie allemaal zal beschrijven, en dan moeten die dus allemaal op de stack gezet worden.
Als het toggelen van de LED port dus het enige is...


ISR(TIMER1_COMPA_vect)         
{  
   PINC = _BV (LED_PIN); 
   //^^^ juiste port invullen!
}

dan is dat dus VEEL sneller in de ISR...

ik heb je reactie eens bestudeerd en dat ik volgens verschillende bronnen massa's sneller. En heb het als volgt in gang gekregen.


ISR(TIMER1_COMPA_vect)         
{  
   PINB = _BV (5); 
}

Maar dit is dus onafhankelijk van hetgeen ik met die knop wil doen. Klopt dit? toch bedankt voor de snellere werking

Ja, dit was een truuk voor de ISR. Het loont vaak de moeite om niet te veel in een ISR te doen. Gewoon een vlaggetje zetten en ASAP in je mainroutine er wat aan doen. Hangt een beetje af van waar je mee bezig bent. Maar goed, dat is mijn "stijl" van programmeren. Anderen (ik misschien ook in andere omstandigheden) stoppen juist veel/alles in interrupts.