Forum: Mikrocontroller und Digitale Elektronik AVR: 16 Bit Timer als Pulsweitenmesser


von Markus (Gast)


Lesenswert?

Hi,
ich versuche grad aus dem Datenblatt schlau zu werden, schaffe es aber
nicht so ganz.
Aufgabe ist folgende: ich habe ein PWM Signal von dem ich die Pulslänge
messen möchte. Wie kann ich Timer1/3 beibringen das er bei einer
steigenden Flanke bei 0 anfangen soll zu zählen und bei einer fallenden
Flanke wieder aufhören und einen IRQ auslösen soll? Genauer gefragt:
gibt es einen Modus in dem er bei einer steigenden Flanke automatisch
den Counter auf 0 stellt und mit dem Zählen beginnt oder muß ich das in
der IRQ Routine erledigen?

Gruß
Markus

von Hannes L. (hannes)


Lesenswert?

Falls du den AVR meinst?

Da bietet sich der Input-Capture-Mode des Timer1 an. Ist im Datenblatt
des jeweiligen AVRs beschrieben.

...

von Markus (Gast)


Lesenswert?

Wie gesagt gehts um den AVR (steht im Betreff)
Ich hab grad das Datenblatt vom Mega162 vor mir (ich brauch nen
Controller mit 2 16 Bit Countern). Ich kapier nur nicht ganz ob der
Counter automatisch bei 0 anfängt bzw wieviel der Timer automatisch
macht. Der Ablauf ist so:

Steigende Flanke an ICPx: Timer startet mit dem Wert 0
Fallende Flanke an ICPx: Timer schreibt den Wert in das Capture
Register
Interrupt: Ich hole den Wert und mach meinen Kram.

Bisher hab ich nur verstanden das durch eine Pegeländerung (high/low
oder low/hig, je nachdem wie es programmiert ist) der Capture
getriggert wird. Dabei wird der aktuelle Timerstand in das Capture
Register kopiert und ein Interrupt ausgelöst.

Aber wie wird der Timer gestartet? Wird der auf 0 gesetzt oder läuft
der weiter? Ich blicks irgendwie nicht ganz

von Peter D. (peda)


Lesenswert?

Ganz einfach, Du machst Capture erst auf die eine Flanke und dann auf
die andere und ziehst die Werte dann voneinander ab.

Der Timer läuft ständig durch und läßt sich so noch für andere Sachen
benutzen (RTC, Tasten Entprellen, LED-Multiplex usw.).


Peter

von Markus (Gast)


Lesenswert?

ok, auf die idee bin ich nicht gekommen bei beiden Flanken nen Capture
zu machen. Ist halt blos ne blöde Rechnerei wenn man nen Überlauf hat.
THX

von Hannes L. (hannes)


Lesenswert?

Wieso blöde Rechnerei wegen Überlauf? Es genügt eine einfache
16-Bit-Subtraktion. Fehler entstehen erst, wenn der Impulsabstand
länger ist als der Zählumfang des Timers (zeitmäßig).

...

von Peter D. (peda)


Lesenswert?

"Ist halt blos ne blöde Rechnerei wenn man nen Überlauf hat."

Beschäftige Dich bitte nochmal mit Binärzahlen.

Den Überlauf kannst Du einfach knicken.

Die Differenz ist nämlich immer richtig, solange die Pulsbreite <16Bit
ist.


Peter

von Markus (Gast)


Lesenswert?

mea culpa, mea maxima culpa
ich glaub ich mach für heute Feierabend. Ich blick heut ja bald gar nix
mehr. Is natürlich logisch, aber ich seh den Wald vor lauter Bäumen
nicht mehr

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.