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
Die PWM also in Software? ==> Soft-PWM. Lässt sich so auch auf einen '51er übertragen. Hardware-PWM hat er leider nicht.
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
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")
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.