16 Bit Arithmetik

Gast #1901940
Lesenswert?

Hallo, ich habe ein Problem.

ich will eine Zeit zwischen zwei positiven Flanken stoppen. Dazu nutze 
ich den Timer1, merke mir die Overflows in r18 und die Zyklenanzahl aus 
HIGH(TCNT1) in r17 und LOW(TCNT1) in r16. Ich nutze einen 4 MHz 
Oszillator und einen ATMEGA8. Um jetzt auf die Zeit zu kommen, würde ich 
jetzt so rechnen:

t = 0,25us * ( r18 * 65.536 + r17 * ... + r16 * ... )

...wie kann ich mit den in TCNT1 stehenden Anzahl der Zyklen rechnen ?
...für die Rechnung r18 * 65536 bräuchte ich ein 24-Bit Register ?

Ich hoffe, ihr könnt mir weiterhelfen!
#1901949
Lesenswert?

@Daniel (Gast)

>ich will eine Zeit zwischen zwei positiven Flanken stoppen.

In welchem Bereich liegen die Zeiten?

> Dazu nutze
>ich den Timer1, merke mir die Overflows in r18 und die Zyklenanzahl aus
>HIGH(TCNT1) in r17 und LOW(TCNT1) in r16.

Macht man so nicht, dafür gibt es die ICP Funktion. Und bei Überläufen 
muss man aufpassen, dass man da keine Race Condtions reinbekommt.

>t = 0,25us * ( r18 * 65.536 + r17 * ... + r16 * ... )

>...wie kann ich mit den in TCNT1 stehenden Anzahl der Zyklen rechnen ?
>...für die Rechnung r18 * 65536 bräuchte ich ein 24-Bit Register ?

sieht so aus.

http://www.mikrocontroller.net/articles/AVR_Arithmetik

MFG
Falk
Gast #1902770
Lesenswert?

Hey Falk,

danke für deine Antwort. Der ICP Pin vereinfacht den Start aber kann man 
den Timer darüber auch wieder stoppen? (Mit der "2" positiven Flanke)

Ich muss zugeben dass mir die Arithmetik-Beispiele von deinem Link nicht 
all zu sehr helfen. Gibt es Bücher oder andere Seiten die mir da weiter 
helfen könnten?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren