PWM einlesen

Gast #141300
Lesenswert?

Hi,

muss die Temperatur über einen Sensor der mir ein PWM Signal gibt
verarbeiten. Hab das einlesen einer PWM noch nie gemacht.

Ich hab mir überlegt das ich das über einen Interrupt der bei
steigender Flanke auslöst und dann mit X=X+1 zählz mache. Dann müsste
ja das X der Pulseite entsprechen.
Programm sieht folgendermasen aus:

int X=0;


void TAST (void) interrupt 0  /*Interruptroutine*/
{
X = X +1;
printf("Zahl = %d \n",Zahl);
}

Hab aber das Problem das ich das PWM Signal anscheinend zu schnell ist
und deswegen zählt der µC immer weiter und hört nicht auf.

Wie macht man das normalerweise mit dem einlesen einer PWM?

DANKE schon mal im Vorhinein.

LG Stefan
Gast #141301
Lesenswert?

Woher weist du wann der Impuls wieder die fallende Flanke hat?
Steigende Flanke erkennen, Zeit zählen, auf fallende Flanke erkennen
umstellen, wenn erkannt dann Zeit ende. Dann hast du die Impulsbreite.
Gast #141302
Lesenswert?

Sieh mal bei den Modellbauern nach, die müssen das auch machen.
Kann man beispielsweise so machen:
Interrupt0 auf beide Flanken stellen.(geht z.B. beim Mega8)
In der Interuptroutine pin auf high testen, war steigende flanke.
Variable "X" auf null setzen.
ist der Portpin LOW, war es eine fallende Flanke, Variable "X"
auslesen und anzeigen.
Die Variable "X" wird im Timerinterrupt unabhängig vom Int0 langhin
hochgezählt. Die Genauigkeit/Auflösung hängt von der
Zählgeschwindigkeit des Timers ab.
AxelR.

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