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
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..
@ 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
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!
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.
ich danke euch für eure erklärungen! werde es heute mal ausprobieren, denke aber es wird funktionieren dank eurer hilfe! mfg christian
versuche gerade den code zu verstehen jedoch was macht dieser teil? was bedeutet das --? >if( --pwm[0] == 0 ) > PWM0 = 0; oder >pwm[0]--;
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 ;)
| 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.