Forum: Mikrocontroller und Digitale Elektronik PWM programmieren im AN2131


von Alex Schauer (Gast)


Lesenswert?

Hallo ich bin hier auf das tolle forum gestossen, ich glaube ich werde 
hier hilfe finden :)

Es geht um eine PWM. WIe programmiert man eine PWM mit einen µC.
Mir geht durch den Kopf, eine for-Schleife zu machen und in ihr 
folgendes:

for(int i=0;i<10;i++)
{
OEB=0xFF;
}
OEB=0x00;

Dh. der positive ausgang bleibt länger eingeschalten und somit hat man 
eine PWM.
Aber ich habe gehört es geht anders auch, weil hier verändere ich ja 
auch meine Periodendauer bei dieser methode, ich will aber das die 
Periodendauer 30µs beträgt. zB.: 20µs EIN und 10µs AUS.
Hat wer eine Idee?

Danke im Vorhinein :D MFG Alex

von Εrnst B. (ernst)


Lesenswert?

Die PWM also in Software? ==> Soft-PWM. Lässt sich so auch auf einen 
'51er übertragen.

Hardware-PWM hat er leider nicht.

von Alex Schauer (Gast)


Lesenswert?

Ja genau in SOftware, im KeilµVision in C.    Mein Vorschlag 
funktioniert ja auch aber ich will die periodendauer nicht verändern 
sondern sie soll gleich bleiben und nur EIN und AUSSCHALTZEIT sollten 
sich ändern.
Gruß Alex

von Εrnst B. (ernst)


Lesenswert?

Alex Schauer schrieb:
> Ja genau in SOftware, im KeilµVision in C.    Mein Vorschlag
> funktioniert ja auch aber ich will die periodendauer nicht verändern
> sondern sie soll gleich bleiben und nur EIN und AUSSCHALTZEIT sollten
> sich ändern.

Endlosschleife:
1
int pwm_wert;
2
do {
3
 for(int i=0;i<30;i++) {
4
    if (i>pwm_wert) 
5
      PORT_ANSCHALTEN()
6
    else 
7
      PORT_ABSCHALTEN();
8
  }
9
} while (1)

Periodendauer ist dann immer "30", über "pwm_wert" kannst du die 
Einschaltdauer einstellen.

Statt "int" ggfs. 8-Bit-Variable nehmen ("uint8_t" bzw "unsigend char")

von Alex (Gast)


Lesenswert?

Danke für die schnelle Antwort. Aber ich verstehe das nicht , esagen wir 
mal das pwm_wert =10 ist. Das heisst dann das der Ausgang 0 ist weil ja 
i nicht größer als 10 ist. So sagen wir das die schleife jetzt bei 11 
angelangt ist, dann schaltet alles durch. Und danach bleibt ja immer 
alles durchgeschaltet weil ja das ''i'' dann immer grödßer bleibt, dh. 
es kommt ja dann nicht mehr zum einschalten oder? MFG

von Michael (Gast)


Lesenswert?

Alex schrieb:
> dh. es kommt ja dann nicht mehr zum einschalten oder? MFG

Irgendwann ist dir for-Schleife durch und dann geht's wegen do-while 
wieder mit i=0 los
;-)

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.