LED Streifen Fade in / out, light_ws2812

Gast #4417496
Hi,


nachdem die ersten light_ws2812 bastelein funktionieren würde ich gerne 
Led's ein/aus faden.

Ein ganz stupider Ansatz wie der hier:
1
#include <util/delay.h>
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
#include "light_ws2812.h"
5

6

7
//const uint8_t NUM_LEDS = 24; // Anzahl Leds
8
#define NUM_LEDS 1
9
struct cRGB leds[NUM_LEDS];
10

11
int main(void)
12
{
13
  while(1)
14
  {
15
    for(uint8_t step = 0; step < 255; step++)
16
    {
17
      // Led einschalten
18
      leds[0].r = 0;
19
      leds[0].g = 0;
20
      leds[0].b = step;
21
      ws2812_setleds(leds, NUM_LEDS);
22

23
      _delay_ms(100);
24

25
    }
26
  }
27
}

funktioniert natürlich nich.


In diesem Artikel:
https://www.mikrocontroller.net/articles/LED-Fading

wird beschrieben wie man Leds vernünftig ein/aus faded.
Funktioniert auch für eine Led ganz toll, da aber der ws2812 controller 
die Leuchtdauer/Intensität der Led kontrolliert kann man nicht einfach 
+5v des Led Streifens kontrollieren.



Eine Idee wäre in der Funktion:
1
void pwm_up_down (const uint16_t pwm_table[], int16_t size, uint16_t delay)
2
{
3
    int16_t tmp;
4
 
5
    for (tmp = 0; tmp < size; tmp++)
6
    {
7
        OCR1A = pgm_read_word (& pwm_table[tmp]);
8
        ws2812_setleds(leds, NUM_LEDS);
9
        my_delay (delay);
10
    }
11
 
12
    for (tmp = size-1; tmp >= 0; tmp--)
13
    {
14
        OCR1A = pgm_read_word (& pwm_table[tmp]);
15
        ws2812_setleds(leds, NUM_LEDS);
16
        my_delay (delay);
17
    }
18
}

 ws2812_setleds(leds, NUM_LEDS);
einzubauen, und damit die Led komplett ein/auszuschalten.

bin mir hier aber nicht ganz sicher wie man den festen PWM Pin mit dem 
Pin der für ws2812 definiert wird kombinieren kann?
1
#define ws2812_port B     // Data port 
2
#define ws2812_pin  1     // Data out pin

Hat da jemand eine Idee?
hmmm, ungetestet sowas?
1
#include <util/delay.h>
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
#include "light_ws2812.h"
5

6

7
//const uint8_t NUM_LEDS = 24; // Anzahl Leds
8
#define NUM_LEDS 1
9
struct cRGB leds[NUM_LEDS];
10
const uint8_t gammaTable18[32] = { 0, 1, 2, 4, 6, 10, 13, 18, 22, 28, 33, 39, 46, 53, 61, 69, 78, 86, 96, 106, 116, 126, 138, 149, 161, 173, 186, 199, 212, 226, 240, 255};
11

12
int main(void)
13
{
14
  while(1)
15
  {
16
    for(uint8_t step = 0; step < 32; step++)
17
    {
18
      // Led einschalten
19
      leds[0].r = 0;
20
      leds[0].g = 0;
21
      leds[0].b = gammaTable18[step];
22
      ws2812_setleds(leds, NUM_LEDS);
23

24
      _delay_ms(100);
25

26
    }
27
  }
28
}

Die Leds des WS2812 haben zwar 256 Stufen, aber sind nicht 
Gamma-korrigiert. Effektiv bedeutet das, du hast nur 32 Stufen zur 
Verfügung. Eventuell auch 48, aber der Flaschenhals sind nun mal die für 
das menschliche Auge "großen" Unterschiede in den dunklen Stufen.
Gast
Hatte den pwmtable der 16bit pwm aus dem oben genanntem Led fade Artikel 
getestet, das funktionierte aber nicht weil die Werte bis 1024 laufen.
Die Led aber nur bis 255 geht.

Werde deins mal kompilieren.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.