PWM-Steuerung mehrer LEDs und Phasen und Amplituden gleiches Ref.Signal

Hallo lieben Foren Mitglieder,

ich hoffe hier etwas Hilfe zu bekommen, da ich noch nichts passendens gefunden habe, erstelle ich einen eigenen Post.

Mein Vorhaben:

Ich möchte mit einem ARDUINO NANO uC 4 LEDs steuern mittels PWM, idealerweise sollen alle viers LEDs mit der selben Frequent und LED angesteuert werden.
Desweiteren benötige ich ein Referenzsignal welches in Phase und Amplitude zu der jeweilgen Leuchtenden LED gleich ist und snychron an einem Ausgang liegt wenn die jeweilige LED bzw. der Port HIGH ist.

Mein problem nun:

wenn ich die LEDs nach und nach durchschalte, habe ich unterschiedliche Frequenzen obwohl ich alle mit der selben pwm ansteuern.

Hardware:

Arduino Nano

RGB und Infrarot LED

Woran könnte das liegen ?

Vielen Dank im Voraus

Ich Poste meinen Code mal für eine Farbe:

int   analogpin          = A1;
int   ledpin             = 11;   //Blau
int   ledpin1            = 5;    //Gruen    
int   ledpin2            = 6;    // Rot
int   ledpin3            = 9;    // Infrarot      
int   maxi               = 1024; // 1024 entsprechen 5V 
float wert               = 0.0;
float Mittelwertblau     = 0.0;
float Mittelwertgruen    = 0.0;
float Mittelwertrot      = 0.0;
float Mittelwertinfrarot = 0.0;
float Voltblau           = 0.0;
float Voltgruen          = 0.0;
float Voltrot            = 0.0;
float Voltir             = 0.0;
float gesamt = 0.0;


void setup() 
{
 Serial.begin(9600);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(11,OUTPUT);
 pinMode(A1,INPUT);
}
void loop() 
{
 start:
 
    int p=0;
      if (Serial.available()>0)
       {
        p = Serial.read();
        p-=48;
        Serial.println(p);
       }else {goto start;}
   
switch(p)
{
//------------------------------------------Blau----------------------------------------------------//
 case 1:
   gesamt = 0.0;                                                     // setzt gesamt jedes mal wieder auf 0
   analogWrite(5, LOW);
   analogWrite(6, LOW);
   analogWrite(9, LOW);
   
   Serial.println("Blau ");
   Serial.println("_______");
   
   for(int i=0; i<=500; i++)
     {
       analogWrite(11, 127);                                           // Duty Cycle von ca.75%
       delay(1);
       wert= analogRead(A1);                                           //Einlesen der Werte
       gesamt           = wert   + gesamt;
       Mittelwertblau   = gesamt / 500;                                // Mittelwert ausrechnen 
     }
     
     //Serial.println("_______");
     //Serial.println( Mittelwertblau);                                // Ausgeben des Mittelwerts
     Voltblau= ( Mittelwertblau*5)/1024;                               //Spannungswert ausrechnen                                    
     Serial.print("Der Spannungswert der Farbe Blau ergibt[V]: ");     // Ausgabe des Spannungswerts
     Serial.println(Voltblau); 
     break;

Hallo,

hat keiner eine Idee woran das liegen könnte ?
Oder wie ich eine einheitliche Frequenz an mindestens vier Ausgängen hinbekomme ?

MfG
Vielen Dank

http://www.arduino.cc/en/Reference/AnalogWrite:
Writes an analog value (PWM wave) to a pin. Can be used to light a LED at varying brightnesses or drive a motor at various speeds. After a call to analogWrite(), the pin will generate a steady square wave of the specified duty cycle until the next call to analogWrite() (or a call to digitalRead() or digitalWrite() on the same pin). The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz. Pins 3 and 11 on the Leonardo also run at 980 Hz.

Und dann lies Dir auch das Datenblatt durch http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf

Ich weiß nicht wie Du einen synchrone PWM mit einem ATmega hinbekommst.

Wenn Du einen TLC5740 nimst dann hat dieser fast synchrone Ausgännge (der Startpunkt ist willentlich kurz versetzt). Genaueres im Datenblatt.
Grüße Uwe

mkhl77:
wenn ich die LEDs nach und nach durchschalte, habe ich unterschiedliche Frequenzen obwohl ich alle mit der selben pwm ansteuern.

Der AtMega hat 3 Timer, die jeweils auf 2 Pins gehen. Ich weiß gerade nicht, wie die beim Nano verdrahtet sind.
Timer0 läuft mit 980Hz, die anderen mit 490 Hz. Du wirst also maximal 2 Pins synchron hinkriegen.

Oder du steigst richtig in die Tiefen der Register- und Assemblerprogrammierung, steuerst deine PWM mit Interrupts und setzt immer 2 Pins parallel. Da bist du aber nicht mehr in der Arduinowelt.

Einfacher wäre sicher ein externer Baustein, wie der von Uwe empfohlene TLC5740. Es gibt auch fertige Module, z.B. von Adafruit. Such doch einfach mal nach "PWM Controller I2C"

Guten MOrgen,

danke für die Antworten , die haben mir schon sehr geholfen.
Dann muß ich mir wohl was anderes überlegen um 5 synchrone frequenzen zu erhalten.

Danke noch mal

MfG

Oder wäre sowas in der art möglich ?

.-----.
| PWM |]--ooo.
| | |||| .---.
| | |||'--| & |-----> LED1
| LED1|]--+++---| |
| | ||| '---'
|uC | ||| .---.
| | ||'---| & |-----> LED2
| LED2|]--++----| |
| | || '---'
| | || .---.
| | |'----| & |-----> LED3
| LED3|]--+-----| |
| | | '---'
| | | .---.
| | '-----| & |-----> LED4
| LED4|]--------| |
'-----' '---'