Forum: Mikrocontroller und Digitale Elektronik uC-Code fürs faden


von Iain (Gast)


Lesenswert?

hi zusammen,

ich hab mir mal so ne RGB-Led-ansteuerung gebastelt mit einem PIC18F2520 
und einem ULN2003. wird vom pic aus ein "high" an einen der eingänge des 
ULN2003 angelegt, so schaltet der den entsprechenden ausgang auf gnd, 
und an den ausgängen sin die leds angeschlossen.

so, alles funktioniert wie es soll. ich kann problemlos die einzelnen 
farben ansteuern etc.

nun zu meiner frage: wie realisiere ich am besten/einfachsten den code 
damit ich ein schönes faden hinbekomme? ich hab da diverses mit PWM 
gelesen, aber so wirklich ahnung wie das geht hab ich nicht^^ ich bin 
eigentlich noch ein noob aber ich hoff ihr könnt mir helfen :)

ps: ich weiss nich ob ich noch was vergessen habe, sonst fragt einfach 
:)

von Phantomix X. (phantomix)


Lesenswert?

PWM ist einfach ein Rechtecksignal das, wenn du es glättest (dh der 
Durchschnittswert) einen Analogwert darstellt. Soll heißen bei PWM ist 
der Anteil von "An-Zeit" zu "Aus-Zeit" äquivalent zum Analogwert.
(Um eine LED zu faden brauchst du das ganze natürlich nicht glätten. das 
war nur zum Verständnis gedacht... Es reicht wenn das PWM-Signal schnell 
genug ist damits nicht flackert)

Faden funktioniert also, indem du den PWM-Wert langsam verringerst.
Ich weiß nun nicht wie das mit PWM bei den PIC controllern aussieht, 
aber da gibts bestimmt auch eine automatische Erzeugung, die sich nutzen 
lässt (dh wo du einfach nur deinen digitalwert 0...255 reinwirfst und an 
nem pin wackelt die PWM raus...)

von Kai G. (runtimeterror)


Lesenswert?

Ist zwar nicht für deinen Controller, aber ich denke, den Grundgedanken 
kannst du übernehmen:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM
http://www.mikrocontroller.net/articles/AVR_PWM
http://www.mikrocontroller.net/articles/Soft-PWM

Schöne Grüße,
Kai

von Mathias B. (matthiasbuerkle)


Lesenswert?

Hi Iain,

ich habe mir diesletzt auch eine RGB-LED an einen µC angeschlossen.
Ich habe die LED allerdings an einem Atmega32. Aber vom Prinzip musst du 
das gleiche programmieren.

Der Atmega hat zwar einen integrierten PWM-Generator (wenn man das so 
nennen kann), aber ich hab das Signal selbst ein einem Timer-Interrupt 
erzeugt.

Dabei habe ich eine 8bit Integer, die bei jedem Interruptaufruf zuerst 
einmal inkrementiere (Werte zwischen 0 und 255). Danach wird der 
Sollwert der jeweiligen Farbe mit dem aktuellen Wert der 8bit Integer 
verglichen. Ist der Sollwert kleiner, so wird der Ausgang auf GND 
gezogen (LED leuchtet), ist der Sollwert der jeweiligen Farbe größer als 
der Wert der 8bit Integer, so wird der Ausgang auf +5V gelegt (LED aus). 
Diese Vergleiche machst du für jede Farbe (Rot, Grün, Blau), und du 
kannst die einzelnen Farben dimmen.

Dann musst du zum Faden nur noch den Sollwert der Farben generieren, das 
ist aber normalerweise kein Problem.

Gruss
Matthias

von Juergen (Gast)


Lesenswert?

Ich hab sowas (Soft-PWM mit 16 Kanaelen, 200 Hz, weisse LEDs, R8C)
mal mit 3 Software-Ebenen gebaut:

- Unterste Ebene:
  Erzeugt die PWM aus einer Tabelle mit Zeiten/Zeitdifferenzen und 
Bitmustern fuer die Ausgabeports. Beim Timer-Interrupt werden aus der 
Tabelle die Ports auf den neuen Wert gesetzt und der Timer neu 
aufgezogen, das geht sehr schnell. Die Tabelle gilt fuer einen Zyklus 
und ist ein Doppel-Puffer, d.h. ein Teil wird abgearbeitet, der andere 
erzeugt (s.u.), beim Zykluswechsel wird im Interrupt umgeschaltet. Ist 
aehnlich wie der letzte Teil im Soft-PWM Tutorial.

- Mittlere Ebene:
  Erzeugt die Tabelle fuer die Interruptroutine aus Sollwerten fuer das 
Tastverhaeltnis.

- Obere Ebene:
  Erzeugt die Sollwerte der mittleren Ebene gemaess eigenen Sollwerten 
und macht bei Aenderungen Fading (oder schaltet die Helligkeit hart um 
wenn's gewuenscht ist).

Mittlere und obere Ebene bestehen aus einzelnen Tasks, die nacheinander 
von einem einfachen Scheduler abgearbeitet werden. Das muss vor Ende des 
Zyklus fertig werden.

von Iain (Gast)


Lesenswert?

vielen dank für eure hilfe! werde es mal so versuchen wie es matthias 
beschrieben hat :)

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.