Hallo zusammen Ich möchte mit Hilfe eines PIC18F252 das Puls-Pause-Verhältnis eines anliegenden Rechtecksignales messen. Dazu wird nach jedem Interrupt durch eine positiven Flanke das Timer 1 (CCP1) ausgelesen und auf die Messung der negativen Flanke umgeschaltet. Dieser Vorgang wiederholt sich laufend. Das Programm funktioniert soweit auch sehr gut. Das Problem ist nur, dass der gemessene Zählerwert genau einem Zweiundreissigstel entspricht. Soweit ich ich verstehe wird Timer 1 im Programm mit 5MHz getaktet. Der Prescaler ist auf 1 eingestellt. Bei einer Eingangsfrequenz von 100Hz und Duty von Puls-Pause-Verhältnis von 1 müssten die Zählerwerte nach Meiner Rechnung für den Puls und Pause demnach: Zählerwert für den Puls= 5MHz / 100Hz /2 = 25000 Zählewert für die Pause = 5MHz 100Hz 2 = 25000 Für Puls und Pause (im Programm PwmCycle und PwmDuty) erhält man die Werte: f-input=100Hz: PwmDuty = 1562; PwmCycle = 780 Vielleicht erkennt jemand von Euch das Problem Vielen Dank für Eure Rückmeldungen und vielen Dank Geri
Hallo Problem gelöst if (PIR1bits.CCP1IF != 0) // negative edge of phase set point { if (CCP1CONbits.CCP1M0 != 0) // check wahr { LowVal = CCPR1L; PwmCycle = CCPR1H; !!! hier sollte es nicht * sondern shift left um 8 bits PwmCycle = PwmCycle * 8 + LowVal; CCP1CONbits.CCP1M0 = 0; } } .. und weiter unten noch einmal das selbe. Jetzt funktioniert das Programm einwandfrei Beste Grüsse Geri
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.