Zitat Zitat von Besserwessi

Es fehlt noch einige Male ein Volatile bei der Variablen deklaration - so wird der Compiler vermutlich etwas zu viel optimieren, weil er nicht weiss das da Werte in einer ISR verändert werden.

p.s.: Noch 2 Tipps:
1) ähnlich wie beim AD- kann man auch auf die ICP Register als 16 Bit Wert zugreifen. Man kann also gleich Time = ICP1 schreiben.
Danke das wusste ich nicht

Zitat Zitat von Besserwessi
2) lokale Variabeln (hier HB und LB) für die ISR sollte man auch wirklich als soche deklarieren und keine globalen Variablen nutzen. Der Compiler kann dann besser optimieren, und außerhalb der ISR sind die Variabeln ohnehin nicht zu gebrauchen. Mit globalen Variabeln sollte man ohnehin sparsam sein.
Wie deklariere ich Variablen für die ISR? Volatile benutzen?

und ich habe noch eine Frage:
Ich habe jetzt im Datenblatt nochmal alles durchgelesen bezüglich Timer2 CTC modus(der jetzt super funktioniert) und Timer1 Capture In modus. Aber einen Punkt finde ich nicht, wie verbinde ich den ICP Pin mit ICF flag? (Also wenn ICP(PD6) =high-> ICF = high-> Interrupt.

Zitat Zitat von Datenblatt Atmega644 Seite: 133
This flag is set when a capture event occurs on the ICP1 pin. When the Input Capture Register
(ICR1) is set by the WGMn3:0 to be used as the TOP value, the ICF1 Flag is set when the
counter reaches the TOP value.
ICF1 is automatically cleared when the Input Capture Interrupt Vector is executed. Alternatively,
ICF1 can be cleared by writing a logic one to its bit location.
Genau das muss ich machen, aber ich habe keinen Plan wie????