Arduino PWM und Bibliothek auf einem Timer

OP #7850740
Lesenswert?

Guten Abend zusammen,

Ich bastle mir gerade mit einem Arduino Nano V3.0 eine Lichtsteuerung mit IR Fernbedienung, die per PWM (analogWrite(0-255) N Mosfets ansteuert, die wiederum der LED die Masse geben. Da ich einen RGBCW LEDstreifen (24V) benutze brauche ich dafür 5 PWM Pins am Arduino (3,5,6,9,10; 11 bleibt frei). Jetzt habe ich aber einen Konflikt mit der IRRemote Bibliothek, die ebenso wie PWM PIN 3 & 11 den Hardwaretimer 2 nutzt. Daher schaltet pin 3 beim Andimmen auf einen Schlag ein, ab welchem analogWrite - Wert muss ich noch testen.

Daher meine Frage: wie löse ich diesen Timer Konflikt, bzw. wo kommt er her? Ausweichen auf andere Pins geht ja aufgrund der Anzahl nicht…

Danke schonmal für alle Tipps, Philipp

PS: ich hoffe ihr versteht mein Problem, ich beantworte natürlich alle Rückfragen

#7850754
Lesenswert?

Philipp K. schrieb:

wie löse ich diesen Timer Konflikt, bzw. wo kommt er her?

Philipp K. schrieb:

wo kommt er her?

Die Bibliothek nutzt einen Timer als Interrupt, um das Eingangssignal zu Samplen. https://github.com/Arduino-IRremote/Arduino-IRremote?tab=readme-ov-file#timer-and-pin-usage

Und denk dran, dass millis() auch einen Timer nutzt.

Philipp K. schrieb:

wie löse ich diesen Timer Konflikt

Mit einem PCA9685 zum Beispiel. Gut, die 16 Kanäle sind zwar vielleicht ein bisschen overkill, aber dafür 12bit und du kannst noch weitere Strips anschließen, wenn du sie einplanst

(Firma: Gast) #7851931
Lesenswert?

Adam P. schrieb:

PCA9685

7.7 Using the PCA9685 with and without external drivers • OUTDRV bit (MODE2 register) allows minimizing the amount of external components required to control the external driver (N-type or P-type device).

Aus: https://www.nxp.com/docs/en/data-sheet/PCA9685.pdf

Auch ab Seite 35 sehe ich keine Gatewiderstände... Wobei die fertigen Boards mit dem Chip alle (zumindest die ich kenne) 220R in den Pin Leitungen haben. Das sollte als Gatewiderstand reichen. Wobei ich da je nach P oder N Chanel FET auch noch Pullup oder Pulldown vorschlagen würde.

#7852070
Lesenswert?

Wenn man frei bei der Wahl des IR-Protokolls ist, könnte man auch das NEC-Protokoll nehmen. Das ist schön klein in der Codegröße und braucht keinen Interrupt. Alternativ könnte man auch einen 20 kHz-Oszillator (1 Gatter+R+C) an einen Portpin hängen, letzteren auf Pinchange-Interrupt stellen und damit die IRRemote-Interruptfunktion auslösen. Aber der PCA ist die komfortabelste Variante, die PWM-Qualität verbessert sich und man hat genug Erweiterungsmöglichkeiten.

#7852129
Lesenswert?

Mario M. schrieb:

Aber der PCA ist die komfortabelste Variante, die PWM-Qualität verbessert sich und man hat genug Erweiterungsmöglichkeiten.

Ohne Frage ist der PCA komfortabel. Und 12 Bit PWM-Auflösung sind auch besser als 8 Bit. Aber wie gesagt: es gibt auch Arduinos jenseits vom ATMega328. Und die haben das eingebaut (kein extra Chip). Beides, die höhere Auflösung und mehr Kanäle.

Wenn man auf das Arduino-Gedöhns verzichtet und lernt zu programmieren, kann man natürlich auch auf dem ATMega PWM mit bis zu 16 Bit machen (Soft-PWM). Mit 3 Kanälen hab ich das schon gemacht, es gehen aber bis zu 8 Kanäle (müssen dann auf dem gleichen Port liegen).

Oder man schaut sich bei anderen Herstellern um. Der STM8S105 hat 8(?) PWM-Kanäle in 16 Bit. Und IRMP läuft da auch drauf.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren