Forum: Mikrocontroller und Digitale Elektronik Formel PWM Tabelle für LED-Fading


von M. G. (ixil96)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe eine Frage zum Umgang mit der Formel aus dem LED-Fading 
Tutorial!
Wofür steht die Variable r ?

Vielleicht kann hier jemand diese Formel genau erklären?

von Yalu X. (yalu) (Moderator)


Lesenswert?

rx und ry sind die Wertebereiche von x bzw. y. Mit der Formel wird eine
in y-Richtung nach unten verschobene Exponentialfunktion mit der Basis b
definiert, die für x=0 den Wert y=0 und für x=rx den Wert y=ry hat.

von Frank M. (frank_m35)


Lesenswert?

Oft hilft es sich die Sache einfach mal graphisch darstellen zu lassen:
http://www.wolframalpha.com/input/?i=plot%2820%5E%28x%2F100%29%2F%2820-1%29*255%2C+x%3D0..100%29

r_y und r_x sind einfach Skalierungsfaktoren
r_y definiert dir somit den Bereich deiner Ausgabe (y-Achse im 
Schaubild)
r_x definiert dir den Bereich in dem deine Eingabe arbeiten wird. 
(x-Achse im Schaubild)

ist r_y=1 und r_x=1, so gibst du der Funktion Werte zwischen 0 und 1 und 
erhälst Werte zwischen 0 und 1
http://www.wolframalpha.com/input/?i=plot%2820%5E%28x%2F1%29%2F%2820-1%29*1%2C+x%3D0..1%29

von M. G. (ixil96)


Lesenswert?

Ich bin nun gerade dabei, die Berechnung mit der Formel im Programm 
umzusetzen, erhalte aber für y nur den Wert 0?

Was mache ich hier falsch?
1
while(1)
2
  {
3
    for (int i=0; i<=254; i++)
4
    {
5
      float y = ((20^(i/100))/(20-1))*100;
6
      OCR1A = y;
7
    }
8
  }

von Karl H. (kbuchegg)


Lesenswert?

m. g. schrieb:


>       float y = ((20^(i/100))/(20-1))*100;

^  ist die XOR Operation und nicht die Potenzoperation.

integer dividiert duch integer ergibt wieder einen integer (also eine 
ganze Zahl).

Eventuell doch mal die Grundlagen der Programmiersprache in der 
Literatur nachlesen? Das alles sind ganz einfache Dinge, die in jedem 
C-Buch ausreichend beschrieben sind.

Wenn es eine Programmiersprache gibt, für die gilt, dass man sie nicht 
so einfach einfach so aus dem Bauch heraus oder durch Betrachten von 
anderem Code 'lernen' kann, dann ist das wohl C. Wer denkt, er kommt 
ohne das Durcharbeiten eines C-Buchs oder zumindest eines erstklassigen 
Tutorials über die Runden, der hat mit Zitronen gehandelt.

von M. G. (ixil96)


Angehängte Dateien:

Lesenswert?

Danke, bin in math.h fündig geworden.

Wenn ich das im Studio6 testen will, erhalte ich im watch-Fenster aber 
kein Ergebnis!

Was kann hier der Fehler sein?

von Yalu X. (yalu) (Moderator)


Lesenswert?

m. g. schrieb:
> Was kann hier der Fehler sein?

Den Grund hast du doch schon als Screenshot gepostet: "result: Optimized
way". Du musst mit dem Ergebis schon etwas Sinnvolles anstellen (oder
zumindest so tun, als ob), sonst denkt der Compiler, die gesamte
Berechnung sei für die Katz und lässt sie einfach weg.

Du kannst das Ergebnis bspw. einer volatile-Variablen oder einem
Port-Register zuweisen, um das Wegoptimieren zu verhindern.

von M. G. (ixil96)


Lesenswert?

Ich habe nun
1
OCR1A = result;

zugewiesen.

Das Ergebnis am Portausgang stimmt, aber beim Debuggen kann ich die 
Variable result noch immer nicht überwachen. Das Ergebnis im 
watch-Fenster ist gleich wie zuvor!

von Ralf G. (ralg)


Lesenswert?

'result' wird  in einem Register gehalten. Man kann nur Variablen, die 
im Speicher liegen überwachen.

von M. G. (ixil96)


Lesenswert?

Ralf G. schrieb:
> 'result' wird  in einem Register gehalten. Man kann nur Variablen, die
> im Speicher liegen überwachen.

Kannst du mir das bitte näher erläutern?
Wie kann ich es machen, dass ich das Ergebnis im watch-Fenster sehe?

von Ralf G. (ralg)


Lesenswert?

m. g. schrieb:
> Kannst du mir das bitte näher erläutern?
Naja, warum soll der µC lange Speicheroperationen machen, wenn von den 
vielen Registern kaum eins belegt ist?

> Wie kann ich es machen, dass ich das Ergebnis im watch-Fenster sehe?
Ausnahmsweise die zu überwachende Variable mal 'volatile' deklarieren:
Yalu X. schrieb:
> Du kannst das Ergebnis bspw. einer volatile-Variablen oder einem
> Port-Register zuweisen, um das Wegoptimieren zu verhindern.

von Michael (Gast)


Lesenswert?

oder optimize mal wegnehmen.

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.