Go Down

Topic: (solved, but continued) Inhalt eines RGB Strips weich überblenden (Read 4355 times) previous topic - next topic

Doc_Arduino

Hallo,

hab das probiert. Das funktioniert aber nicht wie gedacht. Das ist nur ein mehr oder weniger unkoordiniertes blitzen der LEDs. Ich glaube auch zu wissen warum. Die "Hardware PWM" und die Software PWM arbeiten gegeneinander. Ich versuche es später an reinen digitalen Ausgängen, dann sollte es klappen, denke ich.

Code: [Select]

// Arduino Mega 2560

int EIN = 1;

int GruppeA = 2;  // Pin 2   LED Nr. 4 (mittelste) (Würfelzahl)
int GruppeB = 3;  // Pin 3   LED Nr. 1 + 7
int GruppeC = 4;  // Pin 4   LED Nr. 3 + 5
int GruppeD = 5;  // Pin 5   LED Nr. 2 + 6

void setup()
{     
   Serial.begin(9600);
pinMode(GruppeA, OUTPUT);
pinMode(GruppeB, OUTPUT);
pinMode(GruppeC, OUTPUT);
pinMode(GruppeD, OUTPUT);
   
}

void loop()
{

       analogWrite(GruppeA, EIN);
       analogWrite(GruppeB, EIN);                                 // PWM Ausgabe an LED
       analogWrite(GruppeC, EIN);
       analogWrite(GruppeD, EIN);
       delay(1);
       //delayMicroseconds()
       
       analogWrite(GruppeA, 0);
       analogWrite(GruppeB, 0); 
       analogWrite(GruppeC, 0);
       analogWrite(GruppeD, 0); 
       delay(2);
       //delayMicroseconds()
}
Tschau
Doc Arduino

Doc_Arduino

Hallo,

mit digitalWrite klappt das jetzt. In µs im Verhältnis 30/1970 leuchtet es stabil dunkel. Unter 30 High-Pegel flackert es. Diese Zündeffekte sehe ich aber nicht mehr. Ich vermute das die PWM Funktion nicht astrein 100% funktioniert. Hätte es mit Software PWM nicht funktioniert, hätte ich den Zündeffekt auf ein Halbleitereffekt geführt.

Das Software-PWM hat aber einen großen Nachteil. Je nach Sketchlänge muß man die Werte immer wieder anpassen. Nehme ich zum Bsp. analogWrite (ganz unten) als Vergleich dazu, muß ich mehr wie 35 vorgeben. Sonst flackert es wieder.

Wobei ich mit paralleln analogWrite mit anderer LED Gruppe vorhin einen seltsamen Effekt hatte. Mit dem leuchtete gar keine LED mehr. Nach langen Rätselraten und vielleicht 4x neu flashen ging es dann plötzlich. Weis nicht warum.


Code: [Select]


int PWM_WERT = 1;
int HIGHPULSDAUER = 25;   // Verhältnis 30 / 1970 entspricht ca. PWM 1 bei ca. 500 Hz
int LOWPULSDAUER = 1975;

byte LEDAUS = 0;

int GruppeA = 22;  // Pin 22   LED Nr. 4 (mittelste) (Würfelzahl)
int GruppeB =  5;  // Pin  5   LED Nr. 1 + 7
int GruppeC = 24;  // Pin 24   LED Nr. 3 + 5
int GruppeD = 25;  // Pin 25   LED Nr. 2 + 6

unsigned long TIME_NEW;
unsigned long TIME_OLD = 0;

unsigned long ZEIT_NEW;
unsigned long ZEIT_OLD = 0;

void setup()
{     
   Serial.begin(9600);
pinMode(GruppeA, OUTPUT);
pinMode(GruppeB, OUTPUT);
pinMode(GruppeC, OUTPUT);
pinMode(GruppeD, OUTPUT);
   
}

void loop()
{
   
       TIME_NEW = micros();
       ZEIT_NEW = millis();
       
       if (TIME_NEW - TIME_OLD <= HIGHPULSDAUER)
         {
          //digitalWrite(GruppeA, EIN);
          //digitalWrite(GruppeB, EIN);                                 // Software PWM
          //digitalWrite(GruppeC, EIN);
          digitalWrite(GruppeD, HIGH);
         
         }
       
       
        if ((TIME_NEW - TIME_OLD > HIGHPULSDAUER) && (LEDAUS == 0))     // LEDAUS Check zum überspringen der if Schleife wenn schon 1x durchlaufen
         {
          //digitalWrite(GruppeA, 0);
          //digitalWrite(GruppeB, 0); 
          //digitalWrite(GruppeC, 0);
          digitalWrite(GruppeD, LOW); 
          LEDAUS = 1;       
         }
 
 
       if (TIME_NEW - TIME_OLD > LOWPULSDAUER)
         {
           TIME_OLD = TIME_NEW;
           LEDAUS = 0;
         }
       

       if (ZEIT_NEW - ZEIT_OLD > 5000)
         {
           delay(1000);
           ZEIT_OLD = ZEIT_NEW;
         }


 
       //analogWrite(GruppeA, PWM_WERT);
//       analogWrite(GruppeB, PWM_WERT);                                 // PWM Ausgabe an LED
       //analogWrite(GruppeC, PWM_WERT);
       //analogWrite(GruppeD, PWM_WERT);

}


Tschau
Doc Arduino

Go Up