Forum: Mikrocontroller und Digitale Elektronik LEDs Helligkeit verändern


von Christian K. (bulls3y3)


Lesenswert?

Hallo, ich versuche gerade mit einem Testboard (8051) die Leds 
anzusteuern und deren helligkeit zu verändern.
Gibt es da schon irgendwelche fertigen Codeteile, da ich das nicht auf 
die reihe bekomme.wäre auch über einen hilfreichen link dankbar!

mfg Christian

von Daniel (Gast)


Lesenswert?

naja viel code brauchst du nicht, da du ja nur ein einfaches pwm 
benötigst, je nach ausstattung musst oder kanst du dieses soft- oder 
hardwaremässig erzeugen...

zeig mal was du hast..

von Peter D. (peda)


Lesenswert?


von Christian K. (bulls3y3)


Lesenswert?

@ daniel, was meinst du, was ich habe?
habe nen kleines testboard mit 8051 und steuere das über keil µVision. 
Led blinken lassen ist ja kein ding, main loop und dann bestimmtes 
muster an port1 ausgeben lassen.
doch wie bekomm ich die leds z.b. gedimmt? habe noch nicht viel ahnung 
und will da langsam einsteigen

von Johannes S. (johanness)


Lesenswert?

PWM bedeutet doch nur, dass man den Pin oft ein- und ausschaltet, das 
Verhältnis von Ein- zu Gesamtzeit gibt dann die relative Helligkeit an.

Wenn Du den Link von Peter ansiehst findest Du dort effektiv alles, um 
eine Software-PWM mittels Timerinterrupts zu erzeugen, das klappt 
bestimmt auch mit deinem 8051 und deinem Testboard, bis auf den Teil 
"knight_rider()" ist das alles sehr allgemein gehalten.

Wenn Du zu den Portpins noch den Timerinterrupt ansteuern kannst hast Du 
bereits alles zusammen!

von Karl H. (kbuchegg)


Lesenswert?

Wenn du die Leds blinken lassen kannst, hast du schon die
erste Hürde zu einer Software PWM geschafft.

Dimmen ist auch nichts anderes als Blinken. Das Blinken
ist so schnell, dass man das eigentliche Blinken nicht mehr
sieht. Der Dimmgrad ist nichts anderes als das Verhätlnis
von Ein-Zeit zu Aus-Zeit. Je kürzer die Ein-Zeit ist, desto
dunkler erscheint die LED.

von Christian K. (bulls3y3)


Lesenswert?

ich danke euch für eure erklärungen!
werde es heute mal ausprobieren, denke aber es wird funktionieren dank 
eurer hilfe!

mfg christian

von Christian K. (bulls3y3)


Lesenswert?

versuche gerade den code zu verstehen
jedoch was macht dieser teil? was bedeutet das --?
>if( --pwm[0] == 0 )
>    PWM0 = 0;

oder
>pwm[0]--;

von Olli (Gast)


Lesenswert?

i-- ist dasselbe wie i=i-1

von Johannes S. (johanness)


Lesenswert?

Für
1
i--; // entspricht i=i-1;
2
--i; // entspricht ebenfalls i=i-1;
gilt das, aber i-- ist nicht immer dasselbe wie i=i-1.

Überlegen wir uns mal folgendes:

i=1;
if (i--==0)
  tolleFunktion();

oder

i=1;
if (--i==0)
  tolleFunktion();

Nach diesem Code ist immer i==0.
Aber im ersten Teil wird i erst ausgewertet (und (1==0)==false), im 
zweiten Teil erst dekrementiert, dann ausgewertet, d.h. die Bedingung 
ist nur im zweiten Fall erfüllt.

An dieser Stelle irrt man sich um 1, wenn man die -- oder ++ auf die 
falsche Seite macht, Quelle vieler schöner Fehler in meinen wenigen 
C-Programmen, wenn man z.B. irgendwo bei i==0 auf A[--i] zugreift und 
eigentlich A[i--] meinte, das gibt böse Fehler, wenn man in den falschen 
Speicherbereich kommt ;)

von Karl H. (kbuchegg)


Lesenswert?


           |   Phrase            | Phrase
 ----------+---------------------+----------------
 Kurzform  |   j = i--;          | j = --i;
           |                     |
 Langform  |   j = i;            | i = i - 1;
           |   i = i - 1;        | j = i;
           |                     |

             j bekommt den Wert    j bekommt den
             von i vor der         manipulierten
             Manipulation          Wert von i

Analog geht i++ bzw ++i

von Johannes S. (johanness)


Lesenswert?

Schön übersichtlich dargestellt, ich glaub so versteht es wirklich jeder 
:)

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.