Patrick schrieb:
> Den Input Capture Mode verwendet man eigentlich für Zeit Berechnungen
genau
> oder wäre der zum Zählen geeigneter ?
Nein.
Der Sinn des Capture Mode ist es, den aktuellen Zählerstand bei einem
externen Ereignis festzustellen. Und zwar möglichst verzögerungsfrei.
Eine Analogie wäre ein Rennen, bei dem der Auswertung nur eine Uhr mit
Sekundenzeiger hat. Jedesmal wenn der Mann an der Ziellinie 'jetzt'
schreit, liest man von der Uhr die Position des Sekundenzeigers ab
('Capture!') und zieht dann aus den so notierten Zeiten seine Schlüsse.
> Der Code würde dann so stimmen oder ?
> //Timer / Counter Overflow
> ISR (TIMER0_OVF_vect)
> {
> TCNT0 = 0;
Den brauchst du nicht auf 0 setzen.
Da hier ein Overflow statt gefunden hat, weisst du dass der Zähler
sowieso schon auf 0 ist.
Generell solltest du erst mal enorm skeptisch sein, wenn in einer
Timer-ISR am TCNT Register manipuliert wird. Es gibt zwar Fälle, in
denen es nicht anders geht, aber 70% aller Fälle sind dergestalt, dass
der Programmierer nicht weiß, wie es richtig geht.
> ....
> // aktiviere timer interrupt
> TIMSK |= (1 << TOIE0);
>
> // External Clock für fallende flanke
> TCCR0 |= (1 << CS02) | (1 << CS01);
> sei();
hier fehlt die Hauptschleife.
Ein Programm auf einem AVR sieht immer so aus1 | int main()
|
2 | {
|
3 | Initialisierungen
|
4 |
|
5 | gegebenenfalls ein sei()
|
6 |
|
7 | while( 1 ) {
|
8 | Hauptschleife
|
9 | }
|
10 | }
|
Selbst wenn die Hauptschleife leer ist, ist sie trotzdem vorhanden.
Immer.