Also bei einem Digitalsignal sind die Flanken im Prinzip die Übergänge von einem Pegel auf den anderen.

Eine fallende Flanke ist dabei ein Übergang von High auf Low (wie er z.B. beim Drücken des Tasters entsteht, falls dieser gegen GND schaltet), und eine steigende Flanke dementsprechend ein Übergang von Low auf High.

Die externen Interrupts eines ATmega kann man nun so konfigurieren, daß sie in unterschiedlichen Situationen ausgelöst werden, z.B. eben bei einer steigenden oder einer fallenden Flanke.


Da ein (gegen GND schaltender) Taster bei Betätigung eine fallende Flanke erzeugt, und beim Loslassen eine steigende, kann man mit Hilfe eines Interrupts leicht feststellen wann ein Taster gedrückt, und wann er wieder losgelassen wurde.


edit:
wichtig dabei ist übrigens, daß die Taster hardwaremäßig entprellt wurden.
sie benötigen also jeweils einen nachgeschalteten RC-Tiefpass, und idealerweise zusätzlich noch einen sogenannten "Schmitt-Trigger" (notfalls reicht aber auch der Tiefpass, wenn er etwas großzügiger dimensioniert ist).


Was die Variable betrifft, ist die Lösung eigentlich recht simpel...

Entweder du verwendest mehrere Variablen, und realisierst damit eine Art interne "Uhr". Wenn du also eine 8-Bit Variable für ms hast, und möchtest gerne weiter zählen als bis 256ms, dann nimm noch eine zweite für z.B. 1/100s oder 1/10s, und zähle diese jeweils eins hoch wenn die ms-Variable den entsprechenden Wert erreicht hat (die ms Variable wird dann natürlich wieder auf 0 gesetzt). Nach diesem System kannst du deine "Uhr" bis auf Sekunden, Minuten, Stunden, Tage, Jahre oder gar Jahrhunderte erweitern, je nachdem wieviel du benötigst.

Eine andere Variante wäre es, bei der Subtraktion entsprechend zu berücksichtigen ob in der Zwischenzeit ein Überlauf stattgefunden hat (das merkt man ja leicht, wenn die Endzeit kleiner ist als die Startzeit). Die Einzige Beschränkung liegt dann natürlich darin, daß nur maximal ein Überlauf im gemessenen Zeitraum auftreten darf.

ich denke meist ist eine Kombination aus beiden Varianten am sinnvollsten, also z.B. Zählvariablen die bis in den Sekundenbereich gehen, und dann überprüfen ob in der gemessenen Zeit die Sekundenvariable einen Überlauf hatte (so könntest du dann Zeiten bis 256s messen).