mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage C-Programmierung


Autor: Franz Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if (inputPWM > pwmMax)
   inputPWM = pwmMax;

macht das, was du beschrieben hast. Das wusstest du aber vermutlich 
selber. Also: Was ist die Frage?

Oliver

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.