8 LED dimmen unabhängig voneinander

#449019
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.
1
volatile unsigned char Leds[8];
2
unsigned char PWMCounter;
3

4
ISR( ...... )
5
{
6
  unsigned char i;
7

8
  PWMCounter++;
9
  if( PWMCounter == 102 )
10
    PWMCounter = 0;
11

12
  for( i = 0; i < 8; ++i ) {
13
    if( PWMCounter > Leds[i] )
14
      // schalte Led i ein
15
    else
16
      // schalte Led i aus
17
  }
18
}

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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.