Das mit dem Demo wurde hier schon einige mal behandelt.
Das ist schön. Aber warum integriert man die Diskussion nicht dahin, wo sie hingehört: Und zwar in die Diskussions-Seite über das C-Demoprogramms? Oder warum wird das Demoprogramm nicht mal angepasst, wenn Fehler drin sind? Ich würde es ja selber auch machen, wenn ich denn eine Lösung parat hätte bzw. das Problem verstehen würde, wo wir gleich beim nächsten Punkt sind:

Es hängt damit zusammen das dem _delay_ms keine Variable übergeben werden darf, nur Konstante sind zugelassen, siehe avr-libc-user-manual.
Ich habe mal in der Doku nachgeschaut, dort steht zu "_delay_ms" folgendes:

Perform a delay of __ms milliseconds, using _delay_loop_2().

The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz).

The maximal possible delay is 262.14 ms / F_CPU in MHz.

When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution.
Wo steht, dass nur Konstanten erlaubt sind?
Leider scheint es auch nicht daran zu liegen: Ich habe mal eine Konstante eingesetzt, und das Problem besteht immer noch. Außerdem nochmal: Wenn delay_ms wirklich stimmen sollte und das Grundgerüst auch, so würde die Startmelodie über 20 Sekunden dauern (s.o.) - das wird so nicht richtig sein! Und nochmal: Nach einem Wechsel auf "delay_us" (Also WENIGER warten -> Mikro- statt Millisekunde) kommen bei mir jedenfalls brauchbarere Töne raus.

Kann wer, der diesen Piepser brauchbar in C ansprechen kann, nicht mal seinen Code veröffentlichen?

Vielen Dank nochmal für jegliche Mühe!

Viele Grüße,
Sören