Seperates Multiplexen durch ATMega

Hallo.
Bin mir nicht sicher, ob ich deine Frage richtig verstanden habe.

"Gleichzeitig" gibt es nicht. Ich kenne zwar deinen Code nicht, aber ich denke, du hast generell Probleme mit dem Timing.
Da hilft eine so genannte Time-Machine Abhilfe.
Sieh dir mal das Thema Timer Interrupt an: Arduino Playground - HomePage

Statt wie in dem Beispiel Code:

#include "TimerOne.h"
 
void setup()
{
  pinMode(10, OUTPUT);
  Timer1.initialize(500000);         // initialize timer1, and set a 1/2 second period
  Timer1.pwm(9, 512);                // setup pwm on pin 9, 50% duty cycle
  Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt
}
 
void callback()
{
  digitalWrite(10, digitalRead(10) ^ 1);
}
 
void loop()
{
  // your program here...
}

Könnte so eine Time-Machine in etwa so aussehen.
(NUR BEISPIELHAFT! NICHT GETESTET!)

	1.	#include "TimerOne.h"
	2.	volatile int sd_lesen = 0;
	3.	volatile int rgb_refresh = 0;
	4.	volatile int v_warte = 0; // statt delay()
	5.	
	6.	// und noch weitere Variablen, die du für dein Timing brauchst...
	7.	int daten_gelesen =0;
	8.	void setup()
	9.	{
	10.	  
	11.	  Timer1.initialize(1000);         // 1 millisekunde 
	12.	   Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt
	13.	}
	14.	 
	15.	void callback()
	16.	{
	17.	  sd_lesen++;
	18.	  rgb_refresh++;
	19.	  v_warte++;
	20.	}
	21.	 
	22.	void loop()
	23.	{
	24.	  // your program here...
	25.	  // nur als Beispiel!!! 
	26.	  
	27.	// alle 20 Millisekunden von sd lesen… 
	28.	if(sd_lesen == 20 && daten_gelesen == 0){
	29.	  sd_karte_lesen();
	30.	  daten_gelesen = 1;
	31.	  rgb_refresh = 0;
	32.	}
	33.	// damit werden alle 40 Millisekunden die LEDs updated 
	34.	// = 25 Bilder pro sekunde
	35.	if(daten_gelesen == 1 && rgb_refresh == 20)
	36.	{
	37.	 daten_gelesen = 0;
	38.	rgb_refresh(); 
	39.	}
	40.	// und es bleibt genug Zeit für alles mögliche...
	41.	
	42.	// hier noch ein Ersatz für die delay() Routine;
	43.	// aufruf:
	44.	// v_warte =0;  // muss vorher auf null gesetzt werden
	45.	// warte(100); // warte 100 milisekunden
	46.	void warte(int wielange) {
	47.	while (v_warte != wielange) {}
	48.	}
	49.	
	50.	void sd_karte_lesen() {
	51.	sd_lesen = 0;
	52.	// dein Code zum lesen von der SD Karte...
	53.	}
	54.	void rgb_update()={
	55.	rgb_refresh = 0;
	56.	// dein Code für den demultiplexer...
	57.	}

Was das Demultiplexing angeht, so lassen sich mehrer Demultiplexer in reihe Schalten. Tutorials gibt es dazu einige im Netz.

Falls ich deine Frage falsch verstanden habe, tut es mir leid. Dann vergiss was ich geschrieben habe. :slight_smile: