Quick 'n' Dirty Vorschlag, der was von Tiefpass hat.
Ich notier dir das ganze aber in C, da ich von Basecom absolut garnichts halte. (DA TOTAL INEFFIZENT!)
Code:
16 Bit variablen:
currentadcval: Momentaner ADC wert
preadcval: ADC wert vom Vorherigen durchlauf
diff: Differenz der Werte
void pwm_output(currentadcval){
if(currentadcval>preadcval){
diff=currentadcval-preadcval;
PWM+=diff/4; // Faktor entsprend skalieren, aber nicht zu groß machen und immer Potenzen von 2 verwenden! (Hät den Code klein!)
}else{
PWM=currentadcval;
}
preadcval=currentadcval;
}
So, wenn du die Funktion jetzt alle 1/4 sec aufrufst (ja nicht zu oft, sonst wird die Änderung zu krass), sollte das ganze passen.
Lesezeichen