Ich denke, dass ich es jetzt hinbekommen habe - leider fehlt mir die Original-Bascom-Startmelodie, aber diese hier klingt jetzt jedenfalls auch schön.
Verwendet habe ich die Basis-Delay-Funktion _delay_loop_2(i), welche bei 16MHz und i=1 etwa (+/- Setup-Delay) 0,25 µs wartet.
Ich ersetze in der sound()-Funktion lediglich jeweils _delay_ms(hoehe); durch _delay_loop_2(150*hoehe); - was dann in seiner Gesamtheit folgendermaßen aussieht:
Code:
void sound(uint8_t hoehe, uint16_t laenge)
{
for(uint16_t i=0; i<laenge*15; i=i+(2*hoehe))
{
setportdon(7);
_delay_loop_2(150*hoehe);
setportdoff(7);
_delay_loop_2(150*hoehe);
}
}
Man kann sich mit Hilfe von void _delay_loop_2 (uint16_t __count) auch eine zweite waitms-Funktion bauen, die folgendermaßen aussieht (erfolgreich getestet bei z.B. 3s-Wartezeit):
Code:
void waitms2(uint16_t ms)
{
for(; ms>16; ms-=16)
{
_delay_loop_2(64000); // 64000 = 16 * 4000
}
_delay_loop_2(4000*ms);
}
Kann mir jemand bitte bestätigen, dass es wie hier beschrieben dann funktioniert?
Den Sound kann man mit der Konstante 150 noch ein wenig variieren.
Ich würde dann auch gerne das C-Demoprogramm modifizieren wollen, wohl wissend, dass es insgesamt vlt. sinnvoller wäre, Timer zu verwenden - aber das würde für das Demoprogramm wohl zu weit gehen. Ich denke, dass diese kleine Änderung (im Prinzip nur die beiden Zeilen) okay sind - oder?
Viele Grüße,
Sören
Lesezeichen