Forum: Mikrocontroller und Digitale Elektronik PIC16LF1527 PWM Abschaltung funktioniert nicht immer


von Gerhard M. (xdream)


Lesenswert?

Hallo Zusammen,

habe folgendes Problem: Ich dimme eine LED-Endstufe über CCP10. Das 
funktionert auch alles recht gut, nur wenn ich den PWM abschalte 
passiert es ab und an (~ 5-10%) dass der Ausgang auf high bleibt und die 
Endstufe statt abzuschalten maximalen Strom liefert.
Mit folgender Routine schalte ich den PWM zu bzw. ab:
1
void pwm_aus (void)
2
{
3
    CCP10CONbits.CCP10M3 = 0; //disable PWM
4
    CCP10CONbits.CCP10M2 = 0;
5
  return;
6
}
7
void pwm_an (void)
8
{
9
    CCP10CONbits.CCP10M3 = 1; //enable PWM
10
    CCP10CONbits.CCP10M2 = 1;
11
  return;
12
}
lt. Datenblatt ist das die richtige Methode.
Es gäbe natürlich die Möglichkeit den Pin beim Auschalten in der Methode 
als Ausgang zu definieren und auf 0 zu setzen (und in der anderen 
Methode zurückzusetzen), was aber keine schöne Lösung ist.
Hab auch schon eine Hardwarlösung für diese Problem, aber vielleicht 
mache ich ja auch etwas falsch.

Recht herzlichen Dank!

von B. S. (bestucki)


Lesenswert?

> lt. Datenblatt ist das die richtige Methode.
Welche Seite? Habs nicht gefunden.

Wie man das PWM Modul richtig einschaltet, steht auf Seite 193. 
Ausschalten ist nicht nötig, setze die PWM einfach auf 0%.

von Gerhard M. (xdream)


Lesenswert?

Seite 192 links unten Note 2 (allerdings muss "relinquish" nicht 
zwangsläufig bedeuten, dass der Pin immer explizit auf 0 gesetzt wird)

und Seite 197:

>  bit 3-0 CCPxM<3:0>: CCPx Mode Select bits

>  0000 = Capture/Compare/PWM off (resets CCPx module)

daraus würde ich ein explizites Abschalten des PWM-Blocks ableiten

von Erich (Gast)


Lesenswert?

>lt. Datenblatt ist das die richtige Methode.
Das glaube ich schon deswegen gar überhaupt niemals nicht,
weil es  Übergangs-Zwischenwerte  ergibt.
Dazu braucht man das Datenblatt noch nichtmal aufzurufen.
Gruss

von ,... (Gast)


Lesenswert?

Erich schrieb:
> Das glaube ich schon deswegen gar überhaupt niemals nicht,
> weil es  Übergangs-Zwischenwerte  ergibt.

und jetzt das Ganze nochmal ohne zu schtottern und im klaren Deutsch.

von Gerhard M. (xdream)


Lesenswert?

Nachtrag:
Auch zuerst CCPR10L und dann CCP10CON auf 0x00 zu setzen
(duty-cycle auf 0% und abschalten)funktioniert nicht immer.

Habe die Lösung von be stucki umgesetzt und dann funktioniert es auch.

Aber warum sich der PWM-Block nicht zuverlässig abschalten lässt bleibt 
mir weiterhin ein Rätsel.

von ,... (Gast)


Lesenswert?

Gerhard M. schrieb:
> Habe die Lösung von be stucki umgesetzt und dann funktioniert es auch.
>
> Aber warum sich der PWM-Block nicht zuverlässig abschalten lässt bleibt
> mir weiterhin ein Rätsel.

Poste doch deinen ganzen Quellcode, vielleicht hängts an einer anderen 
Stelle

von ,... (Gast)


Lesenswert?

,... schrieb:
> Gerhard M. schrieb:
>> Habe die Lösung von be stucki umgesetzt und dann funktioniert es auch.
>>
>> Aber warum sich der PWM-Block nicht zuverlässig abschalten lässt bleibt
>> mir weiterhin ein Rätsel.
>
> Poste doch deinen ganzen Quellcode, vielleicht hängts an einer anderen
> Stelle

Ist wohl nicht mehr wichtig.

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.