Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: This feature may not be available in some browsers.
Die obige KSQ sollte gehen, aber effizient ist sie nur, wenn die Ledspannung knapp unter der Akkuspannung ist, da die Differenzleistung in Wärme umgewandelt wird.
#undef PWM2_AUTODETECT
#undef PWM2_ENABLED_DEFAULT
#define PWM2_ENABLED_DEFAULT 1
#undef PROG_PWM_CS_ENABLED
#define FADEOVER
void pwmRefreshSingleOutput(volatile uint8_t *pwmRegister, uint8_t sollValue)
{
uint8_t istValue = *pwmRegister;
#ifdef FADEOVER
if (istValue > sollValue) {
//dunkler stellen
//if ((istValue - sollValue) > 30) {
if ((istValue > 150) && (sollValue == 0x00)) {
istValue -= 2;
}
else
{
istValue = sollValue;
}
}
else
{
//heller stellen
if (istValue < 30) {
istValue += 1;
}
else
{
istValue = sollValue;
}
}
#else
if ((istValue > sollValue) || (istValue > 30)) {
//Soll kleiner als Ist, oder Ist hat einen Wert von 30 überschritten
//dann Sollwert direkt setzen
istValue = sollValue;
}
else
{
//Softstart
istValue += 1;
}
#endif
//istValue ins PWM Register schreiben
*pwmRegister = istValue;
}
void pwmRefreshOutputs(void)
{
//Interrupts aus...
//Sicherung der Interrupts ist egal, es werden eh nur welche für den Timer genutzt
cli();
//Lokale Variablen...
uint8_t pwm1Soll = pwmOutput.pwm1Soll;
uint8_t pwm2Soll = pwmOutput.pwm2Soll;
uint8_t pwm1ProgVoltage = pwmOutput.pwm1ProgVoltage;
uint8_t pwm2ProgVoltage = pwmOutput.pwm2ProgVoltage;
uint8_t pwm1Mode = pwmTable[0];
uint8_t pwm2Mode = pwmTable[1];
//Ausgang 1
#ifdef FADEOVER
//PWM Register erst abschalten wenn der andere Kanal den Sollwert erreicht hat
if ((0x00 == pwm1Soll) && (PWM2_REG == pwm2Soll)) { PWM1_REG = 0x00; } else
#else
if (0x00 == pwm1Soll) { PWM1_REG = 0x00; } else
#endif
if (PWM_MODE_KONST_RATIO == pwm1Mode) { PWM1_REG = pwm1Soll; } else
if (PWM_MODE_KONST_RATIO_INV == pwm1Mode) { PWM1_REG = pwm1Soll; } else
if (PWM_MODE_KONST_VOLT == pwm1Mode) { PWM1_REG = pwmGetRegulateOutputValue(pwm1Soll, pwm1ProgVoltage); } else
if (PWM_MODE_KONST_RATIO_SOFT == pwm1Mode) { pwmRefreshSingleOutput(&PWM1_REG, pwm1Soll); } else
if (PWM_MODE_KONST_VOLT_SOFT == pwm1Mode) { pwmRefreshSingleOutput(&PWM1_REG, pwmGetRegulateOutputValue(pwm1Soll, pwm1ProgVoltage)); }
//Ausgang2
#ifdef FADEOVER
//PWM Register erst abschalten wenn der andere Kanal den Sollwert erreicht hat
if ((0x00 == pwm2Soll) && (PWM1_REG == pwm1Soll)) { PWM2_REG = 0x00; } else
#else
if (0x00 == pwm2Soll) { PWM2_REG = 0x00; } else
#endif
if (PWM_MODE_KONST_RATIO == pwm2Mode) { PWM2_REG = pwm2Soll; } else
if (PWM_MODE_KONST_RATIO_INV == pwm2Mode) { PWM2_REG = pwm2Soll; } else
if (PWM_MODE_KONST_VOLT == pwm2Mode) { PWM2_REG = pwmGetRegulateOutputValue(pwm2Soll, pwm2ProgVoltage); } else
if (PWM_MODE_KONST_RATIO_SOFT == pwm2Mode) { pwmRefreshSingleOutput(&PWM2_REG, pwm2Soll); } else
if (PWM_MODE_KONST_VOLT_SOFT == pwm2Mode) { pwmRefreshSingleOutput(&PWM2_REG, pwmGetRegulateOutputValue(pwm2Soll, pwm2ProgVoltage)); }
//Interrupts wieder an
sei();
}
Hatte ich nie Probleme damit. Die Leuchtmittel haben ja quasi nix gekostet. Das Licht war wirklich 1a, da kommt man mit den China LEDs nicht ran. Problem war immer die kurze Laufzeit, drum bin ich irgendwann auf die DX P7-Lampe umgestiegen. Heute, wo man dank E-Bikes billig an hochwertige 18650er LiIon mit hoher Kapazität rankommen kann, wär ne IRC-Lampe mal echt wieder überlegenswert.Die IRCs sind sicherlich nicht schlecht (habe ich selbst auch). Allerdings ist die Haltbarkeit (Erschütterungen) und
Laufzeit deutlich geringer. Darum würde ich nicht mehr auf LED verzichten.