PWM LED dimmern

Gast #3453088
Lesenswert?

Hallo ich hab mal die idee gehabt verschiedene LEDS gleichzeitig 
aufzuhellen und wieder zu dimmen nach einem bestimmten Interrupt sagen 
wir mal alle 10sekunden. Hab mich auch einwenig auf dem GCC-Tutorial 
durchgelesen aber den entscheidenen Hinweis wie ich das umsetzen kann 
hab ich leider nicht gefunden. :( Ich möchte dass die Led nach einem 
bestimmt interrupt langsam aufhellt und beim zweiten interrupt langsam 
dunekel wird.

Ich habs nur geschafft eine led in einem bestimmten intervall an und 
auszublinken mit dem Timer:(
Angehängte Dateien:
#3453214
Lesenswert?

Wenns mehrere LED sind, und du die auch hardwaremässig nicht so 
verschaltet kannst, dass du sie alle miteinander von einem einzigen 
PWM-Output Pin dimmen kannst (und du auch nicht genug PWM-Kanäle für 
alle LED einzeln hast), dann wird es wohl auf eine Software-PWM 
rauslaufen.

Also vergiss die Hardware-PWM und bau selber eine in Software auf. Den 
Timer kannst du dann auch gleich für die Eindimm und Aufdimm 
Zeitsteuerung benutzen.

Skizze
1
volatile uint8_t helligkeit;
2

3
ISR( Timer Overflow ISR )
4
{
5
  static uint8_t pwmCount;
6
  static uint8_t helligkeitJetzt;
7

8
  pwmCount++;
9
  if( pwmCount == Anzahl Helligkeitsstufen )
10
    pwmCount = 0;
11

12
  if( pwmCount < helligkeitJetzt)
13
    schalte alle LED ein
14
  else
15
    schalte alle LED aus
16

17
  if( helligkeitJetzt < helligkeit )
18
    helligkeitJetzt++;
19
  else if( helligkeitJetzt > helligkeit )
20
    helligkeitJetzt--;
21
}
22

23
int main()
24
{
25
  ... timer konfigurieren
26
  ... Overflow Interrupt freigeben
27

28
  helligkeit = 0;
29

30
  sei();
31

32
  while( 1 )
33
  {
34

35
    if( irgendwas )
36
      helligkeit = 28;
37

38
    if( irgendwas anderes )
39
      helligkeit = 12;
40

41
    ....
42
  }
43
}

Um die LED auf einen bestimmten Wert zu dimmen, schreibst du den Wert 
einfach in die Variable 'helligkeit'. Der letzte Teil in der 
Overflow-ISR führt dann die tatsächlich gerade zu realisierende 
Helligkeit diesem Wert langsam nach, so dass sich ein aufdimmen, 
abdimmen bzw. umdimmen zwischen verschiedenen Helligkeitsstufen ergibt.

Wie schnell das geht, hängt davon ab, wie du den Timer einstellst und 
wie oft daher die Overflow-ISR pro Sekunde aufgerufen wird. Sollte das 
zu schnell sein, dann kann man diesen Nachführteil auch nur bei jedem 
2.ten ISR aufruf oder noch seltener machen.
Gast #3480577
Lesenswert?

was ich gerne möchte ist dass die lampe aufdimmt und wieder abdimmt und 
dass in regelmässigen abständen ohne i-was einzustellen. Moementan macht 
es nur dass es kurzzeitig aufdimmt und dann die ganze zeti hell bleibt 
aber nicht wieder abdimmt. Hier mein quellcode schonmal hoffe ihr könnt 
mir weiter helfen:(
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren