da sich bei mir im Gehirn scheinbar momentan ein Knoten festgesetzt hat, hier eine ganz grundsätzliche Frage:
Wenn ich möchte, dass mehrere Dinge exakt zum gleichen Zeitpunkt ablaufen sollen, wie ist dass dann möglich bei einem Sketch, den der Prozessor von oben nach unten durcharbeitet?
Mit welchen "Befehlen" veranlasse ich den Prozessor dazu, Dinge parallel auszuführen?
Mikrocontroller und auch (PC-)Einkernprozessoren können systembedingt nie zwei Sachen völlig gleichzeitig machen.
Es wird immer ein Takt vorgegeben, der natürlich entsprechend schnell sein kann, dass zwei Dinge NAHEZU gleichzeitig ablaufen. Beim Arduino sind das i.d.R. 16 MHz, also grob gesagt ist der Controller in der Lage, 16.000.000 Einzelschritte pro Sekunde abzuarbeiten. Je nach Art der Einzelschritte werden aber einer oder mehrere Takte benötigt, um diesen Schritt auszuführen. Bei einer Funktion oder auch einem einfachen "Mehrzeiler" kann dies schon einige Takte in Anspruch nehmen. Es kommt jetzt darauf an, was genau Du machen willst und wie sehr dieses "zeitgleich" wirklich gemeint ist.
Je hardwarenäher man den ATMEGA programmiert, umso weniger Takte pro Befehl werden übrigens benötigt. Beispiel: Man verwendet nicht die Arduino-Layer-Funktion digitalWrite(), sondern schreibt direkt in die Register des µC.
Direkt parallel geht prinzipiell erst mal nicht. Du kannst es nur simulieren, indem du die zwei Aufgaben/Threads abwechselnd bearbeitest. Je kleiner man diese Zeitfenster wählt, desto näher kommt man einer Parallelbearbeitung. Ich meine auch schon mal eine passende Library gesehen zu haben, die das anwenderfreundlicher macht.
Ansonsten nimm zwei Mikrocontroller, die arbeiten dann wirklich parallel - Dualcore quasi.
[edit] Der Verkleinerung des Zeitfensters sind jedoch Grenzen gesetzt, die aus der Taktfrequenz des Mikrocontrollers und der Anzahl der benötigten Takte des jeweiligen Threads resultieren, wie mein Vorredner bereits ansprach.
Das ist übrigens auch einer der Gründe, warum beispielsweise der Arduino für simple Nah-Echtzeit-Aufgaben prädestinierter ist, als z.B. ein Raspberry Pi oder andere embedded-Linux-Lösungen, die im Hintergrund noch ein Linux zu laufen haben und je nach Programmiersprache noch die Garbage-Collection oder andere Schweinereien ablaufen. Da wird die Prognose, wann ein Prozess tatsächlich ausgeführt wird u.U. viel schwieriger als bei einem simpel-µC wie dem ATMEGA. Auch wenn diese Prozessoren meistens weit höher getaktet sind.
mehrere Dinge exakt zum gleichen Zeitpunkt ablaufen
Die Frage ist eher: "Wofür willst'n das wissen"
Was ist gleichzeitig für dich: Die gleiche Millisekunde ist kein Thema, die gleiche Mikrosekunde wird schwierig, darunter fängt es irgendwo an, ins Philosophische abzugleiten oder zumindest die klassische Physik zu verlassen.
Ganz am Rande übrigens: Die 8 Bits eines Ports kann man, wenns drauf ankommt, gleichzeitig lesen/schreiben.
D.h. die Reihenfolge im Femtosekundenbereich ist dann evtl. erstmal undefiniert oder hängt davon ab, von wo aus du es anschaust
Im übrigen erleichtert es das Programmieren meist ganz gewaltig, wenn immer schön eins nach dem anderen passiert, und du nicht mehrere Threads auf multicore Maschinen synchronisieren musst.
Wenn etwas, zur veranschaulichung, wirklich gleichzeitig (im rahmen physikalsicher möglichkeiten) passieren solle empfiehlt sich auch eine art seriel-parallel wandlung, zum beispiel ein shiftregister, dort kannst du zu erst eine 8-bit anweisung reinschieben und diese dann mit einem knopfdruck aktiv schalten, das heißt zuerst anweisungen nacheinander durchführen, die ergebnisse sammeln und dann alle auf einmal raushauen... ein spezieller anwendungsfall, für den du so etwas brauchst wäre allerdings interessant
Nur so zum Nachdenken "exakt zum gleichen Zeitpunkt" ist nicht nur bei einem Kern schwierig sondern bei jeder Hardware. Außer das Ereignis findet auch "exakt" am gleichen Ort statt. Ansonsten stellt sich schon die Frage von wo man den eigentlich schaut. Raumzeit – Wikipedia.
Und wenn ich schon am Haarspalten bin: wenn man sehr kleine Dinge messen will, dann ist auch die Frage was denn genau "exakt" heißen soll
ich hätte auch die gleiche Frage und zwa mit einem beispiel:
ich möchte das eine Led in einem sekunden takt blinkt und die zweite Led in einem halben takt blinkt.
oder wenn es nicht geht bitte ideen wie ich das anders Programmieren kann das es genauso ausschaut. und bitte mit ein paar beispiel zeilen, weil ich den Arduino erst seit einer Woche hab und mich noch nicht so gut auskenne