Anders als beim Original kann nun
die Beep-Frequenz in weiten Grenzen geändert werden. Eine grobe
Einstellung ist im TestLab möglich. Mit der Spezialfinktion Call 241
kann man die PWM-Frequenz des Ausgangs auch feiner einstellen. Die
maximale Frequenz ist 187,5 kHz. Sie ergibt sich aus der Taktfrequenz
von 48 MHz und der PWM-Auflösung von 256 Stufen. 48000 / 256 = 187,5.
Mit dem Poti im Baukasten lässt sich die Frequenz zwischen 735 Hz und
187,5 kHz einstellen.
Rem Sound1
0x1164 PWM2 = 100
L1:
0x3C00 A = AD0
0x21F1 Call L241:
0x1964 Delay ms = 100
0x2001 Jmp L1:
Dieses kleine Programm reicht schon, um die Hörgrenze mehrerer
Personen zu vergleichen. Hörst du noch was? Wenn man es genauer wissen
will, muss die aktuelle Frequenz ausgegeben werden. Die Frequenz in
ganzen kHz ist 188 / A.
Rem Sound2
0x1164 PWM2 = 100
L1:
0x3C00 A = AD0
0x21F1 Call L241:
0x1A01 Delay s = 1
0x3400 B = A
0x01BC A = 188
0x2D00 A = A / B
0x4200 Print A
0x2001 Jmp L1:
Wenn das Programm auch ohne den PC laufen soll, muss man etwas mehr
Aufwand treiben und das kleine Display mit einsetzen. Nun wird die
Frequenz automatisch von 20 kHz bis 2 kHz heruntergefahren. Sobald man
etwas hört. kann man die Taste drücken, um die Anzeige und den Ton
anzuhalten. Das Programm wurde am Ende ins EEPROM gebrannt und steht
nun immer bereit. Wer jetzt ins Elektronik-Labor kommt, kann sich
diesem einfachen Hörtest unterziehen.
Rem Sound3
0x09FE Pdir = 254
0x0A01 Pullup = 1
0x1164 PWM2 = 100
0x0108 A = 8
0x0200 B = 0
0x3B00 [B+] = A
L1:
0x0200 B = 0
0x3A00 A = [B+]
0x21F1 Call L241:
0x3400 B = A
0x01BC A = 188
0x2D00 A = A / B
0x04FA D = 250
0x2117 Call L2:
0x0201 B = 1
0x4000 A = Pin0
0x2406 If A<B JMP L1:
0x0200 B = 0
0x3A00 A = [B+]
0x2800 A = A + 1
0x0200 B = 0
0x3B00 [B+] = A
0x2006 Jmp L1:
L2:
0x3600 C = A
0x020A B = 10
0x2D00 A = A / B
0x3400 B = A
0x3100 A = A Shl 1
0x1320 A = A OR = 32
0x1301 A = A OR 1
0x4500 Pout = A
0x1901 Delay ms = 1
0x3500 A = B
0x020A B = 10
0x2C00 A = A * B
0x3400 B = A
0x3700 A = C
0x2B00 A = A - B
0x3100 A = A Shl 1
0x1301 A = A OR 1
0x4500 Pout = A
0x1901 Delay ms = 1
0x3700 A = C
0x2617 D*Jmp L2:
0x0202 B = 2
0x222F If A=B Jmp L3:
0x4800 Ret
L3:
0x0109 A = 9
0x0200 B = 0
0x3B00 [B+] = A
0x4800 Ret