Ein Programm Synchron auf 3 Ardinos laufen lassen.

Hallo,

vielen dank für die Infos. Leider verstehe ich es immer noch nicht ganz aber, der Unterschied zwischen delay und millis schient zu sein, das delay alles andere blockiert, millis nicht, damit kann ich leben ist sogar gut so!

Millis scheint mir recht kompliziert wenn ich ca. 18 Ausgänge von 2 TLC5940 (auf einem Bord) komplett unterschiedlich schalten möchte. Delay ist da nur eine Code Zeile, millis keine Ahnung 4 oder so.

Zu eurem Unverständnis der Verbindung der 3 Arduino. Die 3 Arduino sind mit einem Kabel zu den 3 Tastern (Reset, Test und Start) verbunden, wenn der Taster Start gedrückt wurde und das Programm läuft, wird die Kabelverbindung getrennt. Die 3 Arduino laufen dann nach dem Zeitgleichen Start autonom weiter. Leider nicht mehr Synchron.

Was ich nicht verstehe ist wenn delay(1000); für 1000 Millisekunden steht, wie können die Arduinos dann Asynchron werden 1000ms sind nun mal 1000ms…

Wenn ich euch richtig verstanden habe, liegt es dran, das die elektrischen Komponenten nicht 100% gleich “laufen” jeder Prozessor unterschiedlich schnell ist. Wäre es eine Möglichkeit alle 3 Prozessoren auf die niedrigste stufe zu drosseln, so das sie dann alle 3 gleich “langsam” laufen?

Als Beispiel mal mein bisheriger Code der in weiteren Schritten noch deutlich umfänglicher wird.

In dem folgenden Code wurde im delay bereits eine Berechnung verbaut um die Zeitunterschiede ein zu bauen. Aktuell ändert der Code aber noch nichts, da ich mal 100 nehme und durch 100 teile…

Konnte noch nicht weiter testen.

Code kommt gleich, zu viele Zeilen … :slight_smile:

#include "Tlc5940.h"
#include "Bounce2.h"

#define testbutton 7
#define startbutton 6

unsigned char channelchange[31]= {0,1,2,3,4,5,6,7,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,31,30,29,28,27,26,25};

int channel13 = channelchange[13];
int channel14 = channelchange[14];
int channel15 = channelchange[15];
int channel10 = channelchange[10];
int channel11 = channelchange[11];
int channel12 = channelchange[12];
int channel16 = channelchange[16];
int channel17 = channelchange[17];
int channel18 = channelchange[18];
int channel19 = channelchange[19];
int channel20 = channelchange[20];
int channel21 = channelchange[21];
int channel25 = channelchange[25];
int channel26 = channelchange[26];
int channel27 = channelchange[27];
int channel22 = channelchange[22];
int channel23 = channelchange[23];
int channel24 = channelchange[24];

int fadeein1;
int fadeaus1;

int zustandtestschalter;
int zustandstartschalter;

int zeit;

Bounce debouncer1 = Bounce(); 
Bounce debouncer2 = Bounce(); 

void setup()
{
  Tlc.init(0);
  pinMode(testbutton,INPUT_PULLUP);
  debouncer1.attach(testbutton);
  debouncer1.interval(5);
  pinMode(startbutton,INPUT_PULLUP);
  debouncer2.attach(startbutton);
  debouncer2.interval(5);
}

void loop()
{

  debouncer1.update();
  debouncer2.update();

  zustandtestschalter = debouncer1.read();
  zustandstartschalter = debouncer2.read();
  
  Tlc.clear();
  
  if ( zustandtestschalter == LOW )  // Testschalter, ein, schwach blau an
  {
  Tlc.set(channel10, 50);
  Tlc.set(channel13, 50);
  Tlc.set(channel19, 50);
  Tlc.set(channel16, 50);
  Tlc.set(channel25, 50);
  Tlc.set(channel22, 50);
  Tlc.update();
  }
  else  // Testschalter, aus, schwach blau aus
  {
  Tlc.set(channel10, 0);
  Tlc.set(channel13, 0);
  Tlc.set(channel19, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0);
  Tlc.update();
  }
    if ( zustandstartschalter == LOW ) // Startschalter, ein, Programm startet, schwach blau zur Kontrolle
  {
    
  zeit = 100;
  
  Tlc.clear();
  delay(1*(zeit/100));
  Tlc.set(channel10, 50);
  Tlc.set(channel13, 50);
  Tlc.set(channel19, 50);
  Tlc.set(channel16, 50);
  Tlc.set(channel25, 50);
  Tlc.set(channel22, 50);
  Tlc.update();
  delay(1000*(zeit/100));
  Tlc.set(channel10, 0);
  Tlc.set(channel13, 0);
  Tlc.set(channel19, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0);
  Tlc.update();
  delay(5870);
  for (fadeein1 = 0; fadeein1<4095; fadeein1+=7)
   {
   Tlc.set(channel14, fadeein1);     
   Tlc.set(channel11, fadeein1);
   Tlc.set(channel17, fadeein1);
   Tlc.set(channel20, fadeein1);
   Tlc.set(channel25, fadeein1);
   Tlc.set(channel22, fadeein1); 
   Tlc.update();
   delay(1);
   }
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(62);
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0); 
  Tlc.update();
  delay(210);
  Tlc.set(channel19, 4095);
  Tlc.update();
  delay(915);
  Tlc.set(channel19, 0);
  Tlc.set(channel20, 4095);
  Tlc.set(channel17, 4095);
  Tlc.update();
  delay(925);
  Tlc.set(channel20, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel19, 4095);
  Tlc.set(channel16, 4095);
  Tlc.set(channel10, 4095);
  Tlc.set(channel13, 4095);
  Tlc.update();
  delay(900);
  Tlc.set(channel19, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel10, 0);
  Tlc.set(channel13, 0);
  Tlc.set(channel20, 4095);
  Tlc.set(channel16, 4095);
  Tlc.set(channel10, 4095);
  Tlc.set(channel13, 4095);
  Tlc.update();
  delay(250);
  Tlc.set(channel20, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel10, 0);
  Tlc.set(channel13, 0);
  Tlc.set(channel19, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel10, 4095);
  Tlc.set(channel13, 4095);
  Tlc.update();
  delay(250);
  Tlc.set(channel19, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel10, 0);
  Tlc.set(channel13, 0);
  Tlc.set(channel19, 4095);
  Tlc.set(channel16, 4095);
  Tlc.set(channel11, 4095);
  Tlc.set(channel13, 4095);
  Tlc.update();
  delay(250);
  Tlc.set(channel19, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel11, 0);
  Tlc.set(channel13, 0);  
  Tlc.set(channel20, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel10, 0);
  Tlc.set(channel14, 0);
  Tlc.update();
  delay(250);
  Tlc.set(channel17, 4095);
  Tlc.update();
  delay(100);
  Tlc.set(channel11, 4095);
  Tlc.update();
  delay(100);
  Tlc.set(channel20, 4095);
  Tlc.update();
  delay(100);
  Tlc.set(channel25, 4095);
  Tlc.update();
  delay(100);
  Tlc.set(channel22, 4095);
  Tlc.update();
  delay(100);
  Tlc.set(channel14, 4095);
  Tlc.update();
  delay(100);
  Tlc.update();
  Tlc.set(channel14, 4095);
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095);
  Tlc.update();
  delay(2300);
  Tlc.set(channel17, 0);
  Tlc.update();
  delay(100);
  Tlc.set(channel11, 0);
  Tlc.update();
  delay(100);
  Tlc.set(channel20, 0);
  Tlc.update();
  delay(100);
  Tlc.set(channel25, 0);
  Tlc.update();
  delay(100);
  Tlc.set(channel22, 0);
  Tlc.update();
  delay(100);
  Tlc.set(channel14, 0);
  Tlc.update();
  delay(100);
  Tlc.update();
  Tlc.set(channel14, 0);
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0);
  Tlc.update();
  delay(200);
  Tlc.set(channel13, 4095);     
  Tlc.set(channel10, 4095);
  Tlc.set(channel16, 4095);
  Tlc.set(channel19, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(250);
  Tlc.set(channel13, 0);     
  Tlc.set(channel10, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel19, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel26, 4095);
  Tlc.set(channel23, 4095); 
  Tlc.update();
  delay(250);  
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel26, 0);
  Tlc.set(channel23, 0); 
  Tlc.update();
  delay(1400);
  Tlc.set(channel13, 4095);     
  Tlc.set(channel10, 4095);
  Tlc.set(channel16, 4095);
  Tlc.set(channel19, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(250);
  Tlc.set(channel13, 0);     
  Tlc.set(channel10, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel19, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel26, 4095);
  Tlc.set(channel23, 4095); 
  Tlc.update();
  delay(250);  
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel26, 0);
  Tlc.set(channel23, 0); 
  Tlc.update();
  delay(1350);
  Tlc.set(channel13, 4095);     
  Tlc.set(channel10, 4095);
  Tlc.set(channel16, 4095);
  Tlc.set(channel19, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(250);
  Tlc.set(channel13, 0);     
  Tlc.set(channel10, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel19, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel26, 4095);
  Tlc.set(channel23, 4095); 
  Tlc.update();
  delay(250);  
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel26, 0);
  Tlc.set(channel23, 0); 
  Tlc.update();
  delay(1350);
  Tlc.set(channel13, 4095);     
  Tlc.set(channel10, 4095);
  Tlc.set(channel16, 4095);
  Tlc.set(channel19, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(250);
  Tlc.set(channel13, 0);     
  Tlc.set(channel10, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel19, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel26, 4095);
  Tlc.set(channel23, 4095); 
  Tlc.update();
  delay(250);  
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel26, 0);
  Tlc.set(channel23, 0); 
  Tlc.update();
  delay(1350);
  Tlc.set(channel13, 4095);     
  Tlc.set(channel10, 4095);
  Tlc.set(channel16, 4095);
  Tlc.set(channel19, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095); 
  Tlc.update();
  delay(250);
  Tlc.set(channel13, 0);     
  Tlc.set(channel10, 0);
  Tlc.set(channel16, 0);
  Tlc.set(channel19, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0); 
  Tlc.update();
  delay(1800);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel26, 4095);
  Tlc.set(channel23, 4095); 
  Tlc.update();
  delay(250);
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel26, 0);
  Tlc.set(channel23, 0); 
  Tlc.update();
  delay(1630);
  Tlc.set(channel14, 4095);     
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel26, 4095);
  Tlc.set(channel23, 4095); 
  Tlc.set(channel15, 4095);     
  Tlc.set(channel12, 4095);
  Tlc.set(channel18, 4095);
  Tlc.set(channel21, 4095);
  Tlc.set(channel27, 4095);
  Tlc.set(channel24, 4095);
  Tlc.update();
  delay(250);
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel26, 0);
  Tlc.set(channel23, 0); 
  Tlc.set(channel15, 0);     
  Tlc.set(channel12, 0);
  Tlc.set(channel18, 0);
  Tlc.set(channel21, 0);
  Tlc.set(channel27, 0);
  Tlc.set(channel24, 0); 
  Tlc.update();
  delay(1600);
  Tlc.set(channel15, 4095);     
  Tlc.set(channel12, 4095);
  Tlc.set(channel18, 4095);
  Tlc.set(channel21, 4095);
  Tlc.set(channel27, 4095);
  Tlc.set(channel24, 4095); 
  Tlc.update();
  delay(250);
  Tlc.set(channel15, 0);     
  Tlc.set(channel12, 0);
  Tlc.set(channel18, 0);
  Tlc.set(channel21, 0);
  Tlc.set(channel27, 0);
  Tlc.set(channel24, 0); 
  Tlc.update();
  delay(16040);
  Tlc.set(channel17, 4095);     
  Tlc.update();
  delay(50);
  Tlc.set(channel11, 4095);
  Tlc.update();
  delay(50);
  Tlc.set(channel20, 4095);
  Tlc.update();
  delay(50);
  Tlc.set(channel25, 4095);
  Tlc.update();
  delay(50);
  Tlc.set(channel22, 4095);
  Tlc.update();
  delay(50);
  Tlc.set(channel14, 4095);
  Tlc.update();
  delay(50);
  Tlc.update();
  Tlc.set(channel14, 4095);
  Tlc.set(channel11, 4095);
  Tlc.set(channel17, 4095);
  Tlc.set(channel20, 4095);
  Tlc.set(channel25, 4095);
  Tlc.set(channel22, 4095);
  Tlc.update();
  delay(3100);
  Tlc.set(channel14, 0);
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel25, 0);
  Tlc.set(channel22, 0);
  Tlc.set(channel15, 4095);
  Tlc.set(channel14, 4095);
  Tlc.set(channel12, 4095);
  Tlc.set(channel11, 4095);
  Tlc.set(channel18, 4095);
  Tlc.set(channel21, 4095);
  Tlc.set(channel27, 4095);
  Tlc.set(channel24, 4095);
  Tlc.set(channel23, 4095);
  Tlc.update();
  delay(3500);
  Tlc.set(channel21, 0);
  Tlc.set(channel20, 4095);
  Tlc.update();
  delay(200);
  Tlc.set(channel18, 0);
  Tlc.set(channel17, 4095);
  Tlc.update();
  delay(200);
  Tlc.set(channel27, 0);
  Tlc.set(channel26, 4095);
  Tlc.update();
  delay(200);
  Tlc.set(channel23, 0);
  Tlc.set(channel24, 0);
  Tlc.set(channel23, 4095);
  Tlc.update();
  delay(200);
  Tlc.set(channel15, 0);
  Tlc.set(channel14, 0);
  Tlc.set(channel12, 0);
  Tlc.set(channel11, 0);
  Tlc.set(channel14, 4095);
  Tlc.set(channel11, 4095); 
  Tlc.update();
  delay(435); 
  Tlc.set(channel14, 0);     
  Tlc.set(channel11, 0);
  Tlc.set(channel17, 0);
  Tlc.set(channel20, 0);
  Tlc.set(channel26, 0);
  Tlc.set(channel23, 0); 
  Tlc.update();
  for (fadeaus1 = 4095; fadeaus1>0; fadeaus1-=4)
    {
    Tlc.set(channel13, fadeaus1);     
    Tlc.set(channel10, fadeaus1);
    Tlc.set(channel16, fadeaus1);
    Tlc.set(channel19, fadeaus1);
    Tlc.set(channel25, fadeaus1);
    Tlc.set(channel22, fadeaus1); 
    Tlc.update();
    delay(3);
    }
  Tlc.setAll(0);
  Tlc.update();
  delay(124900); 
  for (fadeaus1 = 4095; fadeaus1>0; fadeaus1-=4)
    {
    Tlc.set(channel13, fadeaus1);     
    Tlc.set(channel10, fadeaus1);
    Tlc.set(channel16, fadeaus1);
    Tlc.set(channel19, fadeaus1);
    Tlc.set(channel25, fadeaus1);
    Tlc.set(channel22, fadeaus1); 
    Tlc.update();
    delay(3);
    }
  Tlc.setAll(0);
  Tlc.update();
  }
}

Musste den Code in 2 Posts machen, da man nur 9000 Zeichen hat ... :confused:

Die meisten neueren Arduinos laufen mit Resonatoren die bis zu +/-0,5% Abweichung auf dem Takt haben.
Mal ein Beispiel mit den maximal Werten
Das heißt der Arduino 1 läuft 16,000 Mhz
Der Adruino 2 15,92 Mhz -0,5%
Der Arduino 3 16,08 Mhz +0,5%

Ziwschen den Beiden Arduinos 2=>3 liegen 1% unterschied jeden einzelnen Zyklus (auch für jeden einzelnen Delay) und das ändert sich dann auch noch Temperatur und Alters Abhängig.
Ohne einem Taktmaster wirst du diesen Drift nie in den Griff bekommen.

Ja 1000ms sind 1000ms bei einer geeichten Zeitquelle.
Für das programm sind es auch 1000ms die können aber bei 999,5-1000,5ms sein und das addiert sich bei jedem Zyklus zu einem ordentlichen Drift.

Wenn du drei leuten jedem eine Uhr gibst die erste braucht "echte" 60s für eine Uhr-Minute(Lokal)
und zweite braucht echt 61s für eine Uhr-Minute(Lokal) und die dritte 59s für ne echte Minute(Lokal).

Wenn die Leute dann nach 1 Stunde ein Lampe einschalten sollen wird der erste sie nach "echten" 60 anmachen der zweite nach 61min und der dritte nach 59min.
Die Uhrzeit scheint für die Leute ja normal zu sein aber in "echt" halt 2min Abweichung obwohl Lokal alle Uhren 60min weiter gelaufen sind.

Mehr gibt es nicht zu sagen. Es ist ohne Synchronisation der Taktquelle nicht möglich weil man nicht weiß wer hier die echten 16,000 Mhz hat

Gruß
DerDani

Hallo,

also auch nicht durch runter Takten auf einen gleichen Nenner?

Habe ich eine Möglichkeit Nachträglich eine Möglichkeit eine Taktquelle ein zu bauen?

gruß

Post #16
Ohne Verbindung der Einzelnen Arduinos untereinander nicht
Gruß
DerDani

daMeier:
Habe ich eine Möglichkeit Nachträglich eine Möglichkeit eine Taktquelle ein zu bauen?

Zwei Ideen ohne Garantie auf Erfolg:

  1. Du verbindest Deine Arduinos mit der Atomuhr der PTB in Braunschweig. >>Link<<

  2. Uhrenmodule (RTC) könnten genauer als die Arduinos sein. Mein DS3231 läuft seit Wochen recht synchron mit der Atomuhr.

daMeier:
Millis scheint mir recht kompliziert wenn ich ca. 18 Ausgänge von 2 TLC5940 (auf einem Bord) komplett unterschiedlich schalten möchte. Delay ist da nur eine Code Zeile, millis keine Ahnung 4 oder so.

Bei Nutzung von Feldern und einer Funktion ist die Anzahl der Ausgänge nur eine Feldlänge. Ich verwende 7 Ausgänge bei 64 Zeilen Sketchlänge einschließlich derzeit noch spärliichem Kommentar.

3 Arduinos und 3 RTCs wie bekommst du die auf 20ms genau hin (ab dann nimmst du den Versatz wahr)?
Gruß
DerDani

volvodani:
3 Arduinos und 3 RTCs wie bekommst du die auf 20ms genau hin (ab dann nimmst du den Versatz wahr)?

Diese RTC kann nur Sekunden, das ist blöd :fearful: Und die PTB sendet wohl auch nur Sekunden, auch blöd :fearful: Dann ziehe ich meine Vorschläge mit Bedauern zurück!

schade, scheint nicht so einfach zu sein... :frowning:

werde mal weiter tüfteln und suchen. Wenn jemand weitere Ideen hat, gerne raus damit.

vielen dank für eure Ideen und Hilfen ...

Was ist nicht einfach?

Synchronisieren, ohne Verbindung?
Ohne irgendeinen synchronisierenden Takt Impuls?
Das ist nicht nur schwierig, sondern letztendlich unmöglich.

Denn Telepathie beherrschen unsere kleinen µC noch nicht.

agmue:
Diese RTC kann nur Sekunden, das ist blöd :fearful: Und die PTB sendet wohl auch nur Sekunden, auch blöd :fearful:

Das macht doch nichts. Es reicht ja, wenn du jede Sekunde die interne "Uhr" synchronisierst. Wobei ich das trotzdem eher mit einer Taktleitung machen würde.