Hallo Basteltisch,
ich war davon ausgegangen, dass du die Freq in Hertz und die Dauer des Tons Lenms in Millisekunden angibst.
Bei einer Freq von 2000Hz und 1000 ms Länge wäre dann nach deiner Rechnung

Idelay = Freq / 2 '2000/2=1000
Idelay = 1 / Idelay '1/1000=0,001
Idelay = Idelay * 1000 '0,001*1000=1ms Verzögerung
Dies wäre gleich
Idelay = 2000/Freq

Bei 2000Hz is die Periodendauer aber nur 0,5ms.
Da du toggelst muss du aber zweimal umschalten für eine Periode. Die halbe Periodendauer ist 0,25ms.
Dies erreichst du mit

Idelay = 500/Freq

Bei Frequenzen über 2000Hz käme bei dir schon immer 0 heraus, bei der richtigen Rechnung sogar schon über 500Hz. Damit dies dennoch funktioniert, müsstest du über 500Hz auf waitus umschalten.
Und lass mal das Return in der Sub weg, das ist dort falsch.
Kann es sein, dass dein µC sofort wieder resettet oder auf einer anderen Frequenz läuft als du denkst?
Mach mal am Anfang direkt ein Wait 1 rein um zu erkennen ob er einen Reset ausführt.

Zeig doch mal dein ganzes Programm, dann kann man sicher mehr sagen.
Und anschließend probieren wir dir mal zu helfen, verschiedene Frequenzen mit einem Timer zu erzeugen.