www.mikrocontroller.net

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


Autor: Iain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 
:)

Autor: Phantomix Ximotnahp (phantomix) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathias B. (matthiasbuerkle)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Juergen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Iain (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.