Mehrer Timer gleichzeitig in einem Programm nutzen

Moin,

ich habe eine Frage die sich mir aufgetan hat.

Ich benutze in meinem Programm mehrere Timer für unterschiedliche „Arbeiten“. Z.B nutze ich den Timer0 und den Timer1. Beide Timer werden zu unterschiedlichen Zeiten „aufgerufen“.

Der Timer0 z.B. dient dazu eine Variable jede Sekunde hoch zu zählen.
Der Timer1 z.B. dient dazu eine Funktion alle 25ms abzuarbeiten.

Ich bin mir nicht sicher, wie lange der Arduino Mega2560 benötigt, um die Funktionen abzuarbeiten.

Ich habe mir die Frage gestellt was passiert, wenn es dazu kommt das beide Timer zu gleichen Zeit auslösen und auf deren Funktionen verwiesen wird.

Momentan liegt es noch nicht vor, dass meide Timer in einem Programmcode implementiert sind. Momentan sind es zwei unterschiedliche Programme die noch zusammengefügt werden sollen.

Könnte es da zu Problemen kommen?

Danke für die Rückmeldung.

Beste Grüße
Sebastian

Ist probieren verboten oder hast du religiöse Vorurteile?
Technisch gesehen ein Prozessorkern ist nicht in der Lage etwas gleichzeitig zu machen. Da du im Programm Timers ein nach der anderen einstellst, sie werden genau so eine nach der anderen abgefeuert und auch behandelt. Aber du kannst probieren zu erklären wieso braucht man solche Precision bei Hobby Elektronik.

Nach meinem Verständnis könnte es theoretisch dazu kommen, dass es ein Moment gibt bei dem beie Timer gleichzeitig sich "melden". Und da stell ich mir die Frage, was dann passiert. Wird ein Timer nicht behandelt? Gibt es eine Priodisierung? Ect.

Timer0 soll bei mir jede Sekunde auslösen. Und Timer1 jede 25mS. Das würde ja bedeuten, dass es zu einer Überschneidung kommt.

Wer zuerst kommt, mahlt zuerst

Und was soll das genau heißen? Wer zuerst kommt, der malt zuerst?

Mit solchen Ausgagen kann doch niemand der eine Frage stellt was anfangen!

Ich probier es sonst jetzt einfach mal aus und schau, was dann passiert

Bedeutet ganz einfach das es wird abgearbeitet durch die MCU nach der Reihe wie du das Programmierst.

Doch, weil sie genau beschreibt, was passiert. Der Arduino kann nur 1 Interrupt abarbeiten. Während dieser Zeit sind die anderen Interrupts gesperrt. Der nächste kommt also erst dran, wenn der erste fertig ist.

Gruß Tommy

Die Aussage ist doch eindeutig. Was genau verstehst du daran nicht ?

Mitdenken kann von Zeit zu Zeit hilfreich sein.

Lies doch mal richtig und gebe solche Antworten mit dem man auch was anfangen kann!!!!!

"Wer zuerst kommt, der mahlt zuerst"

Weggegangen Platz vergangen, oder wie jetzt?

Man, echt jetzt!
Aaaaaaah ich soll jetzt interpretieren, dass der Arduino nur ein Interrupt abarbeiten kann.

Wieso bin ich da nicht gleich selber drauf gekommen. Das steht ja da zwischen den Zeilen. Wie dumm von mir! Und dann weiß ich ja auch, dass alle anderen Interrupt-Quellen gesperrt sind. Ist doch logisch. Und dann weiß ich auch automatisch, dass die zweite Interrupt-Quelle nicht übergangen wird, sondern dann erst ausgeführt wird.

Danke @Tommy56 mit deiner Antwort kann ich was anfangen. Das klärt meine Fragen.

Mit der von @paulpaulson kann ich nichts anfangen!
Kann man sich auch sparen hier noch ein Spruch hinterher zu schreiben.

Scheint du bist mit der Realität nicht einverstanden, ok, dann probiere ich so zu antworten dass du es magst, trotz dass es Blödsinn ist: da wir alle schlau sind und in der Schule gelernt haben dass 1000 durch 25 rückstandslos geteilt wird und so zu Kollision von zwei Timers kommen kann, dann stellen sie einen Eintrag und fechten ihre Vorfahrtrechte vor Gericht, und sollte es nicht reichen, werden weitere Verhandlungen folgen, bis einen der Timer aufgibt und tritt zurück.

Und da folgt glatt der nächste schwachsinige Komentar!

Und wie bist du jetzt auf meine Fragen bezüglich darauf eingegangen, was jetzt genau beim Arduino passiert?

Das es zu Kollision kommen kann hab ich auch erwähnt. Daran habe ich auch gedacht. Aber die FRAGE die ich gestellt habe ist: WAS PASSIERT DANN, WENN DER FALL EINTRITT UND BEIDE TIMER IHR SIGNAL SENDEN.

Und dann habe ich noch gefragt, ob es da zu Problem kommen könnte.

Aber die Antwort: "wer zuerst kommt, mahlt zuert" sagt natürlich alles!
Da hab ich einfach nicht gut genug mitgedacht. Das hätte natürlich geholfen.

Neee, man muss es nicht wissen, aber man kann es im Datenblatt nachlesen, was man auch immer machen sollte.

Ich weiß.

Las mich raten, da ich jetzt weiss wie hilfreich mitdenken von Zeit zu Zeit sein kann, das steht unter dem Punkt "wer zuerst kommt, mahlt zuerst" im Datenbaltt.

:wink:

Blitzmerker...
Aber offensichtlich willst du es nicht verstehen.
Oder du möchtest uns nur verars....

Das nicht direkt, aber es steht unter „ Reset and Interrupt Handling“.

@Kai-R danke für deine Antwort und Hinweis, wo man im Datenblatt pfündig werden kann.

Das, meine Herren, ist ein Beispiel einer guten Antwort!

Eine konkrette Antwort auf eine konkrette Frage. Im dem Fall war meine Frage nicht konkrett, sondern scherzhaft gemeint. Aber genau so stellt man sich doch eine Antwort vor. Und nicht, dass man sich nacht einer Antwort noch mehr Fragen stellt, weiter nachhaken muss, oder ganz verwirrt wird!

ABER vielleicht merken sich sowas einige Personen und handeln auch entsprechend. Aber das muss man natürlich nicht erklären, wie man auf eine Fragestellung antwortet.

Das hat man ja in der Schule gelernt!

Hat dir schon mal jemand erzählt, wie unangenehm solche Typen wie du sind?

Tipp:

Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Qúelle: Martin Gerhard Reisenberg

Ob es zu Problemen führen kann das Datenblatt zu lesen? Da es offensichtlich für einige nicht logisch ist gleich nach Manual zu suchen. Aber ich persönlich danke dem TO für die Teilnahme an unserem herzhaften Community.