Im Setuptoto hat geschrieben: ↑Freitag 2. Februar 2024, 14:08 Ist beim Aktualisieren von tone() gewährleistet, dass der letzte "Ton" vor der Aktualisierung noch zu Ende gespielt werden kann? Oder gewährt dies z.B. ein vorangehender Aufruf von noTone()? Ansonsten könnte doch hier wieder das Problem auftreten können, dass die Beschleunigung unerwünscht hoch ausfallen könnte, oder nicht? Das würde nach meinem derzeitigen Verständnis dann doch speziell bei langsamer Momentangeschwindigkeit und fixer an die Maximalgeschwindigkeit angepasster Timer1 Laufzeit problematisch werden können, da tone() dann öfter als tatsächlich nötig aufgerufen wird.
Timer1.initialize(10000);//10ms //Wert in µs
Timer1.attachInterrupt(set_frequenz); // Frequenzfolger sollwert
void set_frequenz(){
if (frequenz_soll>=out_min) digitalWrite(Penb, LOW);/*Enable*/else digitalWrite(Penb, HIGH);//Disable
if (frequenz_soll<frequenz_ist){
if((frequenz_ist-frequenz_soll)>max_frequenz_change_down){
frequenz_ist= frequenz_ist-max_frequenz_change_down;
if (frequenz_ist<0)frequenz_ist=0;
tone(PclkX,frequenz_ist);
}else{
frequenz_ist=frequenz_soll;
tone(PclkX,frequenz_ist);
}
}
if (frequenz_soll>frequenz_ist){
// Serial.print("grösser 0 Freq: ");
// Serial.println(frequenz_ist);
if((frequenz_soll-frequenz_ist)>max_frequenz_change_up){
frequenz_ist= frequenz_ist+max_frequenz_change_up;
tone(PclkX,frequenz_ist);
}else{
frequenz_ist=frequenz_soll;
tone(PclkX,frequenz_ist);
}
}
}
Alles ohne eine Stepper Library
Gruß, Achim