Hallo,
also einen ton erzeugst du indem du an dem pin an dem dein lautsprecher
angeschlossen ist in bestimmten abstaenden auf 1 und 0 setzt. Wenn du
in einer Sekunde den pin auf 1 und dann wieder auf null setzt hast du
ein Hertz. Jetzt musst du zwischen den Befehlen die den pin auf 1 oder
0 setzten, sbi oder cbi, noch warteschleifen einbauen. Du hast deinen
4MHz Quarz also 4 Millionen takte pro sekunde. Um 1KHz zu erseugen
brauchst du eine warteschleife von 2000 Takten zwischen den befahlen
sbi und cbi. Wenn du die warteschleife aenderst aender sich die
frequenz. Die laenge des Tons kannst du beeinflussen indem du eine
warteschleife um deine ganze procedure herum setzt. Siehe Beispiel:
ton: mov tonlaenge,temp1 ;Tonlaenge (fequenz*sekunden/40)
mov tonhoehe,temp2 ;Tonhoehe (1=10KHz,10=1KHz,100=100Hz,
255=39.2Hz)
ldi temp3,0b01000001
ldi temp4,0b00101000
an: sbi portb,0
Zeit1: dec temp3
brne Zeit1
ldi temp3,0b01000001
dec tonhoehe
brne Zeit1
mov tonhoehe,temp2
aus: cbi portb,0
Zeit2: dec temp3
brne Zeit2
ldi temp3,0b01000001
dec tonhoehe
brne Zeit2
mov tonhoehe,temp2
dec temp4
brne an
ldi temp4,0b00101000
dec tonlaenge
brne an
Das einzige problem hier ist das man den 10KHz ton maximal 1s erzeugen
kann. Das kann man aber mit ein paar kleinen modifikationen aendern.
Viele Gruesse Anton