mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8 LED dimmen unabhängig voneinander


Autor: Dok... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
bin neu beim uC...
möchte 8 Leds unabhängig voneinander dimmen,
geht das mit Atmega8 ?

Villeicht ein Beispiel mit C ?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> geht das mit Atmega8 ?

ja

> Villeicht ein Beispiel mit C ?

ja, auch mit C.

Autor: Dok... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
has jemand ein Beispiel in C (quelle Code)?

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>has jemand ein Beispiel in C (quelle Code)?

Guck doch mal in der Codesammlung.

Autor: Yamato (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Stichwort ist Software Pulsweitenmodulation (Soft-PWM).
Gibt dazu jede Menge Beispiele für ATMega sowohl in ASM als auch in C. 
Einfach mal nach googeln.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein C-Beispiel mit AT89C2051:

Beitrag "PWM-Lauflicht"


Peter

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du einen Timer ansteuern, so dass er dir regelmäßige
Interrupts auslöst?
Das ist dein erstes Ziel. Der Rest ist dann leicht.

Du baust dir softwaremässig ein PWM auf:

Für jede LED gibt es eine unsigned char Variable, die
einen Grenzwert darstellt.

In deiner Interruptfunktion zählst du einen Zähler hoch.
Dann wird für jede LED dieser Zähler mit dem Grenzwert
für diese LED verglichen. Ist der Zähler größer als der
Grenzwert, schaltest du die LED aus, andernfalls schaltest
du sie ein.

Und das wars dann schon.
volatile unsigned char Leds[8];
unsigned char PWMCounter;

ISR( ...... )
{
  unsigned char i;

  PWMCounter++;
  if( PWMCounter == 102 )
    PWMCounter = 0;

  for( i = 0; i < 8; ++i ) {
    if( PWMCounter > Leds[i] )
      // schalte Led i ein
    else
      // schalte Led i aus
  }
}

Jetzt musst du nur noch dafür sorgen, dass die
ISR vom Timer oft genug aufgerufen wird. Aber das
ist dein Teil der Übung :-)

Leds[x], x 0 bis 8, kannst du dann Werte von 0 bis 100
zuweisen. Bei 0 ist die Led komplett dunkel, bei 100
leuchtet sie am hellsten. Zwischenwerte entsprechen einer
Dimmung.

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.