@microbahner Idee für MobaTools-Erweiterung eigenen function-Aufruf in den timer-interrupt einhängen

Hallo @MicroBahner,

in diesem Thread

habe ich nachgefragt ob du den Bresenham-Algorythmus in die MobaTools integrieren möchtest.

Hier noch eine andere Idee:
Wie wäre es eine Funktion einzubauen mit der man eine eigene function im timer-interrupt aufrufen kann?

Als man macht einen Aufruf myTimerFunc() mit der Adresse der eigenen function. Im Prinzip so wie man bei attachInterrupt() als zweiter Parameter die ISR-function angibt.

Mir ist schon klar, dass man damit dann jede Menge Mist bauen kann wenn die function zu lange ausgeführt wird.
Das könnte man vielleicht über eine Ausführzeitmessung wieder einschränken.

Die Ausführdauer der eingehänkten function wird gemessen. Wenn die Ausführzeit zu lang => nicht mehr Aufrufen und einen Fehlercode zurückgeben.

Die MobaTools liefern das Timer-Grundgerüst und den Bresenham kann man dann selbst programmieren.

Was meinst du?

vgs

Wenn man in einer ISR eine Callback Funktion etabliert, bläht sich der ISR Prolog und Epilog auf das Maximum auf, und damit auch der Stack- und Zeitverbrauch.

Das macht die Idee zu einer weniger günstigen Idee

jaaa . -- .. -- .. am besten man schreibt in eine ISR nur "RET" rein
damit sie möglichst schnell abgearbeitet ist.

Mal als Zahl: Wie viel Microsekunden brauchen denn der ISR-Prolog und der Epilog auf einem Arduino Uno ? 10µS, 50µS, 200µS oder 2000µS?

vgs

Wenn noch Timer Interrupts frei sind, kann man dort selbst einbauen was man möchte.

Ich vermute Du stellst dir das mit dem Timer-Interrupt der MobaTools zu einfach vor. In einer ISR werden die Pulse für alle aktiven Stepper und für die PWMs der Softleds beim Auf- und Abblenden erstellt. Um nun die MCU nicht mit zu vielen unnötigen Interrupts zu fluten, wird bei jedem IRQ neu berechnet, wann die nächste Aktion bei einem der aktiven Objekte fällig ist. Und dementsprechend wird dann die Zeit bis zum nächsten IRQ eingestellt. Bei mehreren asynchron laufenden Objekten kann sich diese Zeit von IRQ zu IRQ stark ändern. Ohne tiefe Einblicke in die internen MobaTools Objektzustände ist nicht vorhersehbar, wann der nächste IRQ eintritt.
Was soll damit eine User-Funktion anfangen?

Ich würde diese Erweiterung auch dem bisherigen Grundgedanken der MoBaTools widersprechend sehen. (Blöder Satz, aber ich lasse es so :wink: )
Das wäre dann besser in einer eigenen Lib untergebracht.

Gruß Tommy

Habe ich in der Tat. Ich dachte, dass der Timer-Interrupt gaanz regelmäßig aufgerufen wird.
Wenn der interrupt nicht regelmäßig aufgerufen wird dann macht es in der Tat keinen Sinn.

So damit hätten wir es geklärt. Also eigenen Timerinterrupt aufsetzen und den Bresenham darin aufrufen.

Vielen Dank fürs aufklären.

Bleibt noch die Frage bei welchen Microcontrollern hat man da Luft nach oben, damit man parallel auch noch so etwas wie tone(), oder IR-Senden/Empfangen machen kann.

vgs

Nur bei schnelleren?

Was meinst Du denn, könnte Luft nach oben schaffen?

Mehrere unabhängig voneinander konfigurierbare Timer so dass man
Also wenn jemand aus dem Kopf µC mit mindestens 4 unabhängigen Timern
aufschreiben kann, bitte posten

vgs

Mega

ATtiny 1614,1616,1617 und 3216,3217

Der 32u4 ( Leonardo/Micro) hat 4 Timer ( 2x8Bit, 2x16Bit).
Wenn es nicht AVR sein muss: Auch die STM32 und der neue UNO R4 haben >4 Timer. Der ESP32 hat auch viel spezielle Peripherie, da braucht man nicht so viele allgemein verwendbare Timer. Je nach Typ hat er 2 oder 4 64-Bit Timer (meines Wissens sind die 64-Bit Timer vom Core ungenutzt also frei verwendbar. Die MobaTools nutzen einen davon)

AVR128DB64 hätte 7 16-Bit Timer und einen 12-Bit Timer

Warum suchst du nicht selber?
Quasi jeder Hersteller hat eine Parametersuche!

Ausschnitt:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.