Probleme mit ISR

Hallo zusammen

Ich bin an einem Projekt welches diese beiden Bibliotheken verwendet

https://code.google.com/archive/p/rogue-code/wikis/SoftPWMLibraryDocumentation.wiki

SoftPWM verwendet den Timer2 und NMRADCC passiert auf einem externen Hardware Interrupt und micros().

Wenn ich jede Bibliothek für sich alleine in einem Testprogramm laufen lasse funktioniert alles wie gewünscht. Vereinige ich alles in einem Programm, funktioniert es für ein paar Sekunden, danach werden die DCC Signale nicht mehr ausgewertet.

Ich vermute das die ISR von SoftPWM in irgend einer Form Einfluss auf den Hardware Interrupt (hängt an D2) und micros hat.

Ich sehe aber nicht wo und wie ich das feststellen oder ändern könnte.
Gibt es eventuell eine SoftPWM Bibliothek die besser ist oder soll ich auf einen externen PWM Generator umstellen?

Gruss
Andy

Hey,

ohne deinen Code kann dir keiner helfen. Ich wahrscheinlich aber selbst mit nicht :stuck_out_tongue: .

Grüße

Noch eine Ergänzung

Wenn ich in der Funktion ISR(SOFTPWM_TIMER_INTERRUPT) den Code auskommentiere funktionieren zwar die LED's nicht aber die Funktionen von der NMRADCC funktionieren.

Es scheint als die Funktion ISR(SOFTPWM_TIMER_INTERRUPT) zu lange / zu oft aufgerufen wird.
Wie kann ich da etwas optimieren?

Andy

Wozu brauchst Du überhaupt eine PWM Bibliothek mit Interrupts?

Wenn sich zwei Bibliotheken um einen Timer prügeln, dann muß eine davon auf einen anderen Timer geändert werden.

Hallo

Ich will 16 Ausgänge via PWM ansteuern. Der Nano hat nur deren 6.

Wie gesagt die eine Bibliothek verwendet Timer2 die andere einen Hardware Interrupt. eigentlich sollten sie nach mir nicht in Konkurrenz sein was die Timer angeht.

Was vermutlich das Problem ist, ist das die eine Funktion zu lange geht bis sie wieder die Kontrolle wieder zurück gibt. Gemäss Entwicker ca. 200 Zyklen. Kann ich innerhalb einer ISR die Kontrolle kurzzeitig an andere Interrupts weitergeben?

Wäre da ein 16-fach-PWM-Schaltkreis nicht die einfachere Lösung?

Gruß Tommy

Guten Abend Tommy

Vermutlich schon. Es soll halt, weil für die Modelleisenbahn, eher klein sein. Von daher fand ich die Bibliothek mit dem SoftPWM spannend.

Wenn ich über einen PWM Baustein gehe, brauche ich ja auch Timers, wenn ich das richtig sehe. Ist es dann mit so einem Baustein weniger Zeitkritisch?

Im Moment würde ich vermutlich lieber den tlc5940 einsetzen.

Gruss
Andy

So wie ich den Schaltkreis verstenden habe, gibst Du per I2C für jeden Ausgang den Wert vor und das wars.
Erst wenn Du wieder einen Wert ändern willst, musst Du aktiv werden.

Es gibt auch eine Lib dazu.

Gruß Tommy