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?
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.
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
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 | }
|
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.
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?
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.
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!
'result' wird in einem Register gehalten. Man kann nur Variablen, die im Speicher liegen überwachen.
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?
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.
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.