LEDs Helligkeit verändern

OP #565353
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
OP #565605
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
#565651
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!
#565652
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.
#566367
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 ;)

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