Verständnisfrage C-Programmierung

Gast #1198757
Lesenswert?
• ▲
▼
Guten Tag allerseits,

ich wende mich mit einer wahrscheinlich simplen, aber für mich nicht 
ganz einleuchtenden Frage an Euch:

Und zwar bin ich dran, eine PWM-Anwendung zu programmieren, welche ich 
softwaremäßig im Maximalstrom limitieren kann.

Genauer: Die PWM-Auflösung beträgt 0 bis 255, d.h. 255 entsprechen 100% 
des Stroms. Der Wert kommt seriell über ein DMX-Pult. Um den maximalen 
Strom jedoch anwendungsspezifisch in der Höhe limitieren zu können, 
möchte ich einfach den Wert 0 bis 255 verändern. Meine Vorstellung wäre, 
dass das Pult immer 0 bis 255 sendet, wenn ich den Strom jedoch auf 
maximal 50% limitieren will, nach der Berechnung nur noch 0 bis 127 an 
den PWM-Ausgang gelangt.

Danke im Voraus

F.J.
#1198805
Lesenswert?
• ▲
▼
Franz Josef wrote:
> Genauer: Die PWM-Auflösung beträgt 0 bis 255, d.h. 255 entsprechen 100%
> des Stroms. Der Wert kommt seriell über ein DMX-Pult. Um den maximalen
> Strom jedoch anwendungsspezifisch in der Höhe limitieren zu können,
> möchte ich einfach den Wert 0 bis 255 verändern. Meine Vorstellung wäre,
> dass das Pult immer 0 bis 255 sendet, wenn ich den Strom jedoch auf
> maximal 50% limitieren will, nach der Berechnung nur noch 0 bis 127 an
> den PWM-Ausgang gelangt.

Wenn ich das richtig verstanden habe willst du den ankommenden Wert neu 
skalieren, so daß der Eingangswert z.B. halbiert wird bei 50%?

Dann brauchst du den ankommenden Wert (0-255) einfach nur durch 2 zu 
teilen. Oder wenn du in % arbeiten willst eben teiler=100/prozent und 
neu=alt/teiler. Diese Variante funktioniert mit 8Bit Ganzzahlen 
natürlich immer nur mit Rundungsfehler. Wenn du mit Fließkommazahlen 
arbeiten willst kannst du auch direkt neu=alt*prozent/100 rechnen. Aber 
Fließkommazahlen sind immer sehr rechenaufwendig und brauchen viel Code.

Oder willst du den ankommenden Wert einfach nur bei 50% abschneiden?

Dann kannst du die eben schon erwähnte Variante benutzen.

Ciao,
     Rainer
#1198871
Lesenswert?
• ▲
▼
Hallo,

die Version, den Maximalwert zu scalieren, ging auch noch.
nimm den kommenden Wert 0...255 (wert).
Nimm die maximalen Strom 0...255 (strom).

Nimm (strom * wert) / 256.
Ist in ASM ein mul mit 2 Takten und ein mov aus r1, sollte auch in C 
schnell genug sein.

Gruß aus Berlin
Michael

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