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
Falls du den AVR meinst? Da bietet sich der Input-Capture-Mode des Timer1 an. Ist im Datenblatt des jeweiligen AVRs beschrieben. ...
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
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
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
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). ...
"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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.