Hallo,

ich möchte mit einem "Arduino Nano" über einen "PWM Pin" mit einem "Constant Current Buck LED Driver " eine LED dimmen.

Jedoch benötigt der "Buck LED Driver" ein bestimmtes PWM-Signal, dass ich nur mit Veränderungen im Arduino- Code erzeugen kann.

siehe Datenblatt Buck LED: https://www.mouser.de/datasheet/2/468/RCD-48-958257.pdf

/************************************************** ************************************************** ******************/
Laut Datenblatt:

PWM DIMMING CONTROL & REMOTE ON/OFF CONTROL
Input Voltage Range: 5V typ. / 10V max.
Threshold Voltage: Device ON 0.5V max.
Device OFF 2.0V min.

PWM Frequency: For Linear Operation 200Hz max.
Frequency Limit 1000Hz max.
/************************************************** ************************************************** ******************/

Weil ich eine lineare Dimmung erreichen möchte, habe ich mir gedacht,dass ich den "Arduino Nano" PIN 3 verwende,
da dieser 450Hz hat und ich dort dann das PWM Signal auf 150Hz setze(200 Hz max. lineare PWm Operation ).
Ebenfalls habe ich in meinen Sketch versucht das PWM- Signal zu invertieren, da ja Device On = 0,5V max. und Device OFF = 2,0V min. sind.
Jedoch bekomme ich nicht das gewünschte Ergebnis. Die LED wird zwar gedimmt, wenn ich mit den Duty Cycle rumspiele , aber die LED geht bei 0 DC nicht aus. Hmmm

/************************************************** ************************************************** ******************/

Hier mein Sketch:
Code:
//Uno, Nano, Mini 3, 5, 6, 9, 10, 11 490 Hz (Pins 5 und 6: 980 Hz)  
/********************************************************************/
int ledPin3 = 3;
/********************************************************************/

void setup()
{
  Serial.begin(9600);
  Serial.println("********************************* PWM Test *********************************");  
  changePWmFrequenncy(ledPin3);
}

void loop()
{
  if (Serial.available() > 0) 
  {
    char ch = Serial.read();
    int pwmPercent = ch - '0';     
    writePwmInverted(ledPin3,pwmPercent);  
  }
}

void changePWmFrequenncy(int _ledPin)
{ 
  pinMode(_ledPin, OUTPUT);                          // Set digital pin to an output
  TCCR1A = _BV(COM1A1) | _BV(COM1A0) | _BV(WGM11);  // Enable the PWM output OC1A on digital pins and invert output
  TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS12);     // Set fast PWM and prescaler of 256 on timer 1
  ICR1 = 415.667;                                     // Set the PWM frequency to 150Hz: 16MHz/(256 * 150Hz) - 1 => (16000000/38400)-1 => 416,667 -1 => 415,667
}

void writePwmInverted(int _ledPin,float _percent)
{ 
  analogWrite(_ledPin, (255 / 100) * _percent);  
  TCCR1A = TCCR1A & ~B00110000; //switch off output B
  TCCR1A |= B00110000;  //switch on the B output with inverted output
}
Wie kann ich mein Ziel erreichen und was ist falsch in meinem Code?

Beste Grüße