Arduino Forum

International => Deutsch => Topic started by: Michi33 on Mar 21, 2018, 01:01 am

Title: LED Strip Blinker sehr langsam
Post by: Michi33 on Mar 21, 2018, 01:01 am
Hallo

Ich habe meine 300 LED Strip 2812 versuch zum blinken zu bringen mit dem folgenden Script.
Bei 60 LED geht das sehr schnell, bei 300 schaltet es die LED sehr langsam.
Verwende ich den falschen Befehl ?



Code: [Select]

#include <Adafruit_NeoPixel.h>


#define PIXEL_COUNT 300
#define PIXEL_PIN    13    // Data PIN for LED Stripe      

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

  strip.begin();
  strip.show();

}

void loop() {
  
for(uint16_t i=0; i<300; i++) {
    strip.setPixelColor(i, strip.Color(  255, 55, 0));
    strip.show();
//        delay(1);
    }
    delay(400);
    {
    for(uint16_t i=0; i<300; i++) {
    strip.setPixelColor(i, strip.Color(0, 0, 0));
    strip.show();
  }
    delay(400);
}}
Title: Re: LED Strip Blinker sehr langsam
Post by: MiReu on Mar 21, 2018, 02:09 am
Hi,

spiel doch etwas mit den delay "Zeiten". Wenn du die kleiner machst, dann wird das ganze auch schneller ;)

Gruß

MiReu
Title: Re: LED Strip Blinker sehr langsam
Post by: wno158 on Mar 21, 2018, 06:20 am
Vielleicht wäre es eine Überlegung wert (wenn Du schon mit delay() arbeiten willst) die Wartezeit automatisch an die vorher verstrichene Zeit zum Setzen der Pixel anzupassen:

Code: [Select]

  unsigned long vorher;
  unsigned long nachher;

  vorher = millis();
  for(uint16_t i=0; i<300; i++) {
    strip.setPixelColor(i, strip.Color(  255, 55, 0));
    strip.show();
  }
  nachher = millis();
  delay(400 - (nachher-vorher));


Gruß Walter
Title: Re: LED Strip Blinker sehr langsam
Post by: uwefed on Mar 21, 2018, 07:18 am
Schreib das  strip.show(); außerhalb der for Schleife.

 strip.show(); überträgt die Daten aus dem Buffer auf die LED. Pro LED dauert die Übertragung 24 x 1,25µS = 30µS und zusätzlich ca 50µS Reset vorher. Bei 300 LED sind das jedes mal ca 9mS. Wenn Du das 300 mal in der Schleife machst dann sind das ca 2,7s nur für die Übertragung.

Grüße Uwe
Title: Re: LED Strip Blinker sehr langsam
Post by: wno158 on Mar 21, 2018, 09:22 pm
Uii - wieder was gelernt; nämlich die Strip-Zeiten. Danke!

@Michi: Dann würde auch mein Code aus der Kurve fliegen, denn der schaut nicht nach, ob die Restzeit positiv ist.

Gruß Walter
Title: Re: LED Strip Blinker sehr langsam
Post by: Michi33 on Mar 21, 2018, 10:39 pm
Problem solved  :)

Vielen Dank für die Tipps

Vielleicht könnt Ihr mir gerade noch weiter helfen :-)

Wie müsste ich den Befehl anpassen, damit von den 300 LED's immer 30 ein und dann die nächsten 30 wieder aus sind

Code: [Select]
for(uint16_t i=0; i<300; i++) {
    strip.setPixelColor(i, strip.Color(  255, 55, 0));
    strip.show();
Title: Re: LED Strip Blinker sehr langsam
Post by: uwefed on Mar 22, 2018, 12:19 am
Hat Du nichts gelernt? wo ist strip.show(); ??

Code: [Select]
for(uint16_t i=0; i<300; i++) {
if( !((i/30) %2) )  strip.setPixelColor(i, strip.Color(  255, 55, 0));
else  strip.setPixelColor(i, strip.Color(  0, 0, 0));
 }
strip.show();
Title: Re: LED Strip Blinker sehr langsam
Post by: Thorsten4171 on Mar 22, 2018, 11:32 am
@Uwe
Danke für den Code
Quote
for(uint16_t i=0; i<300; i++) {
if( !((i/30) %2) )  strip.setPixelColor(i, strip.Color(  255, 55, 0));
else  strip.setPixelColor(i, strip.Color(  0, 0, 0));
 }
Habe so was in meiner Led Kette auch umständlich über mehrere Vaiablen und if Versch. eingebaut.
Aber durch den Modulo Oper. ist das ja viel leichter zu lösen.Ja Mathematik hilft manchmal. :)
Title: Re: LED Strip Blinker sehr langsam
Post by: michael_x on Mar 22, 2018, 08:48 pm
Quote
durch den Modulo Oper. ist das ja viel leichter zu lösen.Ja Mathematik hilft manchmal.
Gut dass der Compiler noch viel schlauer ist und weiß,  dass es was viel einfacheres gibt und man für %2 keine mühsame Modulo-Division braucht. 8)
Title: Re: LED Strip Blinker sehr langsam
Post by: agmue on Mar 22, 2018, 08:53 pm
Gut dass der Compiler noch viel schlauer ist ...
[Klugscheisser an]
Der Compiler ist doof, die Leute, die ihn programmiert haben, sind schlau!
[Klugscheisser aus]
 :smiley-mr-green:
Title: Re: LED Strip Blinker sehr langsam
Post by: Thorsten4171 on Mar 22, 2018, 08:56 pm
@michael_x
 
Da reicht mein Verständniss nicht aus . Kannst du mir das verdeutschen?
Title: Re: LED Strip Blinker sehr langsam
Post by: agmue on Mar 22, 2018, 09:17 pm
Der Compiler optimiert die Moduloberechnung zu einer für ihn einfacheren Operation. Wahrscheinlich testet er Bit 0.
Title: Re: LED Strip Blinker sehr langsam
Post by: Thorsten4171 on Mar 22, 2018, 09:29 pm
Aha
Es ist so aber die beste wenn nicht ein zigste Möglichkeit dem Compiler mitzuteilen was ich will.
Sehe ich das so ungefähr richtig?
Title: Re: LED Strip Blinker sehr langsam
Post by: postmaster-ino on Mar 22, 2018, 09:49 pm
Hi

Viele Wege führen nach Rom - und Welcher davon der Beste ist, darüber wird man trefflich streiten können.
Vll. wird man sich einig, Welchen man ganz sicher nicht beschreiten sollte, aber in der anderen Richtung sehe ich schwarz ;)

Wenn Der Code für Dich passt, schnell genug ist und Das macht, was Du willst: Glückwunsch! Erst Mal so belassen!!

Klar, man kann IMMER irgend was besser oder schöner machen - nur, ob's unterm Strich was bringt.
Auch ist RAM und Flash dafür da benutzt zu werden - unbenutzte Bereiche bringen Dir keinen VOrteil - wenn hier noch Optimierungspotential besteht, hat an 'für später' noch Reserven, mehr aber nicht.

MfG
Title: Re: LED Strip Blinker sehr langsam
Post by: Thorsten4171 on Mar 22, 2018, 09:56 pm
Ok alles Klar.

Danke euch :)

Title: Re: LED Strip Blinker sehr langsam
Post by: uwefed on Mar 23, 2018, 12:09 am
Der Compiler optimiert die Moduloberechnung zu einer für ihn einfacheren Operation. Wahrscheinlich testet er Bit 0.
Oder verschiebt die Zahl über ein Flag nach rechts und führt einen bedingten Sprung dieses Flags durch.
(6502 Vorgeschädigter)

Grüße Uwe
Title: Re: LED Strip Blinker sehr langsam
Post by: michael_x on Mar 23, 2018, 12:24 am
Aha
Es ist so aber die beste wenn nicht ein zigste Möglichkeit dem Compiler mitzuteilen was ich will.
Sehe ich das so ungefähr richtig?
i & 1 unterscheidet grade/ungrade.

Postmaster hat natürlich Recht.
Wenn der Compiler einen unterstützt,  und aus % 2 das erheblich elegantere &1 macht, schadet es nicht,  das zumindest zu wissen.